我编写了一个工具来验证电子邮件,其中大部分是从互联网上有关这个主题的各种例子中复制出来的(用户沃斯利在这里编译了一组不错的代码示例,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项目是在Windows7和标准防火墙/MSSE作为保护的GoDaddy VPS上进行的(我已经测试过这两个版本都禁用了相同的超时结果)。
我已经验证了我可以打电话到我自己的主机,并运行各种HELO,邮件从etc命令,但如果我试图连接到smtp的其他主机也超时。
也许是ISP的问题?
我还尝试过安装EmailVerify for .NET试用版,但遇到了相同的问题,即在SMTP上或以上的任何验证都会超时。
如果能得到一些关于什么可能是问题以及如何解决问题的建议,那就太好了。
编辑:在与我的Azure VPS之一做了一些比较测试之后,看起来它可能与服务器相关,"telnet 74.125.206.108 smtp“(gmail的smtp主机IP)通过命令行连接到Azure框上,而不是在我的项目所在的GoDaddy one上。
我还注意到,当我的代码从主机名(Dns.GetHostEntry(主机名))中提取IP时,在这个gmail示例中,它返回216.58.216.37,这与gmail.com在cmd中运行nslookup时得到的结果相匹配,但是,对于gmail.com,我可以告诉它的IP为74.125.206.108,它与smtp.gmail.com的nslookup记录匹配。在很多情况下,我的代码会不会获取错误的IP地址?
发布于 2015-07-28 00:30:33
被证明是GoDaddy VPS的一个限制。将代码转移到Azure托管的项目中,效果很好。
https://stackoverflow.com/questions/30471162
复制相似问题