Работа с электронной почтой

Отправка почты. SmtpClient

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

Для новых проектов 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"));
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850