通过命令查询一个邮箱地址是否存在

最近在做 ASP.NET / VB.NET 中邮件发送的功能。

我们虽然通常把检验邮箱地址是否存在的问题交给 SMTP 服务器来做,但是这个项目组长希望我能做出来在发邮件之前便判断出来邮箱地址是否存在的功能。
方法自然是有的,SMTP 服务器是怎么检验的,我们也怎么检验就行了。

查了下资料,大概了解了一下,可以用的命令如下:
(以下以我的和丁小浪的域名为例,我来当发件人,丁小浪来当收件人)

1
2
3
4
5
6
7
8
9
10
> nslookup -type=MX mtiner.com
mtiner.com MX preference = 5, mail exchanger = mxn.mxhichina.com
mtiner.com nameserver = dns9.hichina.com
mtiner.com nameserver = dns10.hichina.com
dns9.hichina.com internet address = 42.120.221.13
dns9.hichina.com internet address = 140.205.81.13
dns9.hichina.com internet address = 140.205.228.13
dns10.hichina.com internet address = 42.120.221.23
dns10.hichina.com internet address = 140.205.81.23
dns10.hichina.com internet address = 140.205.228.23

这样,我就可以知道丁小浪的邮箱服务器是

mxn.mxhichina.com

然后,我们来连接到这台服务器上。一般的邮箱服务器收信端口都是 25,如果不是的话……那就让它去屎吧~

1
2
> telnet mxn.mxhichina.com 25
220 mx1.aliyun-inc.com MX AliMail Server(10.147.11.245)

获得了正常的响应之后,我们首先表明身份

1
2
HELO smtp.ym.163.com
250 Ok

然后表明发件人

1
2
MAIL FROM:<admin@gaohaobo.com >
250 Mail Ok

最后来查询相应的邮箱地址是否存在

1
2
RCPT TO:<sb@mtiner.com >
554 delivery error: dd This user doesn't have a mtiner.com e-mailaccount (sb@mtiner.com) [0] - mx1.aliyun-inc.com

嗯,原来 sb@mtiner.com 不存在,那……就退出吧~

1
2
QUIT
221 Bye

这样就完成了一个完整的操作。最后只需把所写的这些命令 Object 化即可。