我编写了一个验证电子邮件的工具,大多是从互联网上的主题上的各种示例中复制而来的(用户Don Worthley在这里汇编了一个不错的代码示例集合https://delicious.com/dworthley/email.validation)。不幸的是,在从电子邮件创建套接字和IPEndPoint以验证主机名IP和端口后,由于超时,我的代码始终无法连接到套接字。
以下是相关代码(由于超时而在s.Connect(endPt)失败):
private bool smtpCheckEmail(string email)
{
try
{
string[] host = (email.Split('@'));
string hostname = host[1];
IPHostEntry IPhst = Dns.GetHostEntry(hostname);
IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
using (Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
{
try
{
s.Connect(endPt);
}
catch
{
s.Close();
return false;
}
根据我的研究,其他人报告了类似代码的成功,因此可能是我的服务器主机的问题。 MVC项目采用GoDaddy VPS,Windows 7和标准防火墙/ MSSE作为保护(我已经测试了两个禁用,具有相同的超时结果)。
我已经验证我可以telnet到我自己的主机并运行各种HELO,Mail等命令,但如果我尝试连接到其他主机的smtp,它也会超时。
也许这是一个ISP问题?
我还尝试过安装EmailVerify for .NET试用版,但遇到同样的问题,即在SMTP检查时或以上的任何验证超时。
很高兴得到一些可能是问题的建议以及如何解决问题。
编辑:在与我的一个Azure VPS进行一些比较测试后,看起来它可能与服务器有关,“telnet 74.125.206.108 smtp”(gmail的smtp主机IP)通过命令行连接Azure盒子但不是在GoDaddy上,我的项目正在进行中。
我还注意到,当我的代码从主机名(Dns.GetHostEntry(hostname))中提取IP时,在这个gmail示例中,它返回216.58.216.37,这与我在cmd for gmail.com中运行nslookup时所获得的匹配但是,我可以telnet到smtp的IP是gmail的74.125.206.108,它与smtp.gmail.com的nslookup记录相匹配。在很多情况下,我的代码可以抓住错误的IP地址吗?
答案 0 :(得分:0)
原来是GoDaddy VPS的限制。将代码传输到Azure托管项目,效果很好。