2009-08-06 38 views
0

我在下面的代碼(我堅持在xxx不發佈真實姓名)。此代碼工作正常,當我上傳到服務器,並會發送完美的電子郵件。發送郵件在服務器上工作,但不在我的本地計算機上

 MailMessage msg = new MailMessage(); 
     msg.From = new MailAddress(fromEmailAddress_); 
     msg.To.Add(new MailAddress(toEmailAddress_)); 

     msg.Subject = subject_; 
     msg.Body = body_; 
     msg.IsBodyHtml = true; 
     msg.Priority = MailPriority.High; 

     NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("[email protected]", "password"); 
     try 
     { 
      SmtpClient c = new SmtpClient("mail.xxx.org"); 
      c.UseDefaultCredentials = false; 
      c.Credentials = basicAuthenticationInfo; 
      c.Send(msg); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
      Console.Write(ex.Message.ToString()); 
     } 

但是當我我在Visual Studio本地機器上測試,我得到一個錯誤:

[SocketException(0x274d):無連接可以作出,因爲目標機器積極地拒絕它 66.226。 21.251:25] System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)+239 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)+35 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure ,插座s4,插座s6,插座&插座,IP地址&個地址,ConnectSocketState狀態,IAsyncResult的asyncResult,的Int32超時,異常&除外)224

[引發WebException:無法連接到遠程服務器] System.Net.ServicePoint.GetConnection(PooledStream PooledStream,對象所有者,布爾異步,ip地址&地址,插座& abortSocket,插座& abortSocket6,的Int32超時)5420699 System.Net.PooledStream.Activate(對象owningObject,布爾異步,的Int32超時,GeneralAsyncDelegate的AsyncCallback)202 System.Net.PooledStream。激活(Object owningObject,GeneralAsyncDelegate asyncCallback)+21 System.Net.ConnectionPool.GetConnection(Object owningObject,GeneralAsyncDelegate asyncCallback,Int32 creationTimeout)+332 System.Net.Mail.SmtpConnection.GetConnection(String host,Int32 port)+160 System.Net.Mail.SmtpTransport.GetConnection(字符串主機的Int32端口)+159

爲什麼這是行不通的

回答

2

我要做的第一件事就是看看目標機器是否像錯誤信息所說的那樣實際上拒絕了連接。我可以從這裏連接到該IP地址的端口25,因此您的錯誤信息可能是誤導性的。這是一個失敗的所有可能原因進行連接:

  • 有一些問題,在您的代碼
  • 有一個在圖書館借了一些問題,你用
  • 你有一個本地防火牆阻止出站郵件從陌生程序
  • 您的ISP不允許除了自己的服務器
  • 一些中間網絡阻止事情
  • 郵件服務器的ISP阻止了來自喲SMTP連接出站SMTP連接烏爾網絡
  • 郵件服務器還真是拒絕你,也許是因爲你在一個塊列表

爲了獲得更多的細節,請下載並安裝Wireshark。它就像一個網絡調試器。在您的系統和目標網絡之間開始捕獲,然後運行您的代碼。解釋捕獲的數據包需要一定的經驗,所以如果您遇到困難,可隨時在此發佈更多數據。

0

提供者可能已經關閉防火牆他們的郵件服務器,使其只接受來自他們的託管環境郵件的任何建議。

將其更改爲在本地測試時使用本地郵件服務器。

+0

確實windows xp帶有某種類型的郵件服務器,我可以在本地進行測試嗎? – leora 2009-08-06 05:59:59

+0

只需使用您的ISP服務器,即在您的郵件客戶端中配置的服務器。 – caf 2009-08-06 09:35:23

1

中繼限制很可能會阻止您從允許的一組IP外部發送郵件。如果在Web /應用程序服務器上配置了SMTP服務器,則可能設置爲僅允許通過127.0.0.1發送郵件。

您可以通過IIS管理器配置本地SMTP服務器。如果沿着這條路徑走,請確保本地機器上的端口25已打開。通常情況下,防病毒類型的軟件會阻止/監控此端口,並且會通過電子郵件傳送進行分類。

0

看看您的防病毒是否瘋了,我已經看到這個問題幾次與運行邁克菲的人。

希望這會有所幫助。

1

我認爲你沒有在你的代碼中使用端口號。使用這些行,然後郵件應該在本地進行。

smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 
    smtp.Timeout = 60000; 
    smtp.Port = 25; 

這是在我的系統上工作。我希望它也能在你的本地系統上運行。

相關問題