Удаленное имя не может быть разрешено при отправке почты с использованием SMTP с Host в качестве 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);

Любая идея, почему я могу получить сообщение об ошибке

Удаленное имя не может быть разрешено.

Очевидно, что разрешение не требуется, поскольку я указал IP-адрес. Я могу отправить IP-адрес и даже telnet на порт 25 и успешно отправить электронное письмо. Но я не могу отправить электронное письмо.

Я запустил трассировку wireshark, и она не похожа на трафик, отправляемый на 172.22.0.20

Ответ 1

Я использую этот код и его работоспособность на моем конце Убедитесь, что вы используете правильный IP-адрес и номер порта. Я думаю, что ваш номер порта неверен. (откройте свой идентификатор электронной почты и проверьте конфигурацию почты)

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

Ответ 2

Ниже код работает отлично на моем конце.....

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

Ответ 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 Tools, и он перехватывает это:

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

Если ваш код запущен в пуле приложений-служб, вам необходимо установить Identity в разделе "Дополнительные параметры" в "Модель процесса" как "Сетевая служба", а не по умолчанию "ApplicationPoolIdentity". Если вы это сделаете, это будет работать каждый раз. Если вы этого не сделаете, некоторые электронные письма работают, а некоторые - нет. Это странное дело.

Ответ 5

Аналогичная проблема возникла здесь: System.Net.WebException: удаленное имя не удалось устранить:

Как вы можете видеть, простой механизм опроса, обернутый вокруг оператора try-catch, дает вам возможность попробовать ваш блок метода несколько раз (что происходит неудачно), прежде чем сообщать об этом пользователю.

Ответ 6

Ваш IP-адрес неверен или вы можете работать под брандмауэром. Также проверьте настройки DNS.

Ответ 7

Возможно, обратное имя является обязательным, пытались ли вы зарегистрировать имя для этого IP-адреса в файле хоста? (Или в вашем DNS, конечно)

Попробуйте добавить:

172.22.0.20 my-smtp.example

Ответ 8

Проблема, которую я вижу, следующая строка:

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