Как отпралять 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("my@mail.ru");
mail.From = new MailAddress("smbdys@mail.ru");
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 = "my@server.ru";
        m.To = "somebody@mail.ru";
        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.

Leave a comment

1 Comment

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

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>