2012-11-16 114 views
0

我有一段代碼,我試圖發送一封電子郵件。我正在使用另一臺服務器作爲SMPTClient。無法連接到服務器的SMTP端口

MailMessage message = new MailMessage(); 
message.To.Add(toEmailId); 
message.Subject = "test Subject"; 
message.From = new System.Net.Mail.MailAddress("[email protected]"); 
message.Body = "This is a system generated email. Please do not reply"; 
SmtpClient smtp = new SmtpClient("anotherservername"); 
smtp.Send(message); 

調試時,我在最後一行出現錯誤。錯誤是:

An attempt was made to access a socket in a way forbidden by its access permissions SERVER IP :25 

我從網上看到我的防火牆可能阻止我訪問該服務器的端口發現,或者是有任何的設置,我已經錯過了配置。顯然,部署在該服務器上的應用程序能夠發送電子郵件。我仍然在構建一個測試。

+0

你也許需要指定憑據訪問SMTP服務器? – eulerfx

+0

你試圖在SMTP服務器上使用什麼端口?您尚未指定用於「SMTP」的端口。 – LukeHennerley

+0

那麼你的問題是什麼? – CodingGorilla

回答

0

某些服務器通過檢查在連接到SMTP之前是否已連接到POP服務器一段時間來執行身份驗證和授權。您應該先嚐試連接並使用POP進行身份驗證,然後再連接到SMTP。

歷史上,電子郵件客戶端首先檢查,然後發送電子郵件發送&接收例程,所以這被用作窮人授權。 Take a look at wikipedia article about POP before SMTP


導致了這一現象的some people的另一個問題是服務器地址是如何提供給SmtpClient。您應該使用明確提供端口號的構造函數,而不是將其附加到IP /主機名。即

代替new SmtpClient("123.123.123.123:25")

使用new SmtpClient("123.123.123.123", 25)

+0

如果是這樣的話,他將接受一個'SmtpException'該悉認證失敗。我不認爲這是基於他提供的例外信息的情況。 – CodingGorilla

+0

儘管可能,但它完全依賴於服務器實現。我對此沒有太多經驗,但服務器決定不響應請求而不發送關於失敗的身份驗證的通知似乎是合理的。但似乎你的其他事情可能會導致這種情況。我已經更新了我的答案。 –

+0

不,SMTP協議需要特定的響應,SmtpClient類將正確解釋這些響應代碼並引發「SmtpException」應用程序。這當然假設SMTP服務器不是垃圾並遵守協議,現在大多數協議都是現在一天。 – CodingGorilla

相關問題