Отправка 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-сервер. Ниже приведены настройки для популярных сервисов:
- Yandex:
smtp.yandex.ru, порт 465 (SSL) или 587 (TLS) - Mail.ru:
Также в библиотеке
HTTP-клиент для Kotlin: Топ библиотек для работы с сетью
Rate Limiting в Go (Golang): библиотеки, паттерны и примеры реализации
Eloquent ORM для PHP: полное руководство с примерами
WireMock.Net для C# (.NET): полное руководство с примерами