Постановка задачи
Целью статьи является попытка реализовать работу с SMTP сервером с помощью средств языка C#. Программа должна осуществлять доступ к SMTP серверу, обращаясь к нему для отправки e-mail сообщений прямо из кода программы на выбраные e-mail адреса.
Немного теории
SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
SMTP используется для отправки почты от пользователей к серверам и между серверами для дальнейшей пересылки к получателю. Для приёма почты, почтовый клиент должен использовать протоколы POP3 или IMAP. Работа с SMTP происходит непосредственно на сервере получателя. Поддерживает функции: установление соединения, аутентификация, передача данных.
Существует одна проблема при огранизации работы с этим протаколом, дело в том, что все SMTP сервера требуют авторизации, для отправки почты, а некоторые ещё и требуют некоторую спецификацию, заключающую в том, что бы сначала получить почту, а потом только отправить. И порой бывает, что везде по разному. Работая напрямую с SMTP сервером будет достаточно сложно это учесть, поэтому, лучше воспользваться специальными библиотеками.
Основные моменты реализации отправки Email на C#
В Microsoft .NET Framework есть специальная библиотека, через которую и можно отправить электронную почту E-mail.
{reklama}
Итак начнём, для начало нужно подключить пространства имён:
//E-mail using
using System.Web;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
Для отправки письма в .NetFramework средствами языка C# существуют классы MailMessage и SmtpClient, а если необходимо к письму прикрепить файл, то Вам поможат методы класса Attachmen. Итак, посмотрим на примере как именно это всё реализовуется:
//Авторизация на SMTP сервере
SmtpClient Smtp = new SmtpClient("smtp.mail.ru", 25);
Smtp.Credentials = new NetworkCredential("login", "pass");
Smtp.EnableSsl = false;
//Формирование письма
MailMessage message = new MailMessage();
message.From = new MailAddress("адрес отправителя");
message.To.Add(new MailAddress("адрес получателя"));
message.Subject = "Заголовок";
message.Body = "Сообщение";
Smtp.Send(Message);//отправка
В данном примере в качестве службы для отправки почты использовалась mail.ru. Если Вы хотите использовать yandex или gmail, то нужно поменять адресс SMTP-сервера и порт для отправки:
Yandex - SMTP-сервер: smtp.yandex.ru; Порт: 25;
Gmail - SMTP-сервер: smtp.gmail.com; Порт: 58;
Если у вас почтовый ящик на сервисе mail.ru заканчивается на inbox.ru, list.ru или bk.ru, то соответственно меняется и адрес SMTP-сервера (smtp.inbox.ru, smtp.list.ru и smtp.bk.ru).
Как вы видите, для того, чтобы использовать любой другой почтовый сервис в ваших программах, необходимо только выяснить адрес SMTP-сервера и порт, а также правила авторизации. Необходимо также помнить, что практически все сторонние почтовые сервисы накладывают лимиты на количество отправленных писем в период времени.
Прикрепить файл к письму особого труда не составит, всего пару строк добавить и всё:
//Прикрепляем файл
string file = "путь к файлу";
Attachment attach = new Attachment(file, MediaTypeNames.Application.Octet);
// Добавляем информацию для файла
ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
Message.Attachments.Add(attach);
Пример простого Email клиента на C#