Отправка писем на почту visual studio. Программная отправка email, используя различные сервисы

Очень часто приходится сталкиваться с отправкой электронных писем из программного кода. За примерами далеко ходить не нужно.

Данная статья является подсказкой и не открывает ничего нового, но прежде чем её писать, посмотрел похожее в интернете и был довольно удивлён тому, что почти везде предлагают или не работающее или устаревшее решение, либо просто написано неграмотно.

Первое, что не стоит делать по этим примерам – это использовать System.Web.Mail, который уже давно устарел, а начиная с Visual Studio 2010 библиотеку System.Web даже и не добавить, не зная полного пути к соответствующей DLL.
Вместо него предлагается использовать библиотеку System.Net.
using System.Net; using System.Net.Mail;
Итак, самое простое, оно же самое важное и часто использующееся - это отправка письма со своего почтового сервера, на котором настроен SMTP-клиент. Как вы понимаете, сервер может быть как и тот, на котором работает приложение, так и удалённый, на котором у вас есть права отправлять письма без дополнительной авторизации.

Пример кода для отправки письма с локальной машины:
", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("127.0.0.1")){//Здесь должен быть адрес почтового сервера и порт, если требуется sc.Send(mm); } }

С использованием почтовых служб, таких как Gmail, Yandex, Mail.ru и т.д. всё то же самое, только добавляются параметры с авторизацией.

SMTP-сервер: smtp.gmail.com
Порт: 587
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "GmailPassword"); sc.Send(mm); } }

SMTP-сервер: smtp.yandex.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "YandexPassword"); sc.Send(mm); } }

SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "MailRuPassword"); sc.Send(mm); } }
Если у вас почтовый ящик на сервисе mail.ru заканчивается на inbox.ru, list.ru или bk.ru, то соответственно меняется и адрес SMTP-сервера (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).

Как вы видите, для того, чтобы использовать любой другой почтовый сервис в ваших программах, необходимо только выяснить адрес SMTP-сервера и порт, а также правила авторизации.

Необходимо также помнить, что практически все сторонние почтовые сервисы накладывают лимиты на количество отправленных писем в период времени.

Теги: email, отправка писем, smtp

мистер Олимпия 14 октября 2013 в 19:29

Программная отправка email, используя различные сервисы

  • .NET ,

Очень часто приходится сталкиваться с отправкой электронных писем из программного кода. За примерами далеко ходить не нужно.

Данная статья является подсказкой и не открывает ничего нового, но прежде чем её писать, посмотрел похожее в интернете и был довольно удивлён тому, что почти везде предлагают или не работающее или устаревшее решение, либо просто написано неграмотно.

Первое, что не стоит делать по этим примерам – это использовать System.Web.Mail, который уже давно устарел, а начиная с Visual Studio 2010 библиотеку System.Web даже и не добавить, не зная полного пути к соответствующей DLL.
Вместо него предлагается использовать библиотеку System.Net.
using System.Net; using System.Net.Mail;
Итак, самое простое, оно же самое важное и часто использующееся - это отправка письма со своего почтового сервера, на котором настроен SMTP-клиент. Как вы понимаете, сервер может быть как и тот, на котором работает приложение, так и удалённый, на котором у вас есть права отправлять письма без дополнительной авторизации.

Пример кода для отправки письма с локальной машины:
", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("127.0.0.1")){//Здесь должен быть адрес почтового сервера и порт, если требуется sc.Send(mm); } }

С использованием почтовых служб, таких как Gmail, Yandex, Mail.ru и т.д. всё то же самое, только добавляются параметры с авторизацией.

SMTP-сервер: smtp.gmail.com
Порт: 587
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 587)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "GmailPassword"); sc.Send(mm); } }

SMTP-сервер: smtp.yandex.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.yandex.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "YandexPassword"); sc.Send(mm); } }

SMTP-сервер: smtp.mail.ru
Порт: 25
using (MailMessage mm = new MailMessage("Name ", "[email protected]")){ mm.Subject = "Mail Subject"; mm.Body = "Mail Body"; mm.IsBodyHtml = false; using (SmtpClient sc = new SmtpClient("smtp.mail.ru", 25)){ sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential("[email protected]", "MailRuPassword"); sc.Send(mm); } }
Если у вас почтовый ящик на сервисе mail.ru заканчивается на inbox.ru, list.ru или bk.ru, то соответственно меняется и адрес SMTP-сервера (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).

Как вы видите, для того, чтобы использовать любой другой почтовый сервис в ваших программах, необходимо только выяснить адрес SMTP-сервера и порт, а также правила авторизации.

Необходимо также помнить, что практически все сторонние почтовые сервисы накладывают лимиты на количество отправленных писем в период времени.

Теги: email, отправка писем, smtp

Последнее обновление: 31.10.2015

Для отправки почты в среде интернет используется протокол SMTP (Simple Mail Transfer Protocol). Данный протокол указывает, как почтовые сервера взаимодействуют при передаче электронной почты.

