Socket.Connect 到 SMTP 验证电子邮件总是 returns smtp 连接超时
Socket.Connect to SMTP to verify email always returns with smtp connection timeout
我编写了一个验证电子邮件的工具,主要是从互联网上有关该主题的各种示例中复制的(用户 Don Worthley compiled a decent collection of code samples here 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 和标准 firewall/MSSE 作为保护(我测试过两者都被禁用,超时结果相同)。
我已经验证我可以通过各种 HELO、Mail from 等命令远程登录到我自己的主机和 运行,但是如果我尝试连接到其他主机的 smtp,它也会超时。
可能是 ISP 问题?
我也试过安装 EmailVerify for .NET 试用版,但 运行 遇到同样的问题,即任何达到或高于 SMTP 检查的验证都会超时。
如果能得到一些关于可能是什么问题以及如何解决问题的建议,那就太好了。
编辑:在与我的一个 Azure VPS 进行了一些比较测试后,它看起来很可能与服务器相关,"telnet 74.125.206.108 smtp"(gmail 的 smtp 主机 IP)通过命令行连接在Azure 盒子,但不在我的项目所在的 GoDaddy 上。
我还注意到,当我的代码从主机名 (Dns.GetHostEntry(hostname)) 中提取 IP 时,在这个 gmail 示例中,它 returns 216.58.216.37 与我得到的匹配运行 cmd 中的 nslookup gmail.com,但是我可以通过 telnet 连接到 gmail 的 smtp IP 是 74.125.206.108,它与 smtp.gmail.com 的 nslookup 记录匹配。在很多情况下,我的代码会不会获取了错误的 IP 地址?
原来是 GoDaddy 的限制 VPS。将代码转移到 Azure 托管项目并且效果很好。
我编写了一个验证电子邮件的工具,主要是从互联网上有关该主题的各种示例中复制的(用户 Don Worthley compiled a decent collection of code samples here 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 和标准 firewall/MSSE 作为保护(我测试过两者都被禁用,超时结果相同)。
我已经验证我可以通过各种 HELO、Mail from 等命令远程登录到我自己的主机和 运行,但是如果我尝试连接到其他主机的 smtp,它也会超时。
可能是 ISP 问题?
我也试过安装 EmailVerify for .NET 试用版,但 运行 遇到同样的问题,即任何达到或高于 SMTP 检查的验证都会超时。
如果能得到一些关于可能是什么问题以及如何解决问题的建议,那就太好了。
编辑:在与我的一个 Azure VPS 进行了一些比较测试后,它看起来很可能与服务器相关,"telnet 74.125.206.108 smtp"(gmail 的 smtp 主机 IP)通过命令行连接在Azure 盒子,但不在我的项目所在的 GoDaddy 上。
我还注意到,当我的代码从主机名 (Dns.GetHostEntry(hostname)) 中提取 IP 时,在这个 gmail 示例中,它 returns 216.58.216.37 与我得到的匹配运行 cmd 中的 nslookup gmail.com,但是我可以通过 telnet 连接到 gmail 的 smtp IP 是 74.125.206.108,它与 smtp.gmail.com 的 nslookup 记录匹配。在很多情况下,我的代码会不会获取了错误的 IP 地址?
原来是 GoDaddy 的限制 VPS。将代码转移到 Azure 托管项目并且效果很好。