Отправка email на C# (.NET) с использованием SmtpClient и MailKit

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка email на C# (.NET): от SmtpClient до MailKit

Отправка электронных писем — одна из ключевых задач при разработке веб-приложений, сервисов уведомлений и корпоративных систем. В экосистеме .NET есть как встроенные средства, так и сторонние библиотеки, которые упрощают работу с SMTP, SSL/TLS и сложными сценариями. В этой статье мы подробно разберём, как отправить email на C#, используя классический SmtpClient и современную библиотеку MailKit.

1. Встроенный SmtpClient (System.Net.Mail)

Класс SmtpClient доступен в .NET Framework и .NET Core/5+ (с некоторыми ограничениями). Он позволяет быстро настроить отправку письма через любой SMTP-сервер.

Базовый пример отправки email

using System.Net;
using System.Net.Mail;

var smtpClient = new SmtpClient("smtp.gmail.com")
{
    Port = 587,
    Credentials = new NetworkCredential("your_email@gmail.com", "your_app_password"),
    EnableSsl = true
};

var mailMessage = new MailMessage
{
    From = new MailAddress("your_email@gmail.com"),
    Subject = "Тестовое письмо из C#",
    Body = "Привет! Это сообщение отправлено через SmtpClient.",
    IsBodyHtml = false
};

mailMessage.To.Add("recipient@example.com");

try
{
    smtpClient.Send(mailMessage);
    Console.WriteLine("Письмо отправлено успешно!");
}
catch (Exception ex)
{
    Console.WriteLine($"Ошибка отправки: {ex.Message}");
}

Важно: Для Gmail потребуется пароль приложения, а не обычный пароль. Для других сервисов (Yandex, Mail.ru) проверьте настройки SMTP.

Отправка HTML-письма с вложением

var message = new MailMessage();
message.From = new MailAddress("sender@example.com");
message.To.Add("user@example.com");
message.Subject = "Отчёт за месяц";
message.IsBodyHtml = true;
message.Body = "<h2>Ежемесячный отчёт</h2><p>Во вложении PDF-файл.</p>";

// Добавляем вложение
var attachment = new Attachment(@"C:\Reports\report.pdf");
message.Attachments.Add(attachment);

using (var client = new SmtpClient("smtp.example.com", 587))
{
    client.Credentials = new NetworkCredential("login", "password");
    client.EnableSsl = true;
    client.Send(message);
}

Вложения могут быть любого типа: изображения, документы, архивы. Для отправки из памяти используйте MemoryStream.

2. Асинхронная отправка

В современных приложениях желательно не блокировать поток. Используйте SendMailAsync:

public async Task SendEmailAsync()
{
    using var client = new SmtpClient("smtp.example.com", 587);
    client.Credentials = new NetworkCredential("login", "password");
    client.EnableSsl = true;

    var message = new MailMessage("from@example.com", "to@example.com")
    {
        Subject = "Асинхронная отправка",
        Body = "Это письмо отправлено асинхронно."
    };

    await client.SendMailAsync(message);
    Console.WriteLine("Отправлено асинхронно!");
}

3. Проблемы SmtpClient и альтернативы

Несмотря на простоту, SmtpClient имеет недостатки:

  • Устаревший API (в .NET 5+ помечен как устаревший);
  • Плохая поддержка современных протоколов аутентификации (OAuth2);
  • Отсутствие встроенной поддержки S/MIME и расширенных сценариев.

Поэтому Microsoft рекомендует использовать сторонние библиотеки, такие как MailKit.

4. MailKit — современная библиотека для работы с email

MailKit — это кроссплатформенная библиотека с открытым исходным кодом. Она поддерживает SMTP, POP3, IMAP, SSL/TLS, асинхронность, OAuth2 и многое другое.

Установка через NuGet

dotnet add package MailKit
// или через Package Manager:
Install-Package MailKit

Пример отправки email с MailKit

using MailKit.Net.Smtp;
using MimeKit;

var message = new MimeMessage();
message.From.Add(new MailboxAddress("Отправитель", "sender@example.com"));
message.To.Add(new MailboxAddress("Получатель", "recipient@example.com"));
message.Subject = "Письмо через MailKit";

var bodyBuilder = new BodyBuilder
{
    HtmlBody = "<h1>Привет!</h1><p>Это HTML-                    

Рекомендаций