Linux 如何创建电子邮件文件?

Linux 如何创建电子邮件文件?,linux,shell,email,Linux,Shell,Email,fetchmail获取邮件后,新邮件将存储在类似/var/mail/user的文件中。我们可以通过文本编辑器(如vim)打开文件user 如何创建此类基于文本的电子邮件文件?比如,我想发送一封包含以下内容的电子邮件: From: sender <sender@xx.com> To: receiver <receiver@xx.com> Subject: test subject Contents: ... Attached: file1.txt, file2.png,

fetchmail
获取邮件后,新邮件将存储在类似
/var/mail/user
的文件中。我们可以通过文本编辑器(如
vim
)打开文件
user

如何创建此类基于文本的电子邮件文件?比如,我想发送一封包含以下内容的电子邮件:

From: sender <sender@xx.com> 
To: receiver <receiver@xx.com>
Subject: test subject
Contents: ...
Attached: file1.txt, file2.png, file3.pdf
发件人:发件人
收件人:收件人
主题:测试主题
内容:。。。
附件:file1.txt、file2.png、file3.pdf
问题是如何使这些邮件成为正式的基于文本的电子邮件


此外,如果我有这样的电子邮件文件。如何使用一些命令行工具提取文件(例如,主题、内容、附件等)。我知道我可以用
mutt
这样的程序打开它。这可以使用命令行实用程序来完成吗

文件格式称为“mbox”。维基百科()上有一篇好文章,互联网上也有。如RFC 4155.:)

文件格式称为“mbox”。维基百科()上有一篇好文章,互联网上也有。如RFC 4155.:)

你需要了解很多标准,但电子邮件基本上是文本

/var/spool/mail
/var/mail/user
等中的文件格式通常是Berkeley。这在任何地方都没有正式定义,但由一系列RFC5322(née RFC822)电子邮件组成,每个邮件前面都有一行
发件人,其格式基本上是
发件人%s
%C
,其中
%s
是发件人的电子邮件地址(您也可以在
返回路径中看到:
%C
是消息到达的日期。请注意格式字符串之间的两个空格

顶级电子邮件消息是RFC5322,但除此之外,您需要理解

  • mbox
  • 电子邮件格式:
  • 默剧:
你也会被(E)SMTP绊倒,这与你的问题无关,但很高兴知道。请注意821和822(以及后来的2821和2822,现在是5321和5322)如何具有相邻的RFC编号

此外,在非标准标题的西边还有一片荒芜,尽管如此,其中一些标题还是很重要的。丹·伯恩斯坦的参考书是救命稻草。一般来说,垃圾邮件发送者通常会在不理解标题的情况下复制/粘贴标题;因此,交付性的一个基本实践是“不要那样做”。换句话说,如果您不知道标题的用途,请不要使用它

任何现代编程语言都会附带创建和操作RFC5322和MIME的库,可能还有
mbox
。为了创建可以发送到某处的消息,您不需要
mbox
,只需要(伪代码)之类的东西

message=newMIME({'Subject':'hello','From':'me@example.net',
‘致’:‘我的朋友’});
message.addbodypart('text/plain','Hi Fred.\n你好吗?');
message.addbodypart('image/png',{'file':'/home/you/logo.png'});
smtp=newSMTP('mail.example.net',587,{'user':'me','pass':'xyzy'});
smtp.send(message);
多部分消息与您在问题中描述的内容类似,只是没有用于标识“附件”的特定标题,实际上在概念上没有“附件”,只有“身体部位”。下面是一个简单的MIME消息,显示问题中的消息的正确外观

发件人:发件人
收件人:收件人
主题:测试主题
MIME版本:1.0
内容类型:多部分/混合;boundary=“so\u long\u eFlop”
这是一条MIME多部分消息。没有人真正看到它在这里说什么。
--再见
内容类型:文本/纯文本;charset=“utf-8”
内容配置:内联
内容传输编码:7bit
许多邮件客户端会将其显示为“主要部分”,但MIME不会
定义任何特定的层次结构。许多邮件客户端将生成一个
文本/普通呈现和键入消息的文本/html呈现,
收件人的邮件客户端将根据用户偏好进行决定
--显示哪一个。无论如何,我不会创建一个这样的例子
在这里这只是一条“附有图片的短信”,或者更多
确切地说,是一个包含两个主体部分的MIME消息。
哦,内容配置:inline通常只是暗示一个
文本/普通部分。某些客户端将覆盖或忽略该处置
还是由发件人设置的。
--再见
内容类型:图像/png
内容配置:附件
内容传输编码:base64
Iam+not/attaching+a/real00picture+here/just/a/bunch0of/binary/goo===
--再见--

您需要了解一系列标准,但电子邮件基本上是文本

/var/spool/mail
/var/mail/user
等中的文件格式通常是Berkeley。这在任何地方都没有正式定义,但由一系列RFC5322(née RFC822)电子邮件组成,每个邮件前面都有一行
发件人,其格式基本上是
发件人%s
%C
,其中
%s
是发件人的电子邮件地址(您也可以在
返回路径中看到:
%C
是消息到达的日期。请注意格式字符串之间的两个空格

顶级电子邮件消息是RFC5322,但除此之外,您需要理解

  • mbox
  • 电子邮件格式:
  • 默剧:
你也会被(E)SMTP绊倒,这与你的问题无关,但很高兴知道。请注意821和822(以及后来的2821和2822,现在是5321和5322)如何具有相邻的RFC编号

此外,在非标准标题的西边还有一片荒芜,尽管如此,其中一些标题还是很重要的。丹·伯恩斯坦的参考书是救命稻草。一般来说,垃圾邮件发送者通常会在不理解标题的情况下复制/粘贴标题;因此,交付性的一个基本实践是“不要那样做”。换句话说,如果您不知道标题的用途,请不要使用它<
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);
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