2010-01-28 20 views
7

Ich versuche die System.Net.Mail.SmtpClient-Klasse zu verwenden, um eine E-Mail über den E-Mail-Server meines Unternehmens weiterzuleiten. Alle SMTP-Verbindungen zum Mail-Server müssen SSL sein und es wird ein selbstsigniertes Zertifikat verwendet. Das ist gut für Outlook, wo Sie im Warndialog einfach auf OK klicken können, aber weiß jemand, wie SmtpClient ein selbstsigniertes Zertifikat akzeptieren kann?SmtpClient mit einem selbstsignierten SSL-Zertifikat arbeiten

Ich plane die Verwendung dieser App auf der Windows Azure-Plattform, so dass ich das selbstsignierte Zertifikat nicht als vertrauenswürdiges Stammverzeichnis installieren kann.

Antwort

9

Sie können an der ServerCertificateValidationCallback Eigenschaft einen Blick:

ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, sslPolicyErrors) => true; 

Es stellt einen Rückruf, die von der Laufzeit aufgerufen wird, wenn es ein SSL-Zertifikat zu validieren versucht. Wenn Sie true zurückgeben, sagen Sie im Grunde, dass es Ihnen egal ist, ob das Zertifikat gültig ist oder nicht -> Sie akzeptieren es immer. Natürlich ist es keine gute Idee, selbstsignierte Zertifikate in der Produktionsumgebung zu haben.

+0

Ich habe ein wenig in den ServicePoint-Winkel geschaut, aber ich sah diesen Kommentar auf der ServicePoint/Mitglieder-Dokumentseite "Bietet Verbindungsmanagement für HTTP-Verbindungen", so dass ich den Eindruck habe, dass er nicht für SMTP verwendet wird. Plus, wenn ich es versuche und eine Protokollnachricht in den Rückruf einlege, wird es nie genannt. – sipwiz

+4

Sie müssen dies setzen ** bevor ** Versuche unternommen werden, die 'SmtpClient'-Klasse zu initialisieren, idealerweise in einem globalen Initialisierungsabschnitt Ihrer Anwendung. –