Недавно столкнулся с одной интересной ошибкой, которая может возникнуть при использовании класса System.Mail.SntpMail.
Имеем вот такой код:
MailMessage mail = new MailMessage(); //........ SmtpClient client = new SmtpClient("mail.yourhost.com", 25); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Credentials = new System.Net.NetworkCredential("username", "password"); client.UseDefaultCredentials = false; client.Send(mail);
В результате выполнения этого кода вы, скорее всего получите ошибку:
Почтовый ящик недоступен. Отклик сервера: 5.7.1 Unable to relay
а все потому, что при установке client.UseDefaultCredentials = false, client.Credentials становится равен null. Что самое интересное, о такой особенности этого свойства на MSDN нет ни слова.
Ну да ладно, дальше - интереснее, если закомментировать строку с UseDefaultCredentials, то, если ваш сервер настроен на проверку подлинности клиента перед отправкой почты (стандартное поведение для Microsoft Exchange), то вы получите другую ошибку, которая, кстати, не чуть не более очевидна:
Почтовый ящик недоступен. Отклик сервера: 5.7.1 Client does not have permissions to send as this sender
И итоге, чтобы все работало как нужно нужно просто поменять местами строки с UseDefaultCredentials и с client.Credentials. И все. Вот правильная версия кода:
MailMessage mail = new MailMessage(); //........ SmtpClient client = new SmtpClient("mail.yourhost.com", 25); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("username", "password"); client.Send(mail);
Комментариев нет:
Отправить комментарий