Для работы с протоколом SMTP и отправки электронной почты в.NET предназначен класс SmtpClient из пространства имен System.Net.Mail .

Этот класс определяет ряд свойств, которые позволяют настроить отправку:

    Host: smtp-сервер, с которого производится отправление почты. Например, smtp.yandex.ru

    Port: порт, используемый smp-сервером. Если не указан, то по умолчанию используется 25 порт.

    Credentials: аутентификационные данные отправителя

    EnableSsl: указывает, будет ли использоваться протокол SSL при отправке

Еще одним ключевым классом, который используется при отправке, является MailMessage . Данный класс представляет собой отправляемое сообщение. Среди его свойств можно выделить следующие:

    Attachments: содержит все прикрепления к письму

    Body: непосредственно текст письма

    From: адрес отправителя. Представляет объект MailAddress

    To: адрес получателя. Также представляет объект MailAddress

    Subject: определяет тему письма

    IsBodyHtml: указывает, представляет ли письмо содержимое с кодом html

Используем эти классы и выполним отправку письма:

Using System; using System.Net; using System.IO; using System.Threading.Tasks; using System.Net.Mail; namespace NetConsoleApp { class Program { static void Main(string args) { // отправитель - устанавливаем адрес и отображаемое в письме имя MailAddress from = new MailAddress("[email protected]", "Tom"); // кому отправляем MailAddress to = new MailAddress("[email protected]"); // создаем объект сообщения MailMessage m = new MailMessage(from, to); // тема письма m.Subject = "Тест"; // текст письма m.Body = "

Письмо-тест работы smtp-клиента

"; // письмо представляет код html m.IsBodyHtml = true; // адрес smtp-сервера и порт, с которого будем отправлять письмо SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // логин и пароль smtp.Credentials = new NetworkCredential("[email protected]", "mypassword"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); } } }

Для отправки применяется метод Send() , в который передается объект MailMessage.

Также мы можем использовать асинхронную версию отправки с помощью метода SendMailAsync:

Using System; using System.Net; using System.IO; using System.Threading.Tasks; using System.Net.Mail; namespace NetConsoleApp { class Program { static void Main(string args) { SendEmailAsync().GetAwaiter(); Console.Read(); } private static async Task SendEmailAsync() { MailAddress from = new MailAddress("[email protected]", "Tom"); MailAddress to = new MailAddress("[email protected]"); MailMessage m = new MailMessage(from, to); m.Subject = "Тест"; m.Body = "Письмо-тест 2 работы smtp-клиента"; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.Credentials = new NetworkCredential("[email protected]", "mypassword"); smtp.EnableSsl = true; await smtp.SendMailAsync(m); Console.WriteLine("Письмо отправлено"); } } }

Добавление вложений

К письму мы можем прикрепить вложения с помощью свойства Attachments. Каждое вложение представляет объект System.Net.Mail.Attachment :

MailAddress from = new MailAddress("[email protected]", "Tom"); MailAddress to = new MailAddress("[email protected]"); MailMessage m = new MailMessage(from, to); m.Attachments.Add(new Attachment("D://temlog.txt"));

Здравствуйте. Поскольку графомания у меня прогрессирует, решил я добавить еще одну статью. Статья будет, как всегда, с примерами на C#, но более-менее умелый VB"шник с легкостью перепишет весь код под VB.NET.

Начнем, пожалуй

Для отправки E-Mail нам нужно воспользоваться тремя объектами. System.Net.Mail.SmtpClient для отправки сообщения, System.Net.Mail.MailMessage для представления сообщения, и System.Net.NetworkCredential для авторизации.

Создадим клиент:

Var client = new SmtpClient("$Mail-Server-Address$", $Mail-Server-Port$);

Референция конструктора:

SmtpClient(string host, int port);

Создадим экземпляр класса MailMessage:

Var msg = new MailMessage("from", "to");

Теперь зададим тему и содержимое письма (к слову говоря, все можно задать и в конструкторе). А также логин и пароль smtp-клиенту. Затем отправим письмо методом Send нашего объекта client:

Var client = new SmtpClient("smtp.yandex.ru"); var msg = new MailMessage("from", "to"); msg.Subject = "My test message"; msg.Body = "Hello, my friend! Just imagine, that I just written a incredible program to send this meaningless letter to you a billion times only by several clicks!"; msg.SubjectEncoding = Encoding.UTF8; msg.BodyEncoding = Encoding.UTF8; // приоритет msg.Priority = MailPriority.High; // тело письма в html? msg.IsBodyHtml = false; client.Credentials = new NetworkCredential("login", "password"); client.Send(msg);

Вот и все. Не забудьте все необходимые данные указать правильно.


Комментарии ()

ruslang02 30

CoolHacker, можно у тебя взять этот код для 3 части веб-броузера?

Coolhacker 770 ruslang02 30

Спасибо, я его буду использовать для отправки ссылок по e-mail
как в FireFox

LetSevI 10

Читайте также: