跳转到内容

通信网络/SMTP协议

来自维基教科书,开放的书籍,开放的世界

SMTP - 简单邮件传输协议

[编辑 | 编辑源代码]

通常归因于TCP/IP端口25,SMTP是以下RFCs的精简结果

  • RFC 821 - 简单邮件传输协议(标准)
  • RFC 1870 - 用于邮件大小声明的SMTP服务扩展(标准)
  • RFC 2821 - 简单邮件传输协议(建议)
  • RFC 2822 - 互联网邮件格式(建议)
  • RFC 2920 - 用于命令流水线的SMTP服务扩展(标准)
  • RFC 3030 - 用于传输大型和二进制MIME邮件的SMTP服务扩展(建议)
  • RFC 2487 - 用于通过TLS进行安全SMTP的SMTP服务扩展(建议?)
  • RFC 5321 - 简单邮件传输协议(草案标准 - 废弃 RFC 2821)

从技术上讲,其中一些构成了ESTMP,但我倾向于将它们全部归类在一起。在我处理电子邮件的地方,似乎没有太大区别(或者我不知道更好)。

注意:我将在本文中进行一些吐槽。

即使我提供以上RFC的链接,我也没有花时间去阅读它们。那是写MTA的人的工作;)我只是找出错误,如果可以的话就修复它们,并尽力阻止任何大量的垃圾邮件到达我的用户,以人力和计算能力为可能。我在以下方面使用“应该”是基于个人意见和经验,而不是RFC。虽然它们通常匹配,但我对可接受内容的限制要严格得多。

您可能还会注意到我在SMTP对话中的某些点说要拒绝邮件。为什么不呢?如果对方是邮件服务器,那么它完全有能力生成一个退回消息并将其发送回编写电子邮件的人,而且它将采用本地系统管理员知道并可以处理的格式。如果它是一个垃圾邮件引擎或病毒,那么您的退回消息本身就会变成垃圾邮件 - 如果您在接受消息之前拒绝,则不会生成退回消息。

HELO/EHLO

[编辑 | 编辑源代码]

允许 - 有效的主机名和IP
[x.x.x.x] - 不太可能找到任何邮件服务器会这样做,但我仍然接受它。
mail.example.com - 完美。

不允许 - 其他!
x.x.x.x - 缺少方括号
ms_server.example.com - 下划线是非法字符!(MS$ 将其放在空格的位 - 哎哟)

在HELO时提供的主机名应解析为连接主机的IP地址。反向IP可能与正向IP匹配,但随着ADSL(和其他BB链接)上小型企业的增加,许多服务器无法访问其rdns记录。

MAIL FROM

[编辑 | 编辑源代码]

应该是发送所有退回消息和任何状态更新消息的电子邮件地址。通常是发送电子邮件的人、处理退回消息的脚本或其他你能想到的东西。垃圾邮件发送者会编造假的电子邮件地址(目前是这样),所以这是一个杀死大量垃圾邮件的好方法。用回调来验证它,或者你的最喜欢的MTA提供什么。万岁[Exim]

电子邮件地址应采用“真实姓名”<[email protected]>的形式

你把邮件发给谁了?
邮件的最终接收者。应该在此时进行验证,并可能进行字典攻击防御。这是一个对标准的轻微修改(据我所知),但已将某些网站的流量减少了至少50%。它还阻止了垃圾邮件发送者使用您的MTA作为退回垃圾邮件的宿主(许多服务器接受退回邮件的限制远远低于普通邮件)。

有关格式,请参见 MAIL FROM:。

邮件的核心内容。应该过滤掉垃圾邮件和病毒,如果出现问题,就应该在这里拒绝。拯救世界免受无用的退回消息的困扰。

格式是标题后跟一个空行,邮件正文,然后是CRLF.CRLF(单独一行上的句号)。
标题是单行内容 - 标题:内容
如果需要换行,第二行及以后的行的开头必须是空格。

正文几乎可以是任何7位ASCII字符。

我相信还有很多内容可以添加到这里,但是,这就是维基百科的作用!赶快贡献吧。

华夏公益教科书