使用SMTP作为IP地址发送邮件时,无法解析远程名称

问题描述 投票:11回答:8
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

c# .net windows smtpclient
8个回答
8
投票

我使用此代码,并在我的最终工作正常确保您使用正确的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工具,它解决了这个问题:

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很糟糕,或者您必须遇到防火墙问题


3
投票

下面的代码在我的最后工作正常.....

        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);

2
投票

如果您的代码在服务应用程序池中运行 - 您需要将Process Model中的Advanced Settings下的Identity设置为“Network Service”,而不是默认的“ApplicationPoolIdentity”。如果你这样做,它每次都会起作用。如果你不这样做,有些电子邮件可以使用,有些则没有。这是一个奇怪的许可事情。


1
投票

类似的问题突然出现在这里:System.Net.WebException: The remote name could not be resolved:

正如您所看到的,围绕try-catch语句的简单轮询机制​​可以让您有机会在向用户报告之前多次尝试您的方法块(偶尔会失败)。


0
投票

我看到的问题是这一行:

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);
}

0
投票

您的IP地址不正确或者您可能正在防火墙下工作。还要检查DNS设置。


0
投票

也许反向名称是强制性的,您是否尝试在主机文件中注册此IP的名称? (或者当然在您的DNS中)

尝试添加:

172.22.0.20 my-smtp.example
© www.soinside.com 2019 - 2024. All rights reserved.