# Вмикання автентифікації SMTP за допомогою CDOSYS (System. Web. Mail)

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

<!-- category -- mostlylucidcouk, Imported, ASP.NET, C# -->
Одна з найпоширеніших проблем з використанням [CDOSYS](http://msdn.microsoft.com/library/en-us/cdosys/html/_cdosys_about_cdo_for_windows_2000.asp) (який є основним класом, що використовується [System. Web. Mail)](http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebmail.asp) є відсутністю автентифікації для надсилання пошти за допомогою SMTP, [Darren Jefford](http://blogs.gotdotnet.com/darrenj/) [оприлюднити метод](http://blogs.gotdotnet.com/darrenj/permalink.aspx/abb9e979-98dd-4172-b07c-2c4919ed94bf) щоб зробити це, я відтворив його внизу з того часу як він зараз знаходиться на GotDotNwet і тому може зникнути в якийсь момент:

### System. Web. Mail і розпізнавання

Нещодавно з'явилося питання щодо того, як надіслати електронну пошту з . NET, System. Web. Mail пропонує чудовий клас MailMessage і SmtpMail, який виконує цей трюк.

Класи - обгортка над [CDOSYS](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/e2k3/e2k3/_techsel_tech_1.asp)Функціональні функції, які є досить довго, і набагато краще, ніж досить незграбний інтерфейс CDOSYS:)

Дуже просто надіслати листа:

*System. Web. Mail. MailMessage msage = new System. Web. Mail.MailMessage}); msg. Subject = "Testing"; msg. Body = "Hello World"; msg. From = "ваше ім' я@ domain.com* *"; msg. To = "* *someone@ domain.com* *";*

*System. Web. Mail.SmtpMail.SmtpServer = "YOUREXCANGESERVER";System. Web.Mail.SmtpMail.Send});*

Тим не менш, коли я перевіряв дані на сервері обміну, програма відмовлялася від надсилання, повернувши цю помилку:

*System. Runtime. InteropServices. COOExcoding (0x80020E): сервер відкинув адресу відправника. Відповідь сервера: 454 5. 7. 7. 3 Клієнт не має прав для надсилання пошти на цей сервер.*

Типово (і розумно) Обмін не дозволяє користувачам без розпізнавання надсилати пошту через SMTP для запобігання спаму тощо. Щоб вирізати дуже довгу історію, клас SmtpMail не може працювати з розпізнаванням на сервері Exchange, це означає, що ви не можете використовувати клас у найбільш надійних сценаріях.

Після багатьох копань я знайшов CDOSYS [do](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_smtpauthenticate.asp)має код розпізнавання, який ви й очікували, але клас MailMessage або SmtpMail ніяк не може його увімкнути. Після трохи більше копання я виявив, що команда Everyth (. NET Framework 1. 1) зрозуміла це і додала нову властивість, що називається полями, і як ви можете, [див.](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebmailmailmessageclassfieldstopic.asp)не вистачає документації ; -)

Отже, після деяких подальших досліджень я виявив, що ви можете автентифікуватися на сервері, якщо у вас є 1,1 шаблона версії, і ось рядок, який ви маєте додати до цього коду:

msg. Fildds. add} http: // schemas. microsoft.com/cdo/ configuration/smpautentticate",2;

Де 2 вказує NTLM, 1 для базового, 0 для відсутності (типове)

Ви, звичайно, також можете налаштувати [міріади](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration.asp)інших параметрів налаштування за допомогою цієї збірки полів

Я відчуваю, що стаття з настановами MSDN продовжується, і, можливо, смиренно просить вивантажити деякі документи MSDN!: -)