Как отправить электронное письмо через сервер Exchange домен
Я не могу заставить это работать, независимо от того, какие обходные пути я вставляю в свой код . То, что я пытаюсь сделать, это отправить электронное письмо, используя мой домен Exchange Server и мой обычный доменный адрес электронной почты.
Это мой код. :
<pre> static void Main(string[] args) { try { using (var message = new MailMessage("username.surname@company.co.zw", "recipient.surname@company.co.zw")) { message.Subject = "Message Subject test"; message.Body = "My test email " + DateTime.Now; using (SmtpClient client = new SmtpClient { EnableSsl = true, Host = "+ mailserverIP +", Port = 25, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential("company.corp\username", "password") }) { ServicePointManager .ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; client.Send(message); } } } catch (Exception ex) { ExceptionLogger.SendErrorToText(ex); } }
Я получаю ошибку
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticatedс кодом состояния MustIssueStartTlsFirst .
Когда я пытаюсь проверить сертификат с помощью приведенного ниже фрагмента кода, я также получаю ту же ошибку :
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
Что я уже пробовал:
Я попытался захватить хэш сертификата из веб-приложения Outlook в своем браузере, как показано ниже, но это дает еще одну ошибку
The remote certificate is invalid according to the validation procedure.К сожалению, в трассировке стека нет внутреннего исключения.
static void Main(string[] args) { try { using (var message = new MailMessage("username.surname@company.co.zw", "recipient.surname@company.co.zw")) { message.Subject = "Message Subject test"; message.Body = "My test email " + DateTime.Now; using (SmtpClient client = new SmtpClient { EnableSsl = true, Host = "+ mailserverIP +", Port = 25, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential("company.corp\username", "password") }) { System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate ( object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return true; //Is valid } if (cert.GetCertHashString() == "+ certHash+ ") { return true; } return false; }; client.Send(message); } } } catch (Exception ex) { ExceptionLogger.SendErrorToText(ex); } }
Что я упускаю? Я уже довольно давно борюсь за эту работу, но все равно чувствую, что упускаю что-то очевидное.
Я даже пытался изменить отправителя на адрес электронной почты домена администратора, но все равно получаю те же ошибки.
F-ES Sitecore
Попробуйте развернуть SmtpClient, чтобы установить свойства независимо, убедившись, что вы установили UseDefaultCredentials, прежде чем устанавливать сами учетные данные.
SmtpClient client = new SmtpClient(); client.UseDefaultCredentials = false; client.Credentials = ...
Tshumore
Попробовал использовать этот способ . Я все еще получаю то же самое исключение "удаленный сертификат недействителен в соответствии с процедурой проверки."
MadMyche
Обычно порт 25 не шифруется, обычно защищенный SMTP использует порты 365 или 587
Tshumore
Проблема была с разрешениями. Мой IP - адрес необходимо было добавить на сервер Exchange в качестве отправителя электронной почты