Rose debug info
---------------

Как отпралять email из WinForms приложений

Вчера писал о неприятном баге с SmtpClient и Kerio Mail Server. Уже было отчался и думал писать свой компонент, чтобы корректно работать с smtp сервером от Kerio.

С другой стороны, я выкладывал способ отправлять email из ASP.NET, и очень он мне нравится, поскольку использует CDO. Я люблю CDO Laughing Laughing Cool

Итак, первый способ — используя System.Net.Mail:

using System.Net.Mail;
using System.Net;   

void SendMail()
{
MailMessage mail = new MailMessage();
mail.To.Add(«[email protected]»);
mail.From = new MailAddress(«[email protected]»);
mail.Subject = «тема письма»;
mail.Body = «текст письма»;
SmtpClient smtp = new SmtpClient(«smtp.mail.ru»);
smtp.Credentials = new NetworkCredential(«login», «password»);    //это логин и пароль для авторизации на SMTP сервере
smtp.Send(mail);
}

Этот способ работает прекрасно, наверное, со всеми SMTP серверами (с mail.ru работает, например) кроме Kerio Mail Server

Второй способ — используем System.Web.Mail

Но! Для WinForms, оказывается необходимо сделать несколько телодвижений, чтобы подключить System.Web.Mail, а именно:
Тыкнуть References -> Add Reference -> вкладка .NET -> выбрать в списке System.Web -> OK

Все! После этого можно прописать using System.Web.Mail;

using System.Web.Mail;

void SendMail()
{
   System.Web.Mail.MailMessage m = new System.Web.Mail.MailMessage();
        m.From = «[email protected]»;
        m.To = «[email protected]»;
        m.BodyFormat = System.Web.Mail.MailFormat.Text;
        m.BodyEncoding = System.Text.Encoding.GetEncoding(«windows-1251»);
        m.Subject = «Тема пиьсма»;
        m.Body = «текст письма»;
 // для аутентификации на SMTP сервере
        m.Fields.Add(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate», 1);
        m.Fields.Add(«http://schemas.microsoft.com/cdo/configuration/sendusername», «UserName»);
        m.Fields.Add(«http://schemas.microsoft.com/cdo/configuration/sendpassword», «Password»);
        System.Web.Mail.SmtpMail.SmtpServer = «smtp.server.ru»;
        System.Web.Mail.SmtpMail.Send(m);
}

Ура-ура, второй способ работает с Kerio Mail Server Хотя, оба способа довольно просты и миновали те времена когда надо было реализовывать в своих компонентах протокол SMTP.

 369   2008  
1 комментарий
.NET программист 2009

Интересно, а почему эти классы разные? Зачем вообще их держут две реализации, ведь можно было обойтись одной, которая будет работать как ASP.NET, так и в WinForms. Никто не запрещает отправлять почту SmtpMail из System.Web.Mail.