Отправка Email на Java: обзор библиотек и примеры кода
Отправка электронных писем — одна из базовых задач в корпоративных и веб-приложениях. В экосистеме Java существует несколько проверенных инструментов для работы с SMTP-протоколом. В этой статье мы рассмотрим две основные библиотеки: стандартную JavaMail (Jakarta Mail) и более современную Simple Java Mail. Вы узнаете, как настроить подключение к SMTP-серверу, отправить простое письмо, добавить HTML-разметку и вложения.
1. Jakarta Mail (ранее JavaMail API)
Jakarta Mail (прежнее название — JavaMail API) — это официальная спецификация для работы с электронной почтой в Java. Она входит в состав Jakarta EE и может использоваться в любых Java-проектах. Для подключения к SMTP-серверу требуется добавить зависимости в pom.xml (Maven) или build.gradle (Gradle).
Подключение зависимости (Maven)
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Пример: отправка простого текстового письма
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class EmailSender {
public static void main(String[] args) {
final String username = "your-email@gmail.com";
final String password = "your-app-password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("recipient@example.com"));
message.setSubject("Тестовое письмо с Java");
message.setText("Привет! Это письмо отправлено с помощью JavaMail API.");
Transport.send(message);
System.out.println("Письмо отправлено успешно!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
- Properties — настройки SMTP: хост, порт, аутентификация, TLS.
- Session — сессия с сервером, создаётся с аутентификатором.
- MimeMessage — объект письма, в котором задаются отправитель, получатель, тема и тело.
- Transport.send() — отправка письма через SMTP.
Отправка HTML-письма с вложением
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class HtmlEmailWithAttachment {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("your-email@gmail.com", "your-password");
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("your-email@gmail.com"));
message.setRecipients(Message.RecipientType.TO, "recipient@example.com");
message.setSubject("HTML-письмо с вложением");
// HTML-часть
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Привет!</h1><p>Это HTML-письмо с вложением.</p>", "text/html; charset=utf-8");
// Вложение (файл)
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(new File("document.pdf"));
attachmentPart.setFileName("document.pdf");
// Объединяем части в multipart
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(htmlPart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("HTML-письмо с вложением отправлено!");
}
}
2. Simple Java Mail — удобная альтернатива
Simple Java Mail — это библиотека с открытым исходным кодом, которая упрощает отправку писем за счёт fluent-интерфейса. Она избавляет от необходимости вручную настраивать Properties и работать с MimeBodyPart. Подходит для быстрой интеграции.
Подключение (Maven)
<dependency>
& Также в библиотеке
Laravel Telescope для PHP: полное руководство с примерами
Парсинг HTML в Rust: библиотеки и примеры для веб-скрапинга
Отправка SMS на Java: Обзор и примеры использования API библиотек (Twilio, Nexmo)