# SMTP-authenticatie inschakelen met CDOSYS (Systeem.Web.Mail)

<datetime class="hidden">2004-02-20T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, ASP.NET, C# -->
Een van de meest voorkomende problemen met het gebruik [CDOSYS](http://msdn.microsoft.com/library/en-us/cdosys/html/_cdosys_about_cdo_for_windows_2000.asp) (die de onderliggende klasse is die wordt gebruikt door [System.Web.Mail)](http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebmail.asp) is het ontbreken van authenticatie voor het verzenden van e-mail via SMTP, [Darren Jefford](http://blogs.gotdotnet.com/darrenj/) [een methode geplaatst](http://blogs.gotdotnet.com/darrenj/permalink.aspx/abb9e979-98dd-4172-b07c-2c4919ed94bf) Om dit te doen, heb ik het hieronder weergegeven omdat het momenteel is gehost op GotDOtNwet en dus kan verdwijnen op een bepaald punt:

### Systeem.Web.Mail en Authenticatie

Onlangs kwam er een vraag over het versturen van e-mail van .NET, System.Web.Mail biedt een leuke MailMessage en SmtpMail klasse die de truc doet.

De lessen zijn een wrapper over de [CDOSYS](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_techsel_tech_1.asp)functionaliteit die al een tijdje bestaat, en veel mooier zijn dan de eerder clunky CDOSYS interface:)

Het is echt rechttoe rechtaan om een mail te sturen:

*System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); msg.Subject = "Testing";msg.Body = "Hello World";msg.Van = "yourname@domain.com* *";msg.To = "* *someone@domein.com* *";*

*System.Web.Mail.SmtpMail.SmtpServer = "YOUREXCHANGESERVER";Systeem.Web.Mail.SmtpMail.Send(msg );*

Maar toen ik het testte tegen een Exchange Server weigerde het te verzenden, en deze fout terug te geven:

*System.Runtime.InteropServices.COMException (0x8004020E): De server heeft het adres van de afzender afgewezen. Het antwoord van de server was: 454 5.7.3 Opdrachtgever heeft geen toestemming om mail naar deze server te sturen.*

Standaard (en verstandig) Exchange staat niet toe dat niet-geauthentificeerde gebruikers e-mail verzenden via SMTP om spammers te voorkomen, enz. Om een zeer lang verhaal af te snijden, wordt de SmtpMail-klasse niet behandeld als authenticatie naar de Exchange-server, wat betekent dat je de klasse niet kunt gebruiken in de meest veilige scenario's.

Na veel graven vond ik dat CDOSYS [doet](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_smtpauthenticate.asp)hebben authenticatie code zoals je zou verwachten, maar de MailMessage of SmtpMail klasse niet bloot geen manier om het aan te zetten. Na een beetje meer graven vond ik dat de Everett (.NET Framework 1.1) team realiseerde dit en voegde een nieuwe eigenschap genaamd Fields, die als je kunt [zie](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebmailmailmessageclassfieldstopic.asp)ontbreekt enige documentatie;-)

Na verder onderzoek heb ik ontdekt dat je je kunt authenticeren tegen een server, als je versie 1.1 van het kader hebt, en dit is de regel die je moet toevoegen aan de bovenstaande code:

msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate,"2);

Wanneer de 2 NTLM specificeert, 1 voor basis, 0 voor geen (de standaard)

U kunt natuurlijk ook het configureren van de [myriad](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration.asp)van andere configuratieopties via deze Fields-collectie

Ik voel een MSDN HOWTO artikel komen, en misschien polietly vragen om een aantal MSDN documentatie te uploaden!:-)