2013-09-04 2 views
0

После того, как fetchmail извлекает письма, новые письма хранятся в файле, таком как /var/mail/user. Мы можем открыть файл user текстовым редактором, например vim.Как создать файл электронной почты?

Как создать такие текстовые файлы электронной почты? Скажем, я хочу отправить электронное письмо с содержанием:

From: sender <[email protected]> 
To: receiver <[email protected]> 
Subject: test subject 
Contents: ... 
Attached: file1.txt, file2.png, file3.pdf 

Проблема заключается в том, как сделать их официальными текстовыми сообщениями.

Кроме того, если у меня есть такой файл электронной почты. Как я могу извлечь файлы (например, темы, содержимое, прикрепленные файлы и т. Д.) С помощью некоторых инструментов командной строки. Я знаю, что могу открыть его с помощью программы, например, mutt. Можно ли это сделать с помощью утилиты командной строки?

+0

Это сайт программирования. Вопрос о том, как найти инструменты для управления сообщениями электронной почты, принадлежит Super User. – tripleee

ответ

2

Существует множество стандартов, которые вам нужно понять, но электронная почта - это в основном текст.

Формат файла в /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-- 
0
telnet your.mail.server 25 
helo localhost.localdomain 
mail from:<[email protected]> 
rcpt to:<[email protected]> 
data 
From:Me 
Subject:This is an email via Telnet 

Hi, 

The first line connects to the server on port 25. Replace "your.mail.server" with the name or address of the MX server for the domain. 
Most servers expect the second "HELO" line to begin the session. I have seen servers that don't care, but in general they should throw an error. 
You must have a "MAIL FROM:" line with the address you expect a reply to come to. 
The mail is going nowhere if you don't specify the "RCPT TO:" address. 
The message body begins with "DATA" line. This will usually be met with instruction on how to end the message - a single "." on a line by itself. 
The "From:" and "Subject:" headers above are optional. You can add any additional headers here. 

. 
quit 
Смежные вопросы