使用SMTP与主机的IP地址
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
我看到的问题是这一行:
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);
}
上打开该端口,这是我的错误......代码实际上是从app.config中提取IP。当我复制/粘贴到SO时,我用IP替换了它。不幸的是,这不是问题。 e.Message是'远程名称无法解析' –
@LeeTickett,没问题!如果你从web.config中取出它,请粘贴主机和端口的web.config。这应该是这样的下面和您的递送方法应该是smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis: \t
我用这个代码和它在我结束 工作正常,请确保您使用的是正确的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);
我测试你的代码:
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是坏的,或者必须有一个防火墙
下面的代码在我结束工作正常,问题.....
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);
如果你的代码在运行服务应用程序池 - 您需要将过程模型中的高级设置下的标识设置为“网络服务”,而不是默认的“ApplicationPoolIdentity”。如果你这样做,它会每次都有效。如果你不这样做,有些电子邮件会有效,有些则不会。这是一个奇怪的许可事情。
我前几天使用log4net smtp appender遇到过这个问题。一些电子邮件工作。有些没有。我完全吓坏了。但是,瞧瞧,我在*上发现了一个类似的问题,它提供了解决方案(如上所述),并且工作完美。我现在与你分享。 –
类似的问题突然出现在这里:System.Net.WebException: The remote name could not be resolved:
正如你可以看到,围绕一个try-catch语句包裹一个简单的投票机制,可以让你有机会尝试你的方法多次的块(其中偶尔失败)然后将其报告给用户。
您的IP地址不正确,或者您可能正在防火墙下工作。同时检查你的DNS设置。
也许反向名称是强制性的,您是否尝试在主机文件中注册此IP的名称?(或者在你的课程DNS)
尝试添加:
172.22.0.20 my-smtp.example
添加并检查是否有真或假的作品'smtp.EnableSsl = FALSE' –
还需要添加'的NetworkCredential NC =新的NetworkCredential(EmailFrom,tEmailFromPassword);' –
@RahulHendawe我们内部的smtp服务器不需要认证 –