SMTP Inside Out

互联网电子邮件如何工

你有没有想过当你按下电子邮件程序中的发送按钮时会发生什么? 可能不会,我想 - 只要它有效。 不过,这正是你应该怀疑的原因。 万一有些东西不起作用,那么知道不起作用是很好的。 通常,这只是解决方案的一半。

当您发送电子邮件SMTP进场时。 SMTP是简单邮件传输协议(RFC 5321:简单邮件传输协议)中定义的简称。 您的邮件客户端 使用这个干净而简单的过程与SMTP服务器 交谈一个地方到另一个地方获取电子邮件

调情

您的电子邮件程序将成为SMTP客户端 ,连接到邮件服务器的 端口 25(通常是SMTP端口 ),并且 - EHLO说。 最后,电脑只是人,重要的是它要表现出礼貌。 实际上,它并不试图礼貌,而是使用稍后添加到SMTP中的HELO命令(SMTP命令通常由四个字符组成)。

两种口味的HELO

EHLO是最近的一个,它使服务器通告所支持的所有附加功能(例如传送状态通知或传送包含安全ASCII字符以外的消息的功能)。

并不是每个服务器都会允许这个问候语,但它需要接受一个普通的HELO,它自然会假定没有附加功能。 不过,这两个hello命令确实需要客户端在** LO之后指定其域。 在实践中,这看起来像这样:

220 mail.domain.net ESMTP服务器
HELO
501 HELO需要域名地址
HELO本地主机
250 mail.domain.net你好本地主机[127.0.0.1],很高兴认识你

(我的输入是斜体 ,服务器输出是黑色的;以5开头的行表示错误 。)

发件人

该协议的其余部分确实值得该属性简单。 如果您想发送电子邮件,则以关键字MAIL FROM:开头。 接下来是发件人的电子邮件地址 ,正如发件人所建议的那样。 不要忘记在地址周围加括号,但是(比如)。 继续我们的例子,我们有:

MAIL FROM:
250 sender@example.com ...发件人确定

收件人

服务器接受发件人地址后,客户可以提供收件人地址。 此行动的命令RCPT TO:再次颇具启发性。 我想发邮件给自己

RCPT TO:recipient@example.com
250 support@lifewireguide.com ...收件人确定(将排队)

服务器将排队意味着:它会将邮件保存在本地,并将其与所有其他排队邮件一起以间隔(例如,每30分钟一次)发送。 这种行为取决于配置,服务器也可能立即传送邮件。

我们差不多完成了。 但是,仍然缺少的是重要的部分:实际的信息。

消息

现在“信封”已经完成,电子邮件消息的数据可以按照原样进行。 这个“数据”由电子邮件的正文标题字段组成

启动使服务器接受消息的状态的命令是DATA 。 接下来是电子邮件消息的所有标题字段,然后是正文,这两个字段仅占用一大块文本(或数据)。 要告诉服务器输入已完成,单独一行上的一个点被使用(\ r \ n。\ r \ n)。 所以我发送我的消息:

数据
输入邮件,以“。”结尾。 在一条线上
消息ID:
日期:1997年8月17日星期日18:48:15 +0200
来自:Heinz Tschabitscher
致:Heinz Tschabitscher
主题:Summarize-Proust竞赛

去天鹅的世界!

250 SAA19153消息接收供货

是的,这意味着您可以在“收件人:”字段中声明与电子邮件地址完全不同的名称。 例如,您可以使用“ 收件人列表已取消”

结束

您现在可以发送尽可能多的电子邮件,只要您重复MAIL FROM:到的步骤即可 。 如果你完成了,你可以用QUIT命令退出服务器,这就是我们所做的:

放弃
221再见

我怎样才能做到这一点?

非平凡的解决方案是通过端口25远程登录到您的外发邮件服务器 (您可以在您的电子邮件客户端的帐户设置中找到其地址)。

更简单的方法是使用这个Java小程序 ,它试图模仿SMTP协议并指导您完成对话。