Контекст:
У нас была небольшая компания, в которой не было Exchange Server (или кого-то, кто бы ему выделил), но нам все равно нужно было отправлять/отправлять электронные письма.
Мы решили использовать Microsoft Online Services (MOS)
Цель:
У нас есть веб-сервер (Windows Server 2003 R2 с IIS 6.0) и мы развернули приложение MCV на С# ASP.Net.
Веб-приложение должно отправлять электронные письма каждый раз, когда пользователь создает учетную запись.
Согласно документации нам нужно использовать порт (587) и убедиться, что транспортный уровень безопасности (TLS) включен. Кроме того, используемый адрес FROM должен относиться к типу "Достоверный", как это происходит при двойной проверке через Центр онлайн-администрирования Microsoft
Код:
Код С#, который у меня есть, должен быть тривиальным:
SmtpClient server = new SmtpClient("Smtp.mail.microsoftonline.com");
server.Port = 587;
server.EnableSsl = true;
server.Credentials = new System.Net.NetworkCredential("[email protected]", "123abc");
server.UseDefaultCredentials = false;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "test subject";
mail.Body = "this is my message body";
mail.IsBodyHtml = true;
try
{
server.Send(mail);
}
catch (Exception ex)
{
throw ex;
}
Ошибка:
Я создал простое приложение winform с приведенным выше кодом для проверки отправки электронных писем... Я тестировал приложение winform локально на моем компьютере (Windows XP) и на сервере.
В обеих попытках я получаю следующее сообщение об ошибке:
SMTP-сервер требует безопасного соединения, или клиент не был аутентифицирован. Ответ сервера: 5.7.1 Клиент не прошел проверку подлинности.
После того, как я некоторое время гуглил, я все еще не нашел причину, по которой... Кроме того, большинство ответов, которые я нашел, содержат ссылку на консоль управления Exchange, которую мы, похоже, не имеем (или не установили), поэтому мы используете Microsoft Online Services...
Вопросы:
1) Как платящий клиент MOS, я понимаю, что мне не нужно устанавливать (или иметь) консоль управления Exchange на нашем сервере… на самом деле, это не должно иметь никакого значения для достижения моей задачи.
2) Я также пытался включить TLS в нашем IIS 6.0, но безрезультатно...
3) Мы цепляемся за соломинку, потому что то, что мы делаем, выглядит как-то поразительно тривиально…
4) Должны ли мы просто отказаться от идеи использования SMTP-сервера MOS и использовать другой? Такие как Gmails? Если так... то зачем платить ежемесячную плату за MOS?
Если у кого-нибудь есть помощь или совет, которые могут помочь мне пролить свет на это, это было бы здорово!
С уважением Винс
ВАУ... Я думаю, что мы нашли виновника!!!
Комментируя эту строку кода:
//server.UseDefaultCredentials = false;
Все заработало!
Теперь я могу отправлять электронные письма внутри и за пределами нашего домена...
Больше всего меня озадачивает то, что, согласно документации, значение этого свойства UseDefaultCredentials
по умолчанию установлено в false
.Итак… когда я вручную устанавливаю значение false, оно не работает, но когда я комментирую строку (которая также устанавливает значение false из-за значения по умолчанию), оно работает!
Если это известная проблема или у кого-то есть ответ на этот вопрос, мне было бы интересно узнать!