Frage

Wenn ich versuche, E-Mail unter Verwendung von C # mit gmail der SMTP-Server zu senden, erhalte ich diesen Fehler ..

"Das Remote-Zertifikat ungültig ist nach den Validierungsverfahren".

SSL aktiviert

Port verwendet wird, ist 587

Servername verwendet wird, ist "Smtp.gmail.com".

Benutzername und Passwort korrekt

Outlook Express funktioniert auf dem gleichen PC mit den gleichen Einstellungen

Das c # Programm arbeitet auch an anderen Orten in Ordnung ... wir bekommen diese Fehler nur in den Kunden Platz.

Würde jede Hilfe dankbar ..

Danke

Edit: @ Andomar, Wo finde ich die Root-Zertifikate im Client finden? Wie kann ich dieses Problem beheben?

@ Alnitak, Wie Ausgabe ich starttls obwohl System.Net.Mail Bibliothek?

@ David, Was mache ich als Parameter übergeben für "(object sender, X509Certificate Zertifikat, X509Chain Kette, SslPolicyErrors sslPolicyErrors)"

Danke David. Ich habe diese Zeilen hinzugefügt. Aber ich bin immer noch verwirrt über, was da dieser Code geht hat keine direkte Verbindung mit System.Net.Mail soweit meine understanding.Hope das Problem verschwindet.

War es hilfreich?

Lösung

Überprüfen Sie auch, dass die Root-Zertifikate sind in der vertrauenswürdigen Root Authority Speicher des Clients. Wenn diese von einem Dienst ist dann das Hinzufügen der Root-Zertifikate auf den lokalen Computerspeicher kann auch helfen. Um ein besseres Verständnis des Grundes, dann habe ich die folgende Richtlinie hilfreich ...

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;
}

Um die Richtlinie in, verwenden Sie den folgenden Text einfügen, dies muss nur einmal für die Anwendungsdomäne durchgeführt werden.

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

Sie können auch die Politik verwenden, um die Fehler ganz zu entfernen, aber es wäre besser, das Problem zu beheben, als das zu tun.

Andere Tipps

Überprüfen Sie, ob die richtigen Root-Zertifikate in der Client-Speicher sind. Und das Systemdatum des Kunden korrekt ist.

Sind Sie mit STARTTLS oder unter der Annahme, dass die Verbindung auf Port 587 SSL von Anfang an verschlüsselt ist?

Google-Server auf smtp.gmail.com erfordern STARTTLS.

Haben Sie

 client.EnableSsl = true;

da gmail muss es

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top