# SMTP-varmennuksen mahdollistaminen CDOSYS-järjestelmällä (System.Web.Mail)

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

<!-- category -- mostlylucidcouk, Imported, ASP.NET, C# -->
Yksi yleisimpiä ongelmia käytön [CDOSYS](http://msdn.microsoft.com/library/en-us/cdosys/html/_cdosys_about_cdo_for_windows_2000.asp) (mikä on kohde-etuusluokka, jota [Järjestelmä.Web.Mail)](http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebmail.asp) on se, että SMTP:n kautta lähetetyn postin aitous puuttuu, [Darren Jefford](http://blogs.gotdotnet.com/darrenj/) [lähetetty menetelmä](http://blogs.gotdotnet.com/darrenj/permalink.aspx/abb9e979-98dd-4172-b07c-2c4919ed94bf) Tätä varten olen toistanut sen alla, koska se on tällä hetkellä GotDotNwetissä ja voi kadota jossain vaiheessa:

### Järjestelmä.Web.Mail ja Authentication

Äskettäin tuli esiin kysymys, miten lähettää sähköpostia .NET, System.Web.Mail tarjoaa mukavan MailMessage- ja SmtpMail-kurssin, joka tepsii.

Luokat ovat käärepaperia. [CDOSYS](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_techsel_tech_1.asp)Toiminnallisuus, joka on ollut olemassa jo jonkin aikaa ja on paljon mukavampi kuin pikemminkin kömpelö CDOSYS-rajapinta :)

On todella suoraviivaista lähettää postia:

*System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); msg.Asia = "Testing", msg.Body = "Hello World", msg.From = "yourname@domain.com* *";msg.To ="* *someone@domain.com* *";*

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

Mutta kun testasin sitä Exchange Serveriä vastaan, se kieltäytyi lähettämästä ja palautti tämän virheen:

*Järjestelmä.Runtime.InteropServices.COMExclusion (0x8004020E): Palvelin hylkäsi lähettäjän osoitteen. Palvelimen vastaus oli: 454 5.7.3 Asiakkaalla ei ole lupaa lähettää sähköpostia tälle palvelimelle.*

Oletusarvoisesti (ja viisaasti) Vaihto ei salli aitouttamattomien käyttäjien lähettää sähköpostia SMTP:n kautta roskapostittajia vastaan. SmtpMail-luokka ei käsittele tunnistusta Exchange-palvelimelle, mikä tarkoittaa, että luokkaa ei voi käyttää turvallisimmissa skenaarioissa.

Pitkän kaivamisen jälkeen löysin sen CDOSYSin. [tekee](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_smtpauthenticate.asp)Ota tunnistautumiskoodi, kuten odottaa voi, mutta MailMessage- tai SmtpMail-kurssi ei paljasta mitään tapaa käynnistää sitä. Vähän kaivamisen jälkeen huomasin, että Everett (.NET Framework 1.1) -tiimi tajusi tämän ja lisäsi uuden kiinteistön nimeltä Fields, joka voi olla mikä tahansa. [katso](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebmailmailmessageclassfieldstopic.asp)puuttuu joitakin asiakirjoja ;-)

Joten, joidenkin lisätutkimusten jälkeen olen havainnut, että voit todentaa palvelimen, jos sinulla on kehysversio 1.1, ja tämä on rivi, joka sinun täytyy lisätä yllä olevaan koodiin:

msg.Fields.Add('http://schemas.microsoft.com/cdo/configuration/smtpauthenticate',

Jos 2 kohdassa määritellään NTLM, 1 perusarvoksi, 0 nollaksi (oletusarvo)

Voit tietenkin myös määrittää [MUKAAN](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration.asp)muista kokoonpanovaihtoehdoista tämän Fields-kokoelman kautta

Minusta tuntuu, että MSDN Howton artikkeli on tulossa, ja ehkäpä poliittisesti pyydän, että joitakin MSDN-dokumentteja ladattaisiin! :-)