很多系统的设计是由用户通过邮箱进行账户注册,且在注册时对邮箱格式进行了必要的判断,以避免无效邮箱的注册,除非是需要接收邮箱验证码,否则随意填写个正确格式的邮箱这种事,就像学生欺骗老师作业做完了一样常见。特别是问卷调查中需要参与者填写自己邮箱时,避免垃圾邮件骚扰用个假邮箱。
在另外一些时候,当需要批量群发邮件时,除了基于邮箱格式的过滤,也需要过滤不存在的邮箱地址。
还有一些特殊的时候,针对某一个域名或系统,需要尝试探测下该域名下有哪些邮箱,从而获得必要的邮箱列表。
以上这些情况下,都不太适合通过直接向邮箱中投递邮件的方式来判断,所以本人做了这么个小工具,在不投递邮件的情况下检测邮箱地址是否真实。该程序是基于validate_email的python模块的优化、修改。
邮箱存在返回True,不存在则返回False。
功能就是这么的单调,原理却也没那么华丽,甚至可以手动完成检测操作。总共四步:
1、通过nslookup获取邮箱地址中主域名的MX记录;
2、用SMTP扩展协议的ehlo与MX服务器建立亲切而不失友好的连接;
3、使用mail FROM:向MX服务器指定发件人的身份是空;
4、通过rcpt TO:命令查看服务器的返回结果,如果邮箱地址存在,则返回代码是250,如果不存在,则通常情况下返回550,也有个别邮件服务商返回554。
同一个邮件服务商的MX记录有多个,部分邮件服务商的MX服务器会出现对同一个邮箱地址返回结果不同的情况,实际上,倘若其中一个MX服务器返回邮箱不存在,则该邮箱不存在。这是唯一一个需要说明的点。
Just Do IT