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);
知道为什么我可能会收到错误
无法解析远程名称。
显然,由于我已经指定了IP地址,因此无需解析。我可以在端口25上ping IP甚至telnet并成功发送电子邮件。但是,我无法发送电子邮件。
我运行了wireshark
跟踪,看起来没有任何流量发送到172.22.0.20
我使用此代码,并在我的最终工作正常确保您使用正确的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工具,它解决了这个问题:
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]", "[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);
如果您的代码在服务应用程序池中运行 - 您需要将Process Model中的Advanced Settings下的Identity设置为“Network Service”,而不是默认的“ApplicationPoolIdentity”。如果你这样做,它每次都会起作用。如果你不这样做,有些电子邮件可以使用,有些则没有。这是一个奇怪的许可事情。
类似的问题突然出现在这里:System.Net.WebException: The remote name could not be resolved:
正如您所看到的,围绕try-catch语句的简单轮询机制可以让您有机会在向用户报告之前多次尝试您的方法块(偶尔会失败)。
我看到的问题是这一行:
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);
}
您的IP地址不正确或者您可能正在防火墙下工作。还要检查DNS设置。
也许反向名称是强制性的,您是否尝试在主机文件中注册此IP的名称? (或者当然在您的DNS中)
尝试添加:
172.22.0.20 my-smtp.example