Как отпралять email из WinForms приложений
Вчера писал о неприятном баге с SmtpClient и Kerio Mail Server. Уже было отчался и думал писать свой компонент, чтобы корректно работать с smtp сервером от Kerio.
С другой стороны, я выкладывал способ отправлять email из ASP.NET, и очень он мне нравится, поскольку использует CDO. Я люблю CDO
Итак, первый способ — используя 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.
Интересно, а почему эти классы разные? Зачем вообще их держут две реализации, ведь можно было обойтись одной, которая будет работать как ASP.NET, так и в WinForms. Никто не запрещает отправлять почту SmtpMail из System.Web.Mail.