Отправка E-Mail. Программная отправка email, используя различные сервисы Создаем файл, принимающий данные из HTML формы

Последнее обновление: 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"));

Отправка сообщений на почту в Visual Studio 2013 C++


Казалось бы, зачем изобретать велосипед? Есть множество программ, которые могут отправлять письма на электронную почту: как платных, так и бесплатных. В этих программах можно отправлять письма не одному, а сразу многим получателям. Однако, все же добавление получателей происходит вручную, адреса их вбивать муторно, особенно если их не один десяток. А если требуется регулярно отправлять сотни писем? Причем я не говорю о спаме, а имею в виду совершенно легальные рассылки?

В этом случае на помощь может придти специальная программа. В этой статье не будет такой целой программы, а будет небольшая программа, которая просто отправляет одно письмо на один адрес. При этом происходит авторизация по smpt, то есть письмо отправляется не от неизвестно откуда, а со вполне реального почтового ящика. В примере используется почта mail.ru.

Итак, вот текст программы.

#include "stdafx.h" #using using namespace System; using namespace System::Net; using namespace System::Net::Mail; using namespace System::Net::Mime; using namespace System::Threading; using namespace System::ComponentModel; int main() { SmtpClient ^Smtp = gcnew SmtpClient("smtp.mail.ru", 25); Smtp->Credentials = gcnew NetworkCredential("ваша_почта@mail.ru", "ваш_пароль"); Smtp->EnableSsl = true; MailMessage ^Message = gcnew MailMessage(); Message->From = gcnew MailAddress("ваша_почта@mail.ru"); Message->To->Add(gcnew MailAddress("почта_получателя@yandex.ru")); Message->Subject = "Заголовок"; Message->Body = "Сообщение"; Smtp->Send(Message); } Стоит сразу оговориться, какие условия должны быть соблюдены: проект в Visual Studio 2013 создается не только для C++, он еще должен быть консольным, поддерживать CLR-среду. Рассмотрим подробнее, что происходит и в какой строке в данной программе C++, которая отсылает сообщение на выбранный ящик электронной почты.

С 1-й по 8-ю строчки идет подключение заголовочных файлов и пространства имен. 13 строка инициализирует smpt-сервер. Для яндекса и гугла используются свои: smtp.yandex.ru и smtp.google.ru соответственно. Число 25 в этой строке - это порт. В том случае, если ваш провайдер блокирует это порт или не получается соединиться, то можно попробовать такие варианты 465 или 587. В 14 строке необходимо ввести свой ящик электронной почты (с которого пойдет письмо) и пароль от этого ящика.

Особое внимание обращаем на 15 строку - в этой подключается безопасный протокол ssl. Это в обязательном порядке требуется для яндекса и майла. 17 строка создает сообщение; в 18 - обратный адрес; в 19 - адрес получателя; 20 - заголовок письма; 21 - сообщение; в 22 строке производится отправка. Если после запуска программы не выскакивает никаких ошибок, ничего не происходит, то все нормально - проверяйте ящик получателя.

Если у вас есть хоть какие-то небольшие навыки программирования, то доделать остальное будет совсем несложно. Надо создать окно, форму, в форме несколько полей ввода, заставить программу подгружать список адресов из, к примеру, текстового фала или базы MS Access. Если же для вас это еще не совсем понятно, то в следующих статьях я расскажу обо всем подробнее.

Любые вопросы по программам на C++, java, скриптам на java script и php, созданию сайтов и верстке, вы можете задать по почте [email protected] или стучитесь в скайп up777up2. За очень умеренную плату я вам с удовольствием помогу.

Дополнение

Один из посетителей блога задал вопрос: а как прикрепить файл в данной программе? Ответ прост: надо добавить несколько строк кода в приложение:

String^ att = L"att.xls"; Attachment^ dan = gcnew Attachment(att, MediaTypeNames::Application::Octet); Message->Attachments->Add(dan); В первой строке определяем прикрепляемый файл, во второй определяем данные и приказываем не интерпретировать их (заголовок Content-Type протокола MIME) и в третьей - добавляем его к письму. Вот и все.

Командир судна 14 октября 2013 в 19:29

Программная отправка 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

Здравствуйте. Поскольку графомания у меня прогрессирует, решил я добавить еще одну статью. Статья будет, как всегда, с примерами на 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
 
Статьи по теме:
Введение в пакетный менеджер NPM для начинающих
Последнее обновление: 18.11.2018 Кроме встроенных и кастомных модулей Node.js существует огромный пласт различных библиотек и фреймворков, разнообразных утилит, которые создаются сторонними производителями и которые также можно использовать в проекте, нап
Сервисные коды для Samsung GT
Секретные коды (недокументированные инженерные коды) для мобильных телефонов Samsung. Введите *2767*MVT# (*2767*688#) что бы сделать E2P MVT Reset Этот код действительно работает! Убирает все SP lock без кабеля! Включая: -Network lock -Subnet lock
Безопасность беспроводных сетей
По всей видимости, нет смысла говорить о том, что большинство пользователей сталкивалось с ситуацией, когда при попытке подключения к беспроводной сети система выдает требование ввода так называемого ключа безопасности сети.О том, что это такое, для чего
Голосовое приложение Google Now
Когда Google впервые выпустил Google Now, он был отмечен пользователями Android по всем направлениям. Однако, когда произошли изменения в Google Feed, эти изменения были менее приняты. Но Лента новостей это отличная вещь, если Вы просто потратите время на