Abilitare l'autenticazione SMTP con CDOSYS (System.Web.Mail)
Uno dei problemi più comuni con l'uso CDOSYS (che è la classe sottostante utilizzata da System.Web.Mail) è la mancanza di autenticazione per l'invio di posta tramite SMTP, Darren Jefford postato un metodo Per fare questo, l'ho riprodotto qui sotto dal momento che è attualmente ospitato su GotDOtNwet e quindi potrebbe scomparire ad un certo punto:
System.Web.Mail e Autenticazione
Una domanda è venuto recentemente su come inviare e-mail da .NET, System.Web.Mail offre una bella MailMessage e SmtpMail classe che fa il trucco.
Le classi sono un involucro sopra il CDOSYSfunzionalità che è stato intorno per un po ', e sono molto più bello rispetto all'interfaccia CDOSYS piuttosto clunky:)
E 'davvero dritto in avanti per inviare una mail:
System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); msg.Subject = "Testing";msg.Body = "Hello World";msg.From = "[email protected] ";msg.To =" [email protected] ";
System.Web.Mail.SmtpMail.SmtpServer = "YOUREXCHANGESERVER";System.Web.Mail.SmtpMail.Send( msg );
Tuttavia, quando lo stavo testando contro un server Exchange si è rifiutato di inviare, restituendo questo errore:
Sistema.Runtime.InteropServices.COMException (0x8004020E): Il server ha rifiutato l'indirizzo del mittente. La risposta del server è stata: 454 5.7.3 Il client non ha il permesso di inviare email a questo server.
Per impostazione predefinita (e saggiamente) Exchange non consente agli utenti non autenticati di inviare posta via SMTP per prevenire gli spammer, ecc. Per tagliare una storia molto lunga la classe SmtpMail non gestisce l'autenticazione al server Exchange, il che significa che non è possibile utilizzare la classe negli scenari più sicuri.
Dopo un sacco di scavi ho trovato che CDOSYS faavere codice di autenticazione come ci si aspetterebbe, tuttavia la classe MailMessage o SmtpMail non espone alcun modo per attivarlo.Dopo un po 'più di scavo ho scoperto che il team Everett (.NET Framework 1.1) ha realizzato questo e aggiunto una nuova proprietà chiamata Campi, che come è possibile vedimanca qualche documentazione;-)
Quindi, dopo qualche ulteriore indagine ho scoperto che è possibile autenticarsi contro un server, se si dispone della versione 1.1 del framework, e questa è la riga che si deve aggiungere al codice di cui sopra:
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate,"2);
Se il 2 specifica NTLM, 1 per base, 0 per nessuno (il valore predefinito)
Naturalmente è possibile anche configurare il miriadeCity name (optional, probably does not need a translation)di altre opzioni di configurazione tramite questa collezione di campi
Sento un articolo di MSDN HOWTO in arrivo, e forse polietly chiedere un po 'di documentazione di MSDN da caricare! :-)