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