在fetchmail
抓取邮件后,新邮件会存储在/var/mail/user
这样的文件中。我们可以通过user
等文本编辑器打开文件vim
。
如何创建此类基于文本的电子邮件文件?说,我想发送一封内容包含的电子邮件:
From: sender <sender@xx.com>
To: receiver <receiver@xx.com>
Subject: test subject
Contents: ...
Attached: file1.txt, file2.png, file3.pdf
问题是如何使这些成为正式的基于文本的电子邮件。
此外,如果我有这样的电子邮件文件。如何通过某些命令行工具提取文件(例如,主题,内容,附件等)。我知道我可以用mutt
这样的程序打开它。可以使用命令行实用程序完成吗?
答案 0 :(得分:3)
文件格式称为“mbox”。维基百科(http://en.wikipedia.org/wiki/Mbox)以及整个互联网都有一篇很好的文章。与RFC 4155一样。:))
答案 1 :(得分:3)
您需要了解一系列标准,但电子邮件基本上是文字。
/var/spool/mail
或/var/mail/user
等文件格式通常是伯克利mbox
。这在任何地方都没有正式定义,但由一系列RFC5322(néeRFC822)电子邮件消息组成,每个电子邮件前面都有From_
行,其格式基本上是From %s
%C
其中{ {1}}是发件人的电子邮件地址(您在%s
中看到的内容),Return-Path:
是邮件到达的日期。注意格式字符串之间的两个空格!
顶级电子邮件是RFC5322,但最重要的是,您需要了解MIME。
您还会偶然发现(E)SMTP RFC5321,这只与您的问题相关,但很有必要。请注意821和822(以及后来的2821和2822,现在是5321和5322)是如何具有相邻的RFC编号的。
此外,还有一个狂野的,狂野的西方非标准标题,其中一些仍然很重要。丹·伯恩斯坦的参考http://cr.yp.to/immhf.html是救命稻草。作为一般准则,垃圾邮件发送者通常做的是复制/粘贴标题而不理解它们;因此,可交付性的基本实践是“不要那样做”。换句话说,如果您不知道标题是什么,请不要使用它。
任何现代编程语言都会附带库来创建和操作RFC5322和MIME,也可能mbox
。为了创建一个可以发送到某个地方的消息,你不需要mbox
,只需要(伪代码)
mbox
多部分邮件看起来与您在问题中描述的内容类似,除了没有特定的标题来标识“附件”,实际上概念上没有“附件”,只是“正文部分”。这是一个简单的MIME消息,用于显示问题中的消息将如何正确显示。
message = new MIME({'Subject': 'hello', 'From': 'me@example.net',
'To': 'My Friend <you@example.com>'});
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);
答案 2 :(得分:0)
telnet your.mail.server 25
helo localhost.localdomain
mail from:<sender@address.com>
rcpt to:<recipient@address.com>
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