Ich habe eine einfache SmtpClient:Wie System.Net.Mail.SmtpException richtig behandelt?
var smtp = new SmtpClient { Host = host, ...};
smtp.Send(message);
ich einen anderen Host haben: smtp.gmail.com
, smtp.yandex.ru
usw.
Wenn smtp.Send(message);
ausgeführt ich verschiedene Ausnahme haben (abhängig vom Host) wegen des gleichen Problems - Die 2-Faktor-Verifizierung ist deaktiviert.
Für gmail seine System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
für Yahoo und Yandex seine System.Net.Mail.SmtpException depth 0: The operation has timed out. (0x80131500)
ich jetzt nicht über andere Anbieter Ausnahme Mail aber, wie man richtig werfen Ausnahme („Sie 2-Faktor-Überprüfung aktivieren müssen“) nur einmal? Ist es möglich? Oder wie man Codeverdopplung minimiert?
'host' es ist ein Parameter in der Methode vermeiden verletzen:' Öffentlichkeit void Send (string host) ' –
Anstatt also den Hostnamen als Zeichenfolge in der Methode zu senden, würden Sie die SmtpClient-Implementierung senden. Dies würde normalerweise mit Dependency Injection geschehen. Sie können dies auch tun, indem Sie die entsprechende SmtpClass-Client-Klasse (z. B. YahooSmtpClass) in einem 'switch' oder' if' auf der Grundlage Ihrer Konfiguration oder einer anderen Bedingung neu erstellen. – Graham
Es sind keine unterschiedlichen Clients erforderlich. Aber eine Fehlerprozessorklasse, die von der Hostdomäne (aus einer Konfigurationsdatei) ausgewählt werden kann, würde funktionieren – TomTom