2015-05-27 66 views
0

我已經寫了一個驗證電子郵件的工具,主要是從互聯網上的主題上的各種示例複製(用戶Don Worthley在這裏編譯了一個體面的代碼示例集合https://delicious.com/dworthley/email.validation)。不幸的是,在從電子郵件創建套接字和IPEndPoint以驗證主機名IP和端口後,由於超時,我的代碼始終無法連接到套接字。Socket.Connect to SMTP驗證電子郵件總是返回與SMTP連接超時

下面是相關的代碼(在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項目位於帶有Windows 7和標準防火牆/ MSSE作爲保護的GoDaddy VPS上(我測試過兩個禁用且具有相同的超時結果)。

我已驗證我可以telnet到我自己的主機,並通過各種HELO,Mail等命令運行,但如果我嘗試連接到其他主機的smtp,它也會超時。

也許這是一個ISP問題?

我也試過安裝EmailVerify for .NET試用版,但遇到同樣的問題,其中任何驗證在SMTP檢查超時或以上。

對於可能出現的問題以及如何對其進行故障排除有一些建議。

編輯:在使用我的一個Azure VPS進行一些比較測試後,它看起來好像與服務器相關,通過命令行連接到Azure盒子上的「telnet 74.125.206.108 smtp」(gmail的smtp主機IP)不在我的項目上的GoDaddy上。

我還注意到,當我的代碼從主機名(Dns.GetHostEntry(hostname))中提取IP時,在這個gmail例子中,它返回216.58.216.37,它與我在cmd中爲gmail運行nslookup時得到的匹配。 com,但是我可以telnet到gmail的smtp IP是74.125.206.108,它與smtp.gmail.com的nslookup記錄匹配。在我的許多情況下,我的代碼能夠抓取錯誤的IP地址嗎?

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

好的,謝謝你爲我修復它 –

回答

0

原來是GoDaddy VPS的限制。將代碼轉移到Azure託管項目,效果很好。