Отправка Email на Java: библиотеки JavaMail и Simple Java Mail

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

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

Начать курс

Отправка 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>
    &                    

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