分享到:

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

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

方法自然是有的,SMTP服务器是怎么检验的,我们也怎么检验就行了。

查了下资料,大概了解了一下,可以用的命令如下:

(以下以我的和丁小浪的域名为例,我来当发件人,丁小浪来当收件人)

>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,如果不是的话……那就让它去屎吧~

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

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

HELO smtp.ym.163.com
250 Ok

然后表明发件人

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

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

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不存在,那……就退出吧~

QUIT
221 Bye

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

编程时可以使用的类有:

Process 类

https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process(v=vs.110).aspx

ProcessStartInfo 类

https://msdn.microsoft.com/zh-cn/library/system.diagnostics.processstartinfo(v=vs.110).aspx

TcpClient 类

https://msdn.microsoft.com/zh-cn/library/system.net.sockets.tcpclient(v=vs.110).aspx