SMTP简单邮件传输协议 – 用telnet发送电子邮件

以前对互联网感兴趣的时候,很早就接触HTTP和FTP协议而一直没有关注SMTP协议是因为在这方面应用的需求比较少。
我的博客使用SMTP来给评论者发送邮件通知,但使用的是邮件中转服务器,需要验证账号之后提交给中转服务器发送。在PHP中使用此种方法发送邮件的实例可以参见:博客留言短信通知

下面用telnet实践另外一种方法,直接连接域名MX记录的地址,无须账号直接投递邮件。
假如现在要投递一封邮件到gmail.com去,如何获得gmail.com的MX记录呢?

最简单的方法是使用系统自带的nslookup等工具去查询DNS的信息。例如:

Z:\py>nslookup
默认服务器: ns3.gd.cnmobile.net
Address: 221.179.38.7

> set type=mx
> gmail.com
服务器: ns3.gd.cnmobile.net
Address: 221.179.38.7

非权威应答:
gmail.com MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com
gmail.com MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google.com
gmail.com MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
gmail.com MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com

gmail.com nameserver = ns3.google.com
gmail.com nameserver = ns2.google.com
gmail.com nameserver = ns4.google.com
gmail.com nameserver = ns1.google.com
ns1.google.com internet address = 216.239.32.10
ns2.google.com internet address = 216.239.34.10
ns3.google.com internet address = 216.239.36.10
ns4.google.com internet address = 216.239.38.10

gmail.com的MX记录不止一个,根据不同的优先级赋予了不同的地址。
这里选择gmail-smtp-in.l.google.com作为要连接的STMP服务器。
关于如何使用SMTP协议进行通信,可以参见RFC821文档

发送之后,登录邮箱查收邮件,发现不在收件箱里,而是在垃圾邮件里面……T_T

把邮件移到收件箱之后,再尝试发送一次,该不会再被当作垃圾邮件来处理了吧……

看来已经记录了这个发件的邮箱地址,这样就不会当作垃圾邮件来处理了!至于会不会把邮箱地址和发件的IP地址一起记录,就不清楚了!

其实,用telnet可以很容易地制造一封垃圾邮件发送给邮件服务器,发送方完全可以随便伪造。我想一般大型的邮件服务器都是维护一张IP白名单,不在白名单上的而且发件人的地址又不在联系人列表里的邮件,绝大部分都被当作垃圾邮件处理了。没有彻底地玩转过邮件服务器,所以不太了解其工作原理,仅纸上谈兵肯定是不够的!

所以,打算写个简单的MailServer,积累一下经验!今晚看到有这么一条法律:

中华人民共和国信息产业部令第38号《互联网电子邮件服务管理办法》:
第四条 提供互联网电子邮件服务,应当事先取得增值电信业务经营许可或者依法履行非经营性互联网信息服务备案手续。未取得增值电信业务经营许可或者未履行非经营性互联网信息服务备案手续,任何组织或者个人不得在中华人民共和国境内开展互联网电子邮件服务。

我可爱的祖国!

SMTP简单邮件传输协议 – 用telnet发送电子邮件》有12个想法

  1. Pingback引用通告: 写一个与DNS通信获取MX记录的C++类 « Xiaoxia[PG]

        1. Xiaoxia 文章作者

          不可以的吧,你修改的是IP层的数据包,TCP需要双方建立连接才能工作。只知道一方的IP是建立不了连接的。

          回复
            1. Crazy~!

              额。你伪造的SYN数据包指向的机器,肯定没有开放指定连接端口。连接立即变成了DDOS攻击数据包之一。嘿嘿!

              回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据