2016-09-28 237 views
12
MailMessage message = new MailMessage(); 
message.Subject = "test"; 
message.Body = "test"; 
message.To.Add("[email protected]"); 
message.From = new MailAddress("[email protected]"); 
SmtpClient smtp = new SmtpClient(); 
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtp.UseDefaultCredentials = false; 
smtp.Host = 172.22.0.20; 
smtp.Port = 25; 
smtp.Send(message); 

任何想法發送郵件時,爲什麼我可能會得到一個錯誤使用SMTP與主機的IP地址

遠程名稱無法解析遠程名稱無法得到解決。

顯然不需要解析,因爲我已經指定了一個IP地址。我可以通過端口25 ping IP和甚至telnet併成功發送電子郵件。但是,我無法發送電子郵件。

我跑了wireshark痕跡,它看起來並不像任何流量被髮送到172.22.0.20

+0

添加並檢查是否有真或假的作品'smtp.EnableSsl = FALSE' –

+0

還需要添加'的NetworkCredential NC =新的NetworkCredential(EmailFrom,tEmailFromPassword);' –

+0

@RahulHendawe我們內部的smtp服務器不需要認證 –

回答

-1

我看到的問題是這一行:

smtp.Host = 172.22.0.20; 

smtp.Host預計字符串。所以,它應該是smtp.Host = "172.22.0.20";除此之外,請添加下面的代碼,所以我們可以看到錯誤

try 
{ 
    smtp.Send(mail); 
} 
catch (Exception e) 
{ 
    Debug.WriteLine("Exception Message: " + e.Message); 
} 
+1

上打開該端口,這是我的錯誤......代碼實際上是從app.config中提取IP。當我複製/粘貼到SO時,我用IP替換了它。不幸的是,這不是問題。 e.Message是'遠程名稱無法解析' –

+0

@LeeTickett,沒問題!如果你從web.config中取出它,請粘貼主機和端口的web.config。這應該是這樣的下面和您的遞送方法應該是smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis: \t <網絡主機= 「172.22.0.20」 端口=「25 「defaultCredentials =」true「/>

9

我用這個代碼和它在我結束 工作正常,請確保您使用的是正確的IP地址和端口數。我認爲你的端口號不正確。 (打開你的電子郵件ID,然後檢查郵件配置)

MailMessage mail = new MailMessage("[email protected]", "[email protected]"); 
mail.Subject = "Subject"; 
mail.IsBodyHtml = true; 
mail.Body = "this is email body"; 

SmtpClient client = new SmtpClient("172.22.0.20"); 
client.DeliveryMethod = SmtpDeliveryMethod.Network; 
client.UseDefaultCredentials = false; 
client.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 
client.Port = 25; 

client.Send(mail); 
3

我測試你的代碼:

static void Main(string[] args) 
     { 
      try 
      { 
       MailMessage message = new MailMessage(); 
       message.Subject = "test"; 
       message.Body = "test"; 
       message.To.Add("[email protected]"); 
       message.From = new MailAddress("[email protected]"); 
       SmtpClient smtp = new SmtpClient(); 
       smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
       smtp.UseDefaultCredentials = false; 
       smtp.Host = "127.0.0.1"; 
       smtp.Port = 25; 
       smtp.Send(message); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 
       Console.ReadLine(); 
      } 
     } 

而且似乎不錯。我用smtp4dev工具,它truks這樣的:

220 localhost smtp4dev ready 
EHLO Aepro 
250-Nice to meet you. 
250-8BITMIME 
250-STARTTLS 
250-AUTH=CRAM-MD5 PLAIN LOGIN ANONYMOUS 
250-AUTH CRAM-MD5 PLAIN LOGIN ANONYMOUS 
250 SIZE 
MAIL FROM:<[email protected]> 
250 Okey dokey 
RCPT TO:<[email protected]> 
250 Recipient accepted 
RSET 
250 Rset completed 
RSET 
250 Rset completed 
MAIL FROM:<[email protected]> 
250 Okey dokey 
RCPT TO:<[email protected]> 
250 Recipient accepted 
DATA 
354 End message with period 
MIME-Version: 1.0 

但是當我把一個假的IP地址我有一個例外(女巫是正常的)。

我覺得你的IP是壞的,或者必須有一個防火牆

4

下面的代碼在我結束工作正常,問題.....

 MailMessage mailMessage = new MailMessage("[email protected]", "r[email protected]"); 
     mailMessage.Priority = System.Net.Mail.MailPriority.High; 
     mailMessage.Body = "message"; 
     mailMessage.IsBodyHtml = true; 
     SmtpClient smtpClient = new SmtpClient("host/IP", 25); 
     NetworkCredential credentials = new NetworkCredential("[email protected]", "password"); 
     smtpClient.Credentials = credentials; 
     smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
     smtpClient.Credentials = credentials; 
     smtpClient.Send(mailMessage); 
3

如果你的代碼在運行服務應用程序池 - 您需要將過程模型中的高級設置下的標識設置爲「網絡服務」,而不是默認的「ApplicationPoolIdentity」。如果你這樣做,它會每次都有效。如果你不這樣做,有些電子郵件會有效,有些則不會。這是一個奇怪的許可事情。

+0

我前幾天使用log4net smtp appender遇到過這個問題。一些電子郵件工作。有些沒有。我完全嚇壞了。但是,瞧瞧,我在StackOverflow上發現了一個類似的問題,它提供瞭解決方案(如上所述),並且工作完美。我現在與你分享。 –

1

您的IP地址不正確,或者您可能正在防火牆下工作。同時檢查你的DNS設置。

1

也許反向名稱是強制性的,您是否嘗試在主機文件中註冊此IP的名稱?(或者在你的課程DNS)

嘗試添加:

172.22.0.20 my-smtp.example