首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Socket.Connect到SMTP以验证电子邮件总是与smtp连接超时一起返回

问Socket.Connect到SMTP以验证电子邮件总是与smtp连接超时一起返回
EN

Stack Overflow用户
提问于 2015-05-27 00:21:47
回答 1查看 183关注 0票数 0

我编写了一个工具来验证电子邮件,其中大部分是从互联网上有关这个主题的各种例子中复制出来的(用户沃斯利在这里编译了一组不错的代码示例,https://delicious.com/dworthley/email.validation)。不幸的是,在从电子邮件中创建套接字和IPEndPoint以验证主机名IP和端口之后,由于超时,我的代码总是无法连接到套接字。

下面是相关代码(由于超时而在s.Connect(endPt)失败):

代码语言:javascript
复制
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地址?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-28 00:30:33

被证明是GoDaddy VPS的一个限制。将代码转移到Azure托管的项目中,效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30471162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档