Конфигурация C # smtp в system.net.mail - PullRequest
1 голос
/ 21 января 2012

У меня есть небольшое приложение WinForms, которое отправляет уведомления по электронной почте.Он отлично работает с клиентами Outlook, но бомбами, если введен адрес gmail / yahoo / windowslive.Я видел много сообщений, использующих system.web.mail и схемы, но Visual Studio 2010 выдает ошибку при попытке использовать это (я полагаю, из-за .Net 2.0).Можно ли настроить код моего клиента SMTP для передачи всем этим провайдерам электронной почты?

Я использую system.net.mail с MailMessage.Мой код конфигурации ниже ...

SmtpClient mailSender = new SmtpClient("smtp.myclient.com");
            mailSender.EnableSsl = true;
            mailSender.Send(message);

Ответы [ 3 ]

3 голосов
/ 21 января 2012

Он отлично работает для клиентов Outlook, потому что рабочая станция (вероятно) вошла в домен Active Directory, и сервер Exchange "доверяет" соединению из-за этого.

Вам необходимо добавить учетные данные пользователя в почтовый сервис, и вам нужно будет получить их от пользователя:

 mailsender.Credentials = new NetworkCredential(username, password);

Кроме того, не забудьте установить свойство порта для SSL. Некоторые провайдеры не используют стандартные.

0 голосов
/ 19 марта 2013

Вы можете получить сообщение об исключении, даже если ваши учетные данные, предоставленные почтовым серверам, будут в порядке сами по себе, но поле «От» не соответствует данному конкретному пользователю.(Это функция, ограничение, налагаемое серверами SMTP для предотвращения подмены отправителя. Сам протокол SMTP настолько либерален, что теоретически вы можете записать любой адрес электронной почты в поле «От». Предотвращение подмены очень важнодля борьбы со спамом в электронной почте.)

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

  1. Если адрес электронной почты "от" не совпадает с адресом электронной почты аутентифицированного пользователя, что он /она имеет право, вы получите SmtpException, говорящий «Почтовый ящик недоступен».и «Клиент не имеет разрешений на отправку в качестве этого отправителя».
  2. Если вы укажете неправильный хост или порт, сообщение SmtpException будет начинаться с «Почтовый ящик недоступен». У него будет внутреннее исключение типаWebException, говорящий «Невозможно подключиться к удаленному серверу», который будет иметь внутреннее исключение самого типа SocketException, говоря: «Невозможно установить соединение, потому что целевая машина активно отказала ему».
  3. Если вы включитеSSL (mailSender.EnableSsl = true; // для вашего кода), но SMTP-сервер не поддерживает его, или наоборот, тогда вы получите SmtpException, говорящее «Сервер не поддерживает безопасные соединения».
  4. Если учетные данные (имя пользователя / пароль) неверны или возникли другие проблемы с SSL, вы получите сообщение SmtpExeption, в котором говорится, что «SMTP-серверу требуется безопасное соединение или клиент не прошел проверку подлинности».1014 * Еще одна вещь, на которую следует обратить внимание, это то, как именно вы создаете объект NetworkCredential.

    Система.Net.Mail очень удобно!

0 голосов
/ 21 января 2012

Если ваше приложение работает с клиентами Outlook, значит, оно правильно отправляет электронную почту. Единственная разница с веб-адресом заключается в том, как отображаются электронные письма, поэтому, возможно, проблема в кодировке. Можете ли вы подробно рассказать, что означает, что приложение бомбы?

...