Существует множество стандартов, которые вам нужно понять, но электронная почта - это в основном текст.
Формат файла в /var/spool/mail
или /var/mail/user
и т. Д. Обычно является Berkeley mbox
. Это формально не определено нигде, но состоит из последовательности сообщений электронной почты RFC5322 (née RFC822), каждой из которых предшествует строка From_
, формат которой в основном From %s
%C
, где %s
является адресом электронной почты отправителя (что вы также видите в Return-Path:
) и %C
- это дата прибытия сообщения. Обратите внимание на два пробела между строками формата!
Почтовое сообщение Toplevel является RFC5322, но, кроме того, вам необходимо понять MIME.
Вы также спотыкаются (E) SMTP RFC5321 касательным только к вашему вопросу, но хорошо знать. Обратите внимание, что 821 и 822 (и более поздние 2821 и 2822, а теперь 5321 и 5322) имеют соседние RFC-номера.
Кроме того, существует дикий, дикий запад нестандартных заголовков, некоторые из которых, тем не менее, значительны. Дан Бернштейн ссылка http://cr.yp.to/immhf.html является спасателем. В качестве общего руководства, что обычно делают спамеры, это скопировать/вставить заголовки, не понимая их; поэтому важнейшей практикой обеспечения доступности является «не делать этого». Другими словами, если вы не знаете, для чего нужен заголовок, не используйте его.
Любой современный язык программирования будет поставляться с библиотеками для создания и управления RFC5322 и MIME и, возможно, mbox
.Для создания сообщения вы можете отправить где-то, что вам не нужно mbox
в любом случае, просто что-то вдоль линий (псевдокод)
message = new MIME({'Subject': 'hello', 'From': '[email protected]',
'To': 'My Friend <[email protected]>'});
message.addbodypart('text/plain', 'Hi Fred.\nHow are you?');
message.addbodypart('image/png', {'file': '/home/you/logo.png'});
smtp = new SMTP('mail.example.net', 587, {'user': 'me', 'pass': 'xyzzy'});
smtp.send(message);
многочастного сообщение выглядит примерно так, как вы описали в своем вопросе, за исключением нет конкретный заголовок для определения «вложений» и фактически концептуально нет «привязанностей», просто «частей тела». Вот простое сообщение MIME, чтобы показать, что сообщение в вашем вопросе будет выглядеть правильно.
From: sender <[email protected]>
To: receiver <[email protected]>
Subject: test subject
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="so_long_eFlop"
This is a MIME multipart message. Nobody actually sees what it says here.
--so_long_eFlop
Content-type: text/plain; charset="utf-8"
Content-disposition: inline
Content-transfer-encoding: 7bit
Many mail clients will display this as the "main part" but MIME does not
define any particular hierarchy. Many mail clients will generate a
text/plain rendering and a text/html rendering of the message you type in,
and the recipient's mail client will decide -- based on user preferences
-- which one to display. Anyway, I will not create an example of that
here. This is just "a text message with a picture attached", or, more
precisely, a MIME message with two body parts.
Oh, the content-disposition: inline is usually just implied for a
text/plain part. Some clients will override or ignore the disposition
set by the sender anyway.
--so_long_eFlop
Content-type: image/png
Content-disposition: attachment
Content-transfer-encoding: base64
Iam+not/attaching+a/real00picture+here/just/a/bunch0of/binary/goo===
--so_long_eFlop--
Это сайт программирования. Вопрос о том, как найти инструменты для управления сообщениями электронной почты, принадлежит Super User. – tripleee