2016-09-28 172 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