Отправка почты. SmtpClient
Для отправки почты в среде интернет используется протокол 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
Используем эти классы и выполним отправку письма:
Для отправки применяется метод Send() , в который передается объект MailMessage.
Также мы можем использовать асинхронную версию отправки с помощью метода SendMailAsync :
Очень часто приходится сталкиваться с отправкой электронных писем из программного кода. За примерами далеко ходить не нужно.
Данная статья является подсказкой и не открывает ничего нового, но прежде чем её писать, посмотрел похожее в интернете и был довольно удивлён тому, что почти везде предлагают или не работающее или устаревшее решение, либо просто написано неграмотно.
Первое, что не стоит делать по этим примерам – это использовать System.Web.Mail, который уже давно устарел, а начиная с Visual Studio 2010 библиотеку System.Web даже и не добавить, не зная полного пути к соответствующей DLL.
Вместо него предлагается использовать библиотеку System.Net.
Итак, самое простое, оно же самое важное и часто использующееся — это отправка письма со своего почтового сервера, на котором настроен SMTP-клиент. Как вы понимаете, сервер может быть как и тот, на котором работает приложение, так и удалённый, на котором у вас есть права отправлять письма без дополнительной авторизации.
Пример кода для отправки письма с локальной машины:
С использованием почтовых служб, таких как Gmail, Yandex, Mail.ru и т.д. всё то же самое, только добавляются параметры с авторизацией.
SMTP-сервер: smtp.gmail.com
Порт: 587
SMTP-сервер: smtp.yandex.ru
Порт: 25
SMTP-сервер: smtp.mail.ru
Порт: 25
Если у вас почтовый ящик на сервисе mail.ru заканчивается на inbox.ru, list.ru или bk.ru, то соответственно меняется и адрес SMTP-сервера (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).
Как вы видите, для того, чтобы использовать любой другой почтовый сервис в ваших программах, необходимо только выяснить адрес SMTP-сервера и порт, а также правила авторизации.
Необходимо также помнить, что практически все сторонние почтовые сервисы накладывают лимиты на количество отправленных писем в период времени.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Сегодня мы поговорим о том, как отправить email, используя язык программирования C#. В .Net FrameWork, начиная с версии 1.1, есть встроенные средства по отправке писем.
Классы по работе с email находятся в пространстве имен System.Net.Mail. Они реализуют такие полезные функции, как:
- отправка почты, в том числе нескольким адресатам;
- отправка копии и скрытой копии письма;
- вложение файла к письму;
- использование HTML-кода в теле письма.
В данной статье рассмотрим основные классы работы с mail и напишем небольшой код отправки письма C# mail send. В качестве SMTP-сервера будем использовать сервер GMail. Он использует SSL протокол, обеспечивающий безопасный способ соединения между клиентом и сервером.
В C# отправка почты в основном реализуется двумя классами: MailMessage и SmtpClient. MailMessage содержит сведения о заголовке и теле письма, отправителе и получателях. SmtpClient хранит информацию об SMTP-сервере: хост, порт, наличие SSL и т.д.
C# mail send
Рассмотрим основные классы работы с письмами в C#. Пространство имен System.Net.Mail содержит несколько нужных нам классов:
MailMessage
Основной класс работы с письмами в .Net Framework. Мы будем использовать следующие свойства класса:
- From: адрес отправителя в виде экземпляра класса MailAddress;
- To: коллекция адресов получателей;
- Subject: тема или заголовок письма типа String;
- Body: Тело письма, т.е. само сообщение;
- Attachments: коллекция присоединенных к письму файлов. При необходимости вложить в письмо файл, нужно добавить его Attachment в список присоединенных файлов Attachments.
SmtpClient
Позволяет отправлять email по протоколу SMTP (Simple Mail Transfer Protocol). Воспользуемся SMTP-сервером от Google smtp.gmail.com. Нам понадобятся следующие свойства класса:
- Host: имя SMTP-сервера для отправки email;
- Port: порт, используемый для SMTP-транзакций. По умолчанию равен 25, что соответствует незашифрованному каналу. Google свои каналы шифрует, поэтому мы будет использовать порт 587;
- EnableSsl: показывает, используется ли SSL протокол для шифрования трафика. Google требует протокол SSL, поэтому установим это свойство в True;
- Credentials: предоставляет учетные данные для проверки подлинности на основе пароля;
- DeliveryMethod: метод обработки исходящих сообщений электронной почты. У нас этот параметр будет равен SmtpDeliveryMethod.Network, что означает передачу email по сети на SMTP-сервер.
Мы будем использовать метод Send для отправки нашего письма на SMTP-сервер для дальнейшей доставки.
Attachment
Класс Attachment реализует присоединение файла к письму. Если хотите переслать файл, нужно добавить Attachment вашего файла в список MailMessage.Attachments. В качестве параметра в класс Attachment можно передать имя файла или его Stream.
При отправке письма с присоединенным файлом желательно сжимать его в архив. Это увеличит скорость передачи. К тому же, если передать в одном письме тысячи файлов по отдельности, то получатель увидит не очень приятное зрелище: огромный список присоединенных файлов. Я использую для сжатия бесплатный архиватор 7-zip. Здесь можно посмотреть пример добавления в архив 7-zip на C#.