MailMessage message = new MailMessage(); message.Subject = "test"; message.Body = "test"; message.To.Add("test@gmail.com"); message.From = new MailAddress("bob@internalhost.com"); SmtpClient smtp = new SmtpClient(); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.UseDefaultCredentials = false; smtp.Host = 172.22.0.20; smtp.Port = 25; smtp.Send(message);
任何想法,为什么我可能会得到一个错误
远程名称无法parsing。
由于我已经指定了一个IP地址,所以显然不需要parsing。 我可以ping通IP,甚至在端口25上telnet,并成功发送电子邮件。 但是,我不能发送电子邮件。
我跑了一个wireshark
跟踪,它看起来没有任何stream量正在发送到172.22.0.20
我使用这个代码,并在我的最后工作正常确保您使用正确的IP地址和端口号。 我认为你的端口号是不正确的。 (打开您的电子邮件ID并检查邮件配置)
MailMessage mail = new MailMessage("bob@internalhost.com", "Toemai@email.com"); 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("bob@internalhost.com", "password"); client.Port = 25; client.Send(mail);
下面的代码工作正常,在我的结束…..
MailMessage mailMessage = new MailMessage("abc@xyz.in", "receiver@xyz.in"); mailMessage.Priority = System.Net.Mail.MailPriority.High; mailMessage.Body = "message"; mailMessage.IsBodyHtml = true; SmtpClient smtpClient = new SmtpClient("host/IP", 25); NetworkCredential credentials = new NetworkCredential("abc@xyz.in", "password"); smtpClient.Credentials = credentials; smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; smtpClient.Credentials = credentials; smtpClient.Send(mailMessage);
我测试了你的代码:
static void Main(string[] args) { try { MailMessage message = new MailMessage(); message.Subject = "test"; message.Body = "test"; message.To.Add("atmane.elbouachri@gmail.com"); message.From = new MailAddress("atmane.elbouachri@softeam.fr"); 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:<atmane.elbouachri@softeam.fr> 250 Okey dokey RCPT TO:<atmane.elbouachri@gmail.com> 250 Recipient accepted RSET 250 Rset completed RSET 250 Rset completed MAIL FROM:<atmane.elbouachri@softeam.fr> 250 Okey dokey RCPT TO:<atmane.elbouachri@gmail.com> 250 Recipient accepted DATA 354 End message with period MIME-Version: 1.0
但是当我把一个假的IP我有一个例外(女巫是正常的)。
我认为你的IP是不好的,或者你必须有一个防火墙的问题
如果您的代码正在服务应用程序池中运行,则需要将Process Model中的Advanced Settings下的Identity设置为“Network Service”,而不是默认的“ApplicationPoolIdentity”。 如果你这样做,它会每次都有效。 如果你不这样做,一些电子邮件工作,有些则不。 这是一个奇怪的许可的事情。
在这里弹出一个类似的问题: System.Net.WebException:远程名称无法解析:
正如你所看到的,围绕try-catch语句的一个简单的轮询机制可以让你有机会多次尝试你的方法块(偶尔会失败),然后再报告给用户。
您的IP地址不正确,或者您可能正在防火墙下工作。 同时检查你的DNS设置。
也许反向名称是强制性的,你有没有试图在主机文件中注册这个IP的名字? (或者在你的DNS当然)
尝试添加:
172.22.0.20 my-smtp.example
我看到的问题是这一行:
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); }