在日常工具开发中,常常会有发送邮件的需求。在一些高级语言中,如Python。C#中,都有专门的邮件发送模块,如Python 中的 smtplib 模块。那么。一封邮件究竟是怎样发送到一个特定的邮箱呢?

举个样例:使用test@163.com 发送一封邮件到 test@qq.com。

首先,看下邮件系统的组成部分。例如以下图

Windows命令实现匿名邮件发送_邮件发送

再看下邮件发送的整个过程,例如以下图:

Windows命令实现匿名邮件发送_域名解析_02
①发送者使用SMTP协议,将邮件发送到自己邮箱server

②163邮件server使用SMTP协议,将邮件发送到QQ邮件server

③收件人使用POP3协议,从server端读取邮件

在上面过程中我们会发现两个问题:

①163邮件server须要验证发送方是否是合法用户。也就是说在整个发送过程中。须要使用到test@163.com的password才干完毕整个邮件发送过程。

②163邮件server怎样发送邮件到QQ邮件server的呢?事实上,这中间有个域名解析的过程。发送方会依据收件人的信箱来解析其server域名(qq.com),在该解析过程中,询问其邮件server的地址。

既然验证过程是在163邮件server。那么我们是不是能够直接绕过去,直接模拟请求跟QQ邮件server进行交互呢?答案是肯定的,而邮件发送的整个过程能够抽象成下图

Windows命令实现匿名邮件发送_发送邮件_03

我们能够发现关键的地方是怎样解析QQ邮件server的地址。

此处我们使用Windows命令nslookup来进行域名解析。

查看qq.com的邮件server地址,能够使用命令:nslookup -qt=mx qq.com,结果例如以下:

Windows命令实现匿名邮件发送_发送邮件_04
当中 mail exchanger 后面就是qq.com 的邮件server地址。

这样。我们就绕过了password验证的过程,将邮件直接发送到了收件人的邮件server。想要了解代码怎样实现。欢迎查看之前的文章“Python写自己主动化之邮件匿名发送