邮箱地址的有效性检查方法

kevin.Zhu 发布于:2013-12-5 15:43 分类:邮件  有 20 人浏览,获得评论 0 条  


免费检查的网址: http://verify-email.org/


有一个项目,其中有一个要求是要检测用户填写的邮箱是否存在,在网上搜索了一下,总结发送原理如下。


具体的原理是向要检测的邮箱发送smtp协议的指令,通过获取响应的指令来判断邮箱是否存在

具体流程:
1.要检测的邮箱域名是否存在,是否是邮箱服务器。
2.连接SMTP服务器
3.通过SMTP协议也服务器进行交互,使用helo,mail from,rcpt to这几个,这时候就要根据服务器的返回值来进行判断了。现在有些服务器还需要SMTP认证,所以还要发送AUTH LOGIN来验证用户。
        在发送AUTH LOGIN命令后,服务器会返回以base64编码的信息提示输入用户名,在输入用户名之后,服务器会要求输入密码,也是要base64编码的形式。在C#中可以用Convert.ToBase64String()来转换为base64编码。

使用SMTP命令发送邮件


电子邮件是Internet上最广泛的应用之一,尽管网络上有多种邮件收发服务,但最常用的还是SMTPSMTP就是简单邮件传输协议(Simple Mail Transfer Protocol)。传统的SMTP使用简单的协议传输7ASCII文本字符,它还有一种扩展形式,称为ESMTP,允许扩展协商,它包括8位的传输。这样,它不仅能够传输二进制的数据,还可以传输非ASCII字符集。一会儿,我们将用SMTP命令模拟发送邮件,但现在让我们先去了解一下SMTP协议的参数吧!
参数
作用
HELO
使用标准的SMTP,向服务器标识用户身份。发送者能进行欺骗,但一般情况下服务器都能检测到
EHLO
使用ESMTP,向服务器标识用户身份。发送者能进行欺骗,但一般情况下服务器都能检测到。
STARTTLS
启用TLS
MAIL FROM
命令中指定的地址是发件人地址
RCPT TO
标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面
DATA
在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以CRLF.CRLF 结束
VRFY
用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN
验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP
查询服务器支持什么命令
NOOP
无操作,服务器响应 250 OK
RSET
重置会话,当前传输被取消,服务器响应 250 OK
QUIT
结束会话
以上参数为常用参数,明白它们的作用,现在我们来做一个实例吧!让我们利用SMTP命令,先向邮件服务器发送一封电子邮件。Internet上有些邮件服务器都支持这种方法去模拟身份发邮件呀,大家可以试一试。
 
1.首先我们TELNET上邮件服务器
2.然后输入以下命令