Проблема отправки электронной почты с использованием C # - PullRequest
0 голосов
/ 29 апреля 2009

Когда я пытаюсь отправить электронное письмо с использованием C # на SMTP-сервер Gmail, я получаю эту ошибку ..

«Удаленный сертификат недействителен в соответствии с процедурой проверки».

SSL включен

Используется порт 587

используется имя сервера "Smtp.gmail.com".

имя пользователя и пароль верны

Outlook Express отлично работает на том же компьютере с теми же настройками

Программа c # также отлично работает в других местах ... мы получаем эту ошибку только в клиентском месте.

Буду признателен за любую помощь ..

Спасибо

Редактировать: @ Andomar, где я могу найти корневые сертификаты в клиенте? Как мне это исправить?

@ Alnitak, как мне запустить starttls с помощью библиотеки System.Net.Mail?

@ David, Что передать в качестве параметра для "(отправитель объекта, сертификат сертификата X509, цепочка X509, SslPolicyErrors sslPolicyErrors)"

Спасибо, Дэвид. Я добавил эти строки. Но я все еще не понимаю, что происходит, поскольку этот код не имеет прямого отношения к System.Net.Mail, насколько я понимаю. Надеюсь, проблема исчезнет.

Ответы [ 4 ]

2 голосов
/ 29 апреля 2009

Также убедитесь, что корневые сертификаты находятся в хранилище доверенных корневых центров клиента. Если это из службы, то добавление корневых сертификатов в хранилище локального компьютера также может помочь. Чтобы лучше понять причину, я нашел следующую политику полезной ...

public bool ValidateServerCertificate( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// No errors so continue…
if (sslPolicyErrors == SslPolicyErrors.None)
       return true;

// I’m just logging it to a label on the page, 
//  this should be stored or logged to the event log at this time. 
lblStuff.Text += string.Format("Certificate error: {0} <BR/>", sslPolicyErrors);

// If the error is a Certificate Chain error then the problem is
// with the certificate chain so we need to investigate the chain 
// status for further info.  Further debug capturing could be done if
// required using the other attributes of the chain.
      if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors)
      {
       foreach (X509ChainStatus status in chain.ChainStatus)
       {
             lblStuff.Text += string.Format("Chain error: {0}: {1} <BR/>", status.Status, status.StatusInformation);
  }
}

// Do not allow this client to communicate 
//with unauthenticated servers.
      return false;
}

Чтобы добавить политику, используйте следующее, это нужно сделать только один раз для домена приложения.

using System.Net;
...
ServicePointManager.ServerCertificateValidationCallback =
new Security.RemoteCertificateValidationCallback(ValidateServerCertificate);

Вы также можете использовать политику для полного устранения ошибки, но было бы лучше решить проблему, чем делать это.

1 голос
/ 29 апреля 2009

Используете ли вы STARTTLS или предполагаете, что соединение через порт 587 с самого начала шифруется по протоколу SSL?

Серверы Google на smtp.gmail.com требуют STARTTLS.

1 голос
/ 29 апреля 2009

Проверьте правильность корневых сертификатов в хранилище клиента. И системная дата клиента верна.

0 голосов
/ 06 августа 2013

Вы установили

 client.EnableSsl = true;

потому что это нужно gmail

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...