Отправка email на Java: полное руководство по JavaMail и Jakarta Mail

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

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

Начать курс

Отправка email на Java с помощью Jakarta Mail (JavaMail)

Отправка электронных писем — одна из самых востребованных задач в корпоративных приложениях на Java: регистрация пользователей, уведомления, восстановление паролей и маркетинговые рассылки. Долгое время стандартом де-факто была библиотека JavaMail, но после перехода Java EE в Eclipse Foundation она была переименована в Jakarta Mail. В этом руководстве мы подробно разберём, как настроить и использовать Jakarta Mail для отправки email на Java.

Что такое Jakarta Mail?

Jakarta Mail (ранее JavaMail) — это API для отправки, получения и обработки электронных писем в Java-приложениях. Библиотека поддерживает протоколы SMTP, POP3 и IMAP, а также MIME-стандарт, что позволяет отправлять как простые текстовые письма, так и сообщения с вложениями, HTML-разметкой и изображениями.

Установка и подключение зависимостей

Для работы с Jakarta Mail необходимо добавить зависимость в ваш проект. Если вы используете Maven, добавьте в pom.xml:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>

Для Gradle:

implementation 'com.sun.mail:jakarta.mail:2.0.1'

Важно: Если вы используете Java 8 или старше, убедитесь, что версия Jakarta Mail совместима — для Java 8 подойдёт версия 1.6.x (например, javax.mail:javax.mail-api:1.6.2).

Базовая отправка email на Java

Рассмотрим самый простой пример — отправка текстового письма через SMTP-сервер Gmail. Для этого потребуется:

  • Учётная запись Gmail (или другого почтового сервиса)
  • Пароль приложения (если включена двухфакторная аутентификация)
  • Разрешение на доступ к менее защищённым приложениям (если необходимо)

Код отправки:

import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.Properties;

public class EmailSender {
    public static void main(String[] args) {
        // 1. Настройка свойств подключения
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");

        // 2. Аутентификация
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your-email@gmail.com", "your-app-password");
            }
        });

        try {
            // 3. Создание письма
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("from-email@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("recipient@example.com"));
            message.setSubject("Тестовое письмо из Java");
            message.setText("Привет! Это письмо отправлено с помощью Jakarta Mail.");

            // 4. Отправка
            Transport.send(message);
            System.out.println("Письмо успешно отправлено!");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

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

Часто требуется отправить письмо с форматированием (HTML) или прикрепить файл. Для этого используется MimeMultipart и MimeBodyPart.

HTML-письмо

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Привет!</h1><p>Это HTML-письмо из Java.</p>", "text/html; charset=utf-8");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(htmlPart);

message.setContent(multipart);

Письмо с вложением

MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(new File("/path/to/file.pdf"));
attachmentPart.setFileName("документ.pdf");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(new MimeBodyPart()); // текстовая часть
multipart.addBodyPart(attachmentPart);

message.setContent(multipart);

Работа с разными SMTP-серверами

Помимо Gmail, вы можете использовать любой SMTP-сервер. Ниже приведены настройки для популярных сервисов:

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