Для новых проектов Microsoft НЕ рекомендует использовать данный API и взаимен рекомендует использовать сторонние библиотеки, например, MailKit.
Для отправки почты в среде интернет используется протокол 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("somemail@gmail.com", "Tom"); // кому отправляем MailAddress to = new MailAddress("somemail@yandex.ru"); // создаем объект сообщения MailMessage m = new MailMessage(from, to); // тема письма m.Subject = "Тест"; // текст письма m.Body = "<h2>Письмо-тест работы smtp-клиента</h2>"; // письмо представляет код html m.IsBodyHtml = true; // адрес smtp-сервера и порт, с которого будем отправлять письмо SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // логин и пароль smtp.Credentials = new NetworkCredential("somemail@gmail.com", "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("somemail@gmail.com", "Tom"); MailAddress to = new MailAddress("somemail@yandex.ru"); MailMessage m = new MailMessage(from, to); m.Subject = "Тест"; m.Body = "Письмо-тест 2 работы smtp-клиента"; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.Credentials = new NetworkCredential("somemail@gmail.com", "mypassword"); smtp.EnableSsl = true; await smtp.SendMailAsync(m); Console.WriteLine("Письмо отправлено"); } } }
К письму мы можем прикрепить вложения с помощью свойства Attachments. Каждое вложение представляет объект System.Net.Mail.Attachment:
MailAddress from = new MailAddress("somemail@gmail.com", "Tom"); MailAddress to = new MailAddress("somemail2@yandex.ru"); MailMessage m = new MailMessage(from, to); m.Attachments.Add(new Attachment("D://temlog.txt"));