ошибка аутентификации или дешифрования при отправке почты в GMail с использованием SSL - PullRequest
11 голосов
/ 10 ноября 2010

Я имею в виду это руководство по C # SMTP mail .

Вот мой код:

MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("dave.stockinger@gmail.com");
mail.To.Add("dave.stockinger@gmail.com");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail from GMAIL";
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("MyUserNameInGmail", "MyGmailPassWord");
SmtpServer.EnableSsl = true;

SmtpServer.Send(mail);

К сожалению, есть исключения в отношении SSL и Iне могу это исправить:

Необработанное исключение: System.Net.Mail.SmtpException: Сообщение не может быть отправлено.---> System.IO.IOException: проверка подлинности или расшифровка не удалась.---> System.X509 Цепная цепь, SslPolicyErrors sslPolicyErrors) [0x00000] в: 0 в System.Net.Security.SslStream + c__AnonStorey7. <> M__A (System.Security.Cryptography.X509Certificates.X509Certificate [0]: certatet) сертификат0
в Mono.Security.Protocol.Tls.SslClientStream.OnRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Сертификат, ошибки System.Int32 []) [0x00000] в: 0
в Mono.Tls.SslStreamBase.RaiseRemoteCertificateValidation (System.Security.Cryptography.X509Certificates.X509Certificate Certificate, ошибки System.Int32 []) [0x00000] в: 0
в Mono.Security.Protocol.Tls.SerSerSliRficateValidation (System.Security.Cryptography.X509Certificates.X509Сертификат сертификата, System.Int32 [] certificateErrors) [0x00000] в: 0 в Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.securityCatetificateCatesсертификаты) [0x00000] в: 0 в Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] в: 0
в Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in: 0
at (удаленное взаимодействие-вызов-проверка-оболочки) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage: Process () в Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in: 0 в Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in: 0 --- Конец внутренней трассировки стека исключений ---в Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] в: 0 --- Конец трассировки стека внутренних исключений --- в System.Net.Mail.SmtpClient.Send (сообщение System.Net.Mail.MailMessage) [0x00000] в: 0
вcsharpdungeon.MainClass.Main () [0x00000] в: 0

Ответы [ 7 ]

23 голосов
/ 12 ноября 2010

Проверьте, будет ли работать код ниже; Я проверил его на своей учетной записи Gmail, и, похоже, он отлично работает с моим Mono 2.0, работающим на Ubuntu 10.04LTS

using System;
using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

namespace mono_gmail
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            MailMessage mail = new MailMessage();

            mail.From = new MailAddress("my.name@gmail.com");
            mail.To.Add("my.name@hotmail.com");
            mail.Subject = "Test Mail";
            mail.Body = "This is for testing SMTP mail from GMAIL";

            SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
            smtpServer.Port = 587;
            smtpServer.Credentials = new System.Net.NetworkCredential("my.name", "my.password");
            smtpServer.EnableSsl = true;
            ServicePointManager.ServerCertificateValidationCallback = 
                delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
                    { return true; };
            smtpServer.Send(mail);
        }
    }
}

решение взято из здесь

надеюсь, это поможет, с уважением

14 голосов
/ 17 августа 2013

Правильным решением не является удаление проверки сертификата SSL.GMail имеет действующий сертификат.Проблема в том, что Mono не может найти сертификат.

Это совершенно неправильно по многим причинам, но главным образом потому, что оно удаляет очень важную проверку сертификата:правильное решение заключается в установке сертификата на вашем компьютере:

mozroots --import --ask-remove --machine
certmgr -ssl smtps://smtp.gmail.com:465

Это эффективно загрузит сертификат для Gmail и сделает его доступным для использования в моно.

6 голосов
/ 10 ноября 2010

У вас не установлены соответствующие центры сертификации, где Mono может их увидеть. Посмотрите FAQ по безопасности проекта Mono , чтобы узнать, как исправить эту ошибку.

1 голос
/ 10 ноября 2010

Вы пытались изменить порт, я знаю, что SMTP-порт по умолчанию для SSL - 465

1 голос
/ 10 ноября 2010

Если вы используете SSL, а не TLS, вам нужен порт 465, а не 587.

См. http://mail.google.com/support/bin/answer.py?hl=en&answer=13287.

0 голосов
/ 30 марта 2013

Нашел другое решение от SmtpClient с Gmail

certmgr -ssl smtps://smtp.gmail.com:465

Если вы используете моно веб-сервер, запустите команду с тем же именем пользователя, что и моно процесс.

0 голосов
/ 10 ноября 2010

Вам нужно безопасно отправлять с SSL? Вы можете удалить этот оператор SmtpServer.EnableSsl = true;, для которого не требуется сертификат SSL.

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