it-swarm.com.de

"Das Remote-Zertifikat ist gemäß dem Überprüfungsverfahren ungültig." Verwendung von Google Mail SMTP-Server

Ich erhalte diesen Fehler:

Das Remote-Zertifikat ist gemäß dem Überprüfungsverfahren ungültig.

wenn ich versuche, E-Mails über den SMTP-Server von Google Mail in meinem C # -Code zu senden. Kann mich jemand in die richtige Richtung weisen, um eine Lösung für dieses Problem zu finden?

Das Folgende ist der Stack-Trace ...

at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Mail.SmtpConnection.Flush()
at System.Net.Mail.SmtpConnection.GetConnection(String Host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String Host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at BulkEmail.frmemail.mailsending(String toaddress, String fromaddress, String fromname, String subject, String pwd, String attachements, String mailmessage, String htmlmessage, Int32 i, Int32 j, String replytoaddress)
194
Josh

Warnung: Verwenden Sie dies nicht im Produktionscode!

Um dieses Problem zu umgehen, können Sie die Zertifikatsprüfung deaktivieren. Tun Sie dies nur, um die Bestätigung zu erhalten, dass der Fehler aufgrund eines fehlerhaften Zertifikats ausgelöst wird.

Rufen Sie diese Methode auf, bevor Sie smtpclient.Send() aufrufen:

    [Obsolete("Do not use this in Production code!!!",true)]
    static void NEVER_EAT_POISON_Disable_CertificateValidation()
    {
        // Disabling certificate validation can expose you to a man-in-the-middle attack
        // which may allow your encrypted message to be read by an attacker
        // https://stackoverflow.com/a/14907718/740639
        ServicePointManager.ServerCertificateValidationCallback =
            delegate (
                object s,
                X509Certificate certificate,
                X509Chain chain,
                SslPolicyErrors sslPolicyErrors
            ) {
                return true;
            };
    }
290
Yury Skaletskiy

Der Link hier hat mein Problem gelöst.

http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html

Ich ging zur URL des Webdienstes (auf dem Server, der das Problem hatte), klickte auf das kleine Sicherheitssymbol im Internet Explorer, das das Zertifikat aufrief. Ich habe dann auf die Registerkarte Details geklickt und auf die Schaltfläche In Datei kopieren geklickt, mit der ich das Zertifikat als CER-Datei exportieren konnte. Nachdem ich das Zertifikat lokal hatte, konnte ich es mithilfe der folgenden Anweisungen in den Zertifikatspeicher auf dem Server importieren.

Starten Sie eine neue MMC. Datei -> Snap-In hinzufügen/entfernen ... Klicken Sie auf Hinzufügen ... Wählen Sie Zertifikate und klicken Sie auf Hinzufügen. Aktivieren Sie das Optionsfeld "Computerkonto". Weiter klicken.

Wählen Sie im nächsten Bildschirm den Client-Computer aus. Klicken Sie auf Fertig stellen. Klicken Sie auf Schließen. OK klicken. Installieren Sie das Zertifikat JETZT im Zertifikatspeicher der vertrauenswürdigen Stammzertifizierungsstellen. Dadurch können alle Benutzer dem Zertifikat vertrauen.

50
T-Rex

Sie können den Code verbessern, indem Sie den Benutzer fragen, wenn das Zertifikat ungültig ist, ob er fortfahren möchte oder nicht. Möchten Sie fortfahren? Wie folgt:

ServicePointManager.ServerCertificateValidationCallback = 
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

Und füge eine Methode wie diese hinzu:

public static bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
        return true;
    else
    {
        if (System.Windows.Forms.MessageBox.Show("The server certificate is not valid.\nAccept?", "Certificate Validation", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            return true;
        else
            return false;
    }
}
37
LinuxLover

Ein bisschen zu spät zur Party, aber wenn Sie nach einer Lösung wie der von Yury suchen, können Sie anhand des folgenden Codes feststellen, ob das Problem mit einem Selbstsignierungszertifikat zusammenhängt, und wenn ja, den Selbstsignierungsfehler ignorieren. Auf Wunsch können Sie natürlich auch nach anderen SSL-Fehlern suchen.

Der von uns verwendete Code (mit freundlicher Genehmigung von Microsoft - http://msdn.Microsoft.com/en-us/library/office/dd633677 (v = exchange.80) .aspx ) lautet wie folgt:

  private static bool CertificateValidationCallBack(
         object sender,
         System.Security.Cryptography.X509Certificates.X509Certificate certificate,
         System.Security.Cryptography.X509Certificates.X509Chain chain,
         System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
  // If the certificate is a valid, signed certificate, return true.
  if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
  {
    return true;
  }

  // If there are errors in the certificate chain, look at each error to determine the cause.
  if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
  {
    if (chain != null && chain.ChainStatus != null)
    {
      foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
      {
        if ((certificate.Subject == certificate.Issuer) &&
           (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
        {
          // Self-signed certificates with an untrusted root are valid. 
          continue;
        }
        else
        {
          if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
          {
            // If there are any other errors in the certificate chain, the certificate is invalid,
         // so the method returns false.
            return false;
          }
        }
      }
    }

    // When processing reaches this line, the only errors in the certificate chain are 
// untrusted root errors for self-signed certificates. These certificates are valid
// for default Exchange server installations, so return true.
    return true;
  }
  else
  {
 // In all other cases, return false.
    return false;
  }
}
28
Hooligancat

Ich hatte genau das gleiche Problem und stellte fest, dass bei Mail Shield von Avast Antivirus standardmäßig "SSL-Verbindung scannen" aktiviert war. Stellen Sie sicher, dass deaktivieren.

Meines Wissens wird Avast die E-Mails "öffnen", nach Viren durchsuchen und dann mit einem eigenen Zertifikat signieren, damit die E-Mails nicht von den Google Mail-Nutzern signiert werden Zertifikat mehr, die diesen Fehler erzeugt.

Lösung 1:

  • Deaktivieren Sie die SSL-Scans Ihres Antivirus (oder des gesamten E-Mail-Schutzes).

Lösung 2 (sollte die beste Sicherheit sein):

  • Holen Sie sich irgendwie das Zertifikat, das vom Antivirus verwendet wird (Avast hat die Option, es zu exportieren)
  • Importieren Sie es in Ihren IMAP/POP/SMTP-Client, bevor Sie eine Verbindung zum Google Mail-Server herstellen.
16
tehCivilian

Sind Sie sicher, dass Sie die richtige SMTP-Serveradresse verwenden?

Sowohl smtp.google.com als auch smtp.gmail.com funktionieren, das SSL-Zertifikat wird jedoch für das zweite Zertifikat ausgestellt.

8

Erhalten Sie den gleichen Fehler beim Senden von Outlook wegen SSL. Versuchte Einstellung EnableSSL = false löste das Problem.

beispiel:

var smtp = new SmtpClient
                {
                    Host = "smtp.gmail.com",                   
                    Port = 587,
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    UseDefaultCredentials = false,                   
                    Credentials = new NetworkCredential("[email protected]", "xxxxx")
                };
8

Ich hatte den gleichen Fehler, als ich versuchte, eine E-Mail mit SmtpClient über den Proxy-Server (Usergate) zu senden.

Überprüft, ob das Zertifikat die Adresse des Servers enthält, die nicht der Adresse des Proxyservers entspricht, daher der Fehler. Meine Lösung: Wenn beim Überprüfen des Zertifikats ein Fehler auftritt, erhalten Sie das Zertifikat, exportieren Sie es und überprüfen Sie es.

public static bool RemoteServerCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        if (sslPolicyErrors == SslPolicyErrors.None)
            return true;

        // if got an cert auth error
        if (sslPolicyErrors != SslPolicyErrors.RemoteCertificateNameMismatch) return false;
        const string sertFileName = "smpthost.cer";

        // check if cert file exists
        if (File.Exists(sertFileName))
        {
            var actualCertificate = X509Certificate.CreateFromCertFile(sertFileName);
            return certificate.Equals(actualCertificate);
        }

        // export and check if cert not exists
        using (var file = File.Create(sertFileName))
        {
            var cert = certificate.Export(X509ContentType.Cert);
            file.Write(cert, 0, cert.Length);
        }
        var createdCertificate = X509Certificate.CreateFromCertFile(sertFileName);
        return certificate.Equals(createdCertificate);
    }

Vollständiger Code meiner E-Mail-Absenderklasse:

public class EmailSender
{
    private readonly SmtpClient _smtpServer;
    private readonly MailAddress _fromAddress;

    public EmailSender()
    {
        ServicePointManager.ServerCertificateValidationCallback = RemoteServerCertificateValidationCallback;
        _smtpServer = new SmtpClient();
    }

    public EmailSender(string smtpHost, int smtpPort, bool enableSsl, string userName, string password, string fromEmail, string fromName) : this()
    {
        _smtpServer.Host = smtpHost;
        _smtpServer.Port = smtpPort;
        _smtpServer.UseDefaultCredentials = false;
        _smtpServer.EnableSsl = enableSsl;
        _smtpServer.Credentials = new NetworkCredential(userName, password);

        _fromAddress = new MailAddress(fromEmail, fromName);
    }

    public bool Send(string address, string mailSubject, string htmlMessageBody,
        string fileName = null)
    {
        return Send(new List<MailAddress> { new MailAddress(address) }, mailSubject, htmlMessageBody, fileName);
    }

    public bool Send(List<MailAddress> addressList, string mailSubject, string htmlMessageBody,
        string fileName = null)
    {
        var mailMessage = new MailMessage();
        try
        {
            if (_fromAddress != null)
                mailMessage.From = _fromAddress;

            foreach (var addr in addressList)
                mailMessage.To.Add(addr);

            mailMessage.SubjectEncoding = Encoding.UTF8;
            mailMessage.Subject = mailSubject;

            mailMessage.Body = htmlMessageBody;
            mailMessage.BodyEncoding = Encoding.UTF8;
            mailMessage.IsBodyHtml = true;

            if ((fileName != null) && (System.IO.File.Exists(fileName)))
            {
                var attach = new Attachment(fileName, MediaTypeNames.Application.Octet);
                attach.ContentDisposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                attach.ContentDisposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                attach.ContentDisposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                mailMessage.Attachments.Add(attach);
            }
            _smtpServer.Send(mailMessage);
        }
        catch (Exception e)
        {
            // TODO lor error
            return false;
        }
        return true;
    }

    public static bool RemoteServerCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
        return true;

    // if got an cert auth error
    if (sslPolicyErrors != SslPolicyErrors.RemoteCertificateNameMismatch) return false;
    const string sertFileName = "smpthost.cer";

    // check if cert file exists
    if (File.Exists(sertFileName))
    {
        var actualCertificate = X509Certificate.CreateFromCertFile(sertFileName);
        return certificate.Equals(actualCertificate);
    }

    // export and check if cert not exists
    using (var file = File.Create(sertFileName))
    {
        var cert = certificate.Export(X509ContentType.Cert);
        file.Write(cert, 0, cert.Length);
    }
    var createdCertificate = X509Certificate.CreateFromCertFile(sertFileName);
    return certificate.Equals(createdCertificate);
}

}

7
Evgeny Ivanov

Mein Problem betraf Windows 2003 Server beim Aufrufen von AuthenticateAsClient. Die obigen Lösungen (z. B. Umgehen von ServicePointManager.ServerCertificateValidationCallback) funktioniert nicht.

Es stellte sich heraus, dass dies ein Fehler in Windows 2003 ist und es einen Hotfix gibt:

"Anwendungen, die die Kryptografie-API verwenden, können ein X.509-Zertifikat in Windows Server 2003 nicht validieren"

https://support.Microsoft.com/en-us/kb/938397

Das Installieren dieses Hotfixes behebt mein Problem.

6
user326608

Überprüfen Sie das Datum und die Uhrzeit Ihres Computers. Wenn es falsch ist, aktualisieren Sie es auf die aktuelle Zeit oder stellen Sie es automatisch ein, um die Zeit aus dem Internet abzurufen.

Da Zertifikate an einen festen Zeitraum gebunden sind, können bei einer falschen Uhr solche Fehler auftreten. In diesem Szenario wird das Problem durch Beheben der Zeit behoben.

4
AliSafari186

Ihr Website-Ordner benötigt Netzwerkdienstsicherheit. Besonders die web.config. Es verwendet dieses Konto, um auf Ihre Registrierung für die Zertifikate zuzugreifen. Dadurch müssen Sie Ihrem Code keinen Hack mehr hinzufügen.

4
Frans

Ich weiß, dass ich in diesem Spiel ziemlich spät dran bin, aber ich habe hier keine Antwort auf die system.diagnostics-Protokolle für den TLS-Stream gefunden.

Bevor Sie Änderungen an Ihrem Code vornehmen, stellen Sie sicher, dass Sie wissen, worum es bei dem Problem geht. Das AuthenticationException ist eine dieser sehr allgemeinen Ausnahmen, die nicht viel aussagen. Um zu erfahren, was unter der Haube vor sich geht, bearbeiten Sie die Datei app.config für Ihre Anwendung (oder erstellen Sie eine neue) und stellen Sie sicher, dass System.Net die Ablaufverfolgungsquelle im Abschnitt system.diagnostics Aktiviert ist , beispielsweise:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" />
    <sharedListeners>
      <add name="file" initializeData="c:\network.log" type="System.Diagnostics.TextWriterTraceListener" />
    </sharedListeners>
    <sources>
      <source name="System.Net" switchValue="Verbose">
        <listeners>
          <add name="file" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
</configuration>

Führen Sie Ihre Anwendung erneut aus und überprüfen Sie die Datei c:\network.log. Dort sollten detaillierte Informationen zu Ihrer TLS (SSL) -Verbindung angezeigt werden, zum Beispiel:

System.Net Information: 0 : [12764] InitializeSecurityContext(credential = System.Net.SafeFreeCredential_SECURITY, context = f44368:535f958, targetName = localhost, inFlags = ReplayDetect, SequenceDetect, Confidentiality, AllocateMemory, InitManualCredValidation)
System.Net Information: 0 : [12764] InitializeSecurityContext(In-Buffers count=2, Out-Buffer length=0, returned code=OK).
System.Net Information: 0 : [12764] Remote certificate: [Version]
  V3

[Subject]
  CN=test
  Simple Name: test
  DNS Name: example.com

[Issuer]
  CN=Root CA
  Simple Name: Root CA
  DNS Name: Root CA

...

[Signature Algorithm]
  sha256RSA(1.2.840.113549.1.1.11)

[Public Key]
  Algorithm: RSA
  Length: 2048
  Key Blob: ....
System.Net Information: 0 : [12764] SecureChannel#38496415 - Remote certificate has errors:
System.Net Information: 0 : [12764] SecureChannel#38496415 -    Certificate name mismatch.
System.Net Information: 0 : [12764] SecureChannel#38496415 - Remote certificate was verified as invalid by the user.
System.Net Error: 0 : [12764] Exception in AppDomain#10923418::UnhandledExceptionHandler - The remote certificate is invalid according to the validation procedure..

Wenn Sie wissen, was das Problem verursacht, sollten Sie in der Lage sein, das Problem zu beheben oder Ihre Google-Suchanfragen zumindest einzugrenzen.

4
lowleveldesign

Mein Problem bestand nicht darin, dass ich den Server anhand der IP-Adresse anstelle der URL referenzierte. Ich habe ein signiertes Zertifikat von einer Zertifizierungsstelle für die Verwendung in einem privaten Netzwerk gekauft. Die im Zertifikat angegebene URL spielt bei der Referenzierung des Servers eine Rolle. Nachdem ich den Server über die URL im Zertifikat referenziert hatte, fing alles an zu funktionieren.

3
Josh

Es gibt einen MSDN-Blogartikel zur Untersuchung dieser Art von Problemen:

Problembehandlung bei ASP.NET - Das Remote-Zertifikat ist gemäß dem Überprüfungsverfahren ungültig:
http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/troubleshooter-asp-net-the-remote-certificate-is-invalid-according-to -the-validation-procedure.aspx

2
David Burg

In unserem Fall wurde das Problem durch das IIS Serverzertifikat verursacht. Der Betreff des Zertifikats wurde auf den DNS-Namen festgelegt, und Benutzer versuchten, über die IP-Adresse auf die Website zuzugreifen Benutzer haben begonnen, den DNS-Namen zu verwenden.

Sie müssen also Ihre Provider-URL in https: //CertificateSubject/xxx/xxx.application ändern

2
Ludwo

Für diejenigen, bei denen derselbe Fehler beim Herstellen einer Verbindung zu einer lokalen Site mit einem selbstsignierten Zertifikat auftritt, hat mir der folgende Blogbeitrag geholfen.

http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html

2
NullPointer

Das Hinzufügen dieser Zeile hat bei mir funktioniert. Dies vertraut in der Tat allen Zertifikaten wie erwähnt hier . Dies kann jedoch hauptsächlich zur Fehlerbehebung verwendet werden. Wenn dies für Sie funktioniert, bedeutet dies, dass das Zertifikat des Remoteservers nicht als vertrauenswürdiges Zertifikat in Ihrem Computer hinzugefügt wird.

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

Vollständiger Code ist

private void sendAMail(String toAddress, String messageBody)
        {
            String msg = "Sending mail to : " + toAddress;

            MailMessage mail = new MailMessage();
            mail.To.Add(toAddress);
            mail.From = new MailAddress("[email protected]");
            mail.Subject = "Subject: Test Mail";
            mail.Body = messageBody;
            mail.IsBodyHtml = true;            

            //Added this line here
            System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
            SmtpClient smtp = new SmtpClient();

            smtp.Host = "myhostname.com";            
            smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "");
            smtp.EnableSsl = true;
            smtp.Port = 587;            
            smtp.Send(mail);            
        }


private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    //Console.WriteLine(certificate);
    return true;
}
1
Erdnase

Es hat mein Problem gelöst

smtpClient.Credentials = new NetworkCredential(sendMail.UserName, sendMail.Password);
smtpClient.EnableSsl = false;//sendMail.EnableSSL;

// Mit Bezug auf // Problem kommt nur Verwenden Sie die obige Zeile, um eine falsche SSl festzulegen, um den Fehler zu beheben, wenn Benutzername und Passwort in den SMTP-Einstellungen eingegeben wurden.

0
user3584038

hier ist die Lösung, für die ich mich entschieden habe.

        ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            string name = certificate.Subject;

            DateTime expirationDate = DateTime.Parse(certificate.GetExpirationDateString());

            if (sslPolicyErrors == SslPolicyErrors.None || (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch && name.EndsWith(".acceptabledomain.com") && expirationDate > DateTime.Now))
            {
                return true;
            }
            return false;
        };
0
The Lazy Coder