2016-09-28 8 views
12
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-адрес. Я могу отправить IP-адрес и даже telnet на порт 25 и успешно отправить электронное письмо. Но я не могу отправить электронное письмо.

Я побежал wireshark след, и он не похож ни на трафик отправить, 172.22.0.20

+0

надстройку и проверить, работает ли он с истинным или ложным 'smtp.EnableSsl = false' –

+0

также необходимо добавить' NetworkCredential пс = новый NetworkCredential (EmailFrom, tEmailFromPassword); ' –

+0

@RahulHendawe наш внутренний smtp-сервер не требует аутентификации –

ответ

-1

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

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

, это моя ошибка ... код действительно вытаскивает IP из app.config. Я заменил его IP при копировании/вставке в SO. к сожалению, это не проблема. e.Message - «удаленное имя не может быть разрешено» –

+0

@LeeTickett, без проблем! если вы потянете его из web.config, вставьте файл web.config для хоста и порта. Это должно быть что-то, как показано ниже, и ваш способ доставки должен быть smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis: \t <сетевой хост = порт "172.22.0.20" = "25 "defaultCredentials =" true "/>

9

Я использую этот код и его работает отлично на моем конце Убедитесь, что вы используете правильный 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); 
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 Инструменты и это 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 плохо или вы должны иметь проблемы с брандмауэром

4

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

 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

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

+0

Я испытал эту проблему несколько дней назад, используя log4net smtp appender. Некоторые электронные письма работали. Некоторые этого не сделали. Я был полностью взволнован. Но вот, я нашел аналогичную проблему в StackOverflow, которая предоставила решение (как описано выше), и оно отлично работало. Сейчас я общаюсь с вами. –

1

Аналогичный вопрос появился здесь: System.Net.WebException: The remote name could not be resolved:

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

1

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

1

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

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

172.22.0.20 my-smtp.example