Ho un semplice smtpclient:Come gestire correttamente System.Net.Mail.SmtpException?
var smtp = new SmtpClient { Host = host, ...};
smtp.Send(message);
posso avere un host diverso: smtp.gmail.com
, smtp.yandex.ru
ecc
Quando smtp.Send(message);
eseguito devo eccezione differente (dipende dal host) causa lo stesso problema - La verifica a 2 fattori è disattivata.
per Gmail sua 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.
per Yahoo Yandex sua System.Net.Mail.SmtpException depth 0: The operation has timed out. (0x80131500)
io non ora circa altri posta eccezione fornitori, ma come eccezione correttamente tiro ("è necessario abilitare la verifica 2-factor") solo una volta? È possibile? O come minimizzare la duplicazione del codice?
'host' si tratta di un parametro nel metodo:' pubblico void Invia (host stringa) ' –
Quindi, anziché inviare il nome host come stringa nel metodo, si invierà l'implementazione SmtpClient. Questo normalmente verrebbe fatto usando Iniezione di dipendenza. Puoi anche farlo aggiornando la classe client SmtpClass appropriata (ad esempio YahooSmtpClass) in un 'switch' o' if' in base alla configurazione o ad altre condizioni. – Graham
Non sono necessari clienti diversi. Ma una classe di processore di errori che può essere selezionata dal dominio host (da un file di configurazione) funzionerebbe – TomTom