Невозможно отправить электронную почту в другие домены с помощью System.Net.Mail.SmtpClient

Посмотрите на следующий код:

client.Credentials = new NetworkCredential(SMTP_SERVER_USERNAME, SMTP_SERVER_PASSWORD);
client.EnableSsl = false;
client.Host = SMTP_SERVER_HOSTNAME;
client.Port = 587;
client.UseDefaultCredentials = false;
client.Timeout = 4000;

MailMessage message = new MailMessage();
message.Body = "Test";
message.From = new MailAddress(MY_OWN_ADDRESS);
message.ReplyToList.Add(message.From);
message.Sender = message.From;
message.Subject = SUBJECT_LINE;
message.To.Add(RECIPIENT_ADDRESS);

В настоящее время я не могу использовать его для отправки электронной почты. Код находится в приложении ASP.NET MVC 3, использующем старый механизм ASPX. Он работает на сервере IIS7 с ASP.NET 4.0 в режиме интегрированного конвейера.

Когда этот код запускается, происходит одно из двух:

  • Если RECIPIENT_ADDRESS равен MY_OWN_ADDRESS или другому адресу электронной почты в моем домене, электронная почта отправляется, и все в порядке.
  • Однако, если RECIPIENT_ADDRESS является любым адресом электронной почты, рабочим или нет, на другом сервере, таком как gmail, во время SmtpClient.Send возникает исключение:

Почтовый ящик недоступен. Ответ сервера: для ретрансляции требуется аутентификация

Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Net.Mail.SmtpFailedRecipientException: почтовый ящик недоступен. Ответ сервера был: Аутентификация требуется для ретрансляции.


person Jesse Hallam    schedule 12.07.2011    source источник
comment
Почему message.From и message.Sender разные?   -  person Joe    schedule 12.07.2011
comment
Каково значение SMTP_SERVER_HOSTNAME и где в вашей сети расположен этот сервер?   -  person Jordan    schedule 12.07.2011
comment
@ Джо, если я не ошибаюсь, это не так. message.From, message.Sender и message.ReplyTo должны иметь одинаковое значение.   -  person Jesse Hallam    schedule 12.07.2011
comment
@Jordan, значение — mail.mydomainname.com, и это поставщик виртуального хостинга, у которого я покупаю услуги.   -  person Jesse Hallam    schedule 12.07.2011
comment
@Kivin, Вау, уже поздно, извини! Еще один вопрос: является ли RECIPIENT_ADDRESS объектом MailAddress?   -  person Joe    schedule 12.07.2011
comment
@Джо, нет, это не так. Это строка, содержащая адрес электронной почты.   -  person Jesse Hallam    schedule 12.07.2011
comment
@Joe, ожидая ответа, я завернул RECIPIENT_ADDRESS в объект MailAddress. Как ни странно, теперь проблема решена. Хотел бы я знать, почему. В любом случае, если вы хотите записать это как фактический ответ, я буду рад отметить его принятым, чтобы вы могли получить кредит, а другие могли его использовать.   -  person Jesse Hallam    schedule 12.07.2011
comment
@Kivin, спасибо, я добавил свой ответ. Я не пытался сделать так, чтобы это звучало так, как будто я знаю, о чем говорю, но я хочу, чтобы, если кто-то ищет этот вопрос, он мог найти четкое решение. Я рад, что мы нашли решение!   -  person Joe    schedule 12.07.2011


Ответы (1)


Я заметил, что ваш message.To.Add(RECIPIENT_ADDRESS) мог быть строкой. У меня были проблемы с этим в прошлом. Оберните его в объект MailAddress, и он должен работать.

person Joe    schedule 12.07.2011