Отправка Email на C# (.NET): библиотека System.Net.Mail

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

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

Начать курс

Отправка Email на C# (.NET): полное руководство по System.Net.Mail

В современной разработке на платформе .NET задача отправки электронных писем решается стандартной библиотекой System.Net.Mail. Этот встроенный инструмент не требует установки дополнительных пакетов NuGet и предоставляет гибкий API для создания и отправки почтовых сообщений через SMTP-сервер. В данной статье мы подробно разберём все ключевые компоненты библиотеки, рассмотрим примеры кода, обработку ошибок и лучшие практики.

Основные классы библиотеки

Библиотека System.Net.Mail включает три главных класса:

  • SmtpClient — отвечает за подключение к SMTP-серверу и отправку сообщений.
  • MailMessage — представляет само письмо: тему, тело, отправителя, получателей, вложения.
  • Attachment — позволяет добавлять к письму файлы.

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

Рассмотрим простейший сценарий: отправка текстового письма через SMTP-сервер Gmail. Обратите внимание, что для работы с Gmail потребуется пароль приложения (App Password) из-за двухфакторной аутентификации.

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

class Program
{
    static void Main()
    {
        var fromAddress = new MailAddress("your@gmail.com", "Ваше Имя");
        var toAddress = new MailAddress("recipient@example.com", "Получатель");
        const string fromPassword = "ваш_пароль_приложения";
        const string subject = "Тестовое письмо из .NET";
        const string body = "Привет! Это письмо отправлено с помощью C#.";

        var smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };

        using (var message = new MailMessage(fromAddress, toAddress)
        {
            Subject = subject,
            Body = body
        })
        {
            smtp.Send(message);
        }

        Console.WriteLine("Письмо отправлено!");
    }
}

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

Часто требуется отправить письмо в формате HTML с прикреплёнными файлами. Для этого установите свойство IsBodyHtml = true и используйте коллекцию Attachments.

using (var message = new MailMessage(fromAddress, toAddress))
{
    message.Subject = "Отчёт за месяц";
    message.IsBodyHtml = true;
    message.Body = "<h2>Здравствуйте!</h2><p>Ваш отчёт во вложении.</p>";

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

    smtp.Send(message);
}

Асинхронная отправка (async/await)

Для неблокирующей отправки в современных приложениях используйте SendMailAsync. Это особенно важно в веб-приложениях (ASP.NET Core) и десктопных программах с UI.

public async Task SendEmailAsync()
{
    using (var message = new MailMessage(fromAddress, toAddress)
    {
        Subject = "Асинхронная отправка",
        Body = "Письмо отправлено асинхронно"
    })
    {
        await smtp.SendMailAsync(message);
    }
}

Обработка исключений

При работе с почтовыми серверами возможны ошибки: неверные учётные данные, таймауты, проблемы с DNS. Всегда оборачивайте отправку в try-catch.

try
{
    smtp.Send(message);
    Console.WriteLine("Успешно отправлено.");
}
catch (SmtpException ex)
{
    Console.WriteLine($"SMTP ошибка: {ex.StatusCode} - {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Общая ошибка: {ex.Message}");
}

Настройка SMTP для популярных провайдеров

В таблице ниже приведены параметры для распространённых почтовых сервисов (используйте их в свойствах SmtpClient).

  • Gmail: Host = smtp.gmail.com, Port = 587, SSL = true (требуется пароль приложения)
  • Yandex: Host = smtp.yandex.ru, Port = 465, SSL = true
  • Mail.ru: Host = smtp.mail.ru, Port = 465, SSL = true
  • Outlook/Hotmail: Host = smtp-mail.outlook.com, Port = 587, SSL = true

Лучшие практики

Чтобы ваш код был надёжным и безопасным, следуйте этим рекомендациям:

  • Никогда

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