Tshumore Ответов: 0

Как отправить электронное письмо через сервер 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 в качестве отправителя электронной почты

0 Ответов