C # Отправка электронной почты с использованием учетных данных по умолчанию: исключение - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь отправить электронное письмо, используя учетные данные по умолчанию и SMTPClient.

Исключение, которое я получаю:

SMTP-серверу требуется защищенное соединение, или клиент былне аутентифицирован.Ответ сервера: 5.7.1 Клиент не прошел проверку подлинности.

Код, который я пытаюсь использовать:

public void SendEmail(List<string> recipients, string subject, string body)
{
    if (recipients.Count == 0)
        return;

    MailMessage mail = new MailMessage();
    SmtpClient client = new SmtpClient();
    foreach (string to in recipients)
    {
        mail.To.Add(to);                
    }

    mail.From = new MailAddress("email@email.com");
    client.Port = 25;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = true;
    client.Host = "smtprelay.email.com";

    //client.Credentials = new System.Net.NetworkCredential("email@email.com", password);
    ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

    client.EnableSsl = true;
    mail.Subject = subject;
    mail.Body = body;
    mail.IsBodyHtml = true;

    try
    {
        client.Send(mail);
    }
    catch(Exception e)
    {
        Console.Write(e.Message);
    }
    mail.Dispose();
}

Я тестировал с EnableSsl = true и false, ни сработало.Если я установлю для UseDefaultCredentials значение false и передам их через NetworkCredential, то это сработает.

Есть ли какие-то настройки взамен или такие, которые нужно установить?

Редактировать: int ServerCertificateCallback, я получаю: '((System.Net.Mail.SmtpClient) s) .ServicePoint.Address 'выдал исключение типа' System.NotSupportedException '

, а sslPolicyErrors было System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch

Означает ли это, что групповые политики не допускают этого?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете попробовать этот код ниже

public static void logMail(string err)
        {
            SmtpClient smtp = new SmtpClient();
            smtp.Credentials = new System.Net.NetworkCredential("email@email.com", "password");
            smtp.Port = 25;
            smtp.Host = "mail.email.com";

            MailAddress from = new MailAddress("email@email.com", "test");
            MailAddress to = new MailAddress("vb_error@email.com"); 
            MailMessage mail = new MailMessage(from, to);
            mail.IsBodyHtml = true;
            mail.Subject = "Error";
            mail.Body = "<b>Error Message:</b> " + err;
            smtp.Send(mail);
        }
0 голосов
/ 14 ноября 2018

Exchange требуется либо действительная учетная запись домена (login / pw), либо IP-адрес, который ваш почтмейстер настроил как допустимый.

...