4

首先了解下邮件发送的原理(下面的操作仅限 mac/linux):

$ dig MX qq.com +short

30 mx1.qq.com.
10 mx3.qq.com.
20 mx2.qq.com.

如果要发送邮件给 xxx@qq.com,首先要查找 qq.com 对应的 MX 记录,如果没有记录的话,某种特色情况下还要查看他的 cname 值。

通常接受邮件的端口都是 25 端口,下面使用 telnet 命令进行尝试

$ telnet mx1.qq.com 25

Trying 113.108.16.62...
Connected to mx1.qq.com.
Escape character is '^]'.
220 newmx30.qq.com MX QQ Mail Server
550 Connection denied. please try again later
Connection closed by foreign host.

当然,我们这里是在本地测试,直接就被 ban 掉,所以可以考虑对 189.cn 的邮箱进行测试。

下面就是一些通讯的内容,这里暂不多讲,直接谷歌“使用 telnet进行邮件发送即可”,只强调一些关键的内容。

  1. HELO $HOSTNAME
  2. MAIL FROM: $EAMIL
  3. RCPT TO: $EMAIL
  4. DATA 然后邮件的内容中又会出现发件人和收件人

换位思考阶段

除了你主动告诉他的这些信息(您是谁,来自哪儿,要到哪儿去,带着什么),接收方还可以获取到你的 IP。所以,收件人第一件事情就是验证你IP的信誉度,然后验证你提供的所有信息的合法/正确性。

  1. IP 是否在黑名单中。就和人的第一印象一样,如果IP在黑名单,很容易被直接ban掉。查询传送门:http://mxtoolbox.com/blacklists.aspx
  2. 你的IP和你的在 HELO 时说的域名是否存在绑定关系。关键字:反向域名解析。国内多数ip提供商不提供该功能,所以有时候邮件服务建议使用国外的VPS/服务器。
  3. 你的 MAIL FROM 中的域名是否可以通过该IP发送,会不会被冒充呢?这个就要涉及到另外一些规范,例如 SPF,DKIM 规范,其中 DKIM 除了验证发送者的身份外,还能防止邮件内容被篡改。详情自行谷歌。并且在 DNS 中设置。
  4. 你的 DATA 中也有发件人选项,如果你是收件的人会不会也要验证下所以同上,并且建议和 HELO 中的域名、 MAIL FROM 中的域名还有现在 DATA 中的发件人三者一致。

折腾了这么多,邮件应该可以成功的发出去了。但是,你会发现国外(例如hotmail)邮件一直都进入不了。如何 http://wiki.wordtothewise.com/ISP_Summary_Information 。这个是个体力活,根据你发送的对象进行信息注册,然后就OK了。


于是恭喜你,你的邮件可以发送出去了。但是一段时间后会发现经常会出现发送失败的情况。如何获取到更多的反馈呢?

  1. 邮件发送完毕后对方服务器的返回内容,他会告诉你例如收件人不存在、发送频率过高的情况,有可能的话及时处理。
  2. bounce 邮件,即弹回邮件。你需要一个专门的收件服务对他们进行分析,然后不再向那些邮箱发送邮件。
  3. QQ Mail提供了举报反馈服务,具体参考 QQ邮箱开放平台

最后,还是要提醒一个关于 IP 预热的概念,简单的说就是对于一个新的 IP,你要在前期控制你的发送总量,好让收件服务一个可以给你打分的阶段。

再附上一些邮件相关的测试工具:

  1. http://www.checktls.com/perl/TestReceiver.pl => 收件安全性测试
  2. http://www.mail-tester.com/ => 垃圾邮件检测
  3. https://toolbox.googleapps.com/apps/messageheader/ => 邮件头部信息分析

技术的东西到此基本结束了,经验总结至我最近的一个邮件服务(现在处在徘徊期),非技术观点传送门: http://vincenting.com/think/give-up-jianxin/,项目地址传送门:http://jianxin.io/(希望打开的时候项目还没有被我自己完全叫停)。

如果对该项目、或者邮件发送感兴趣,欢迎联系。


丁文森
792 声望34 粉丝

完美主义者,概念主义者,左脑右脑趋于平衡者。