— А вот и снова я. И снова у меня для тебя небольшой сюрприз.
Сегодня я научу тебя, как отправить email с помощью Java.
Начнем с хорошей новости – в Java есть родная библиотека для работы с почтой.
А плохая новость состоит в том, что эта библиотека входит в состав Java EE, но не в Java SE.
Java EE – это расширенная версия JavaSE, куда входят классы, которые нужны для более навороченных приложений. Как работа с почтой, например.
— Ясно и что же делать?
— Ну, предлагаю, просто скачать данную библиотеку и все.
Воспользуемся мудростью Intellij IDEA.
Создай класс и добавь в раздел импорта пакеты javax.mail.* и javax.mail.internet.*
Затем жми Alt+Enter и пусть IDEA все сделает за тебя:
Так выглядит предложение скачать недостающие библиотеки
Так выглядит окно закачки.
Ну, или его можно скачать по этой ссылке.
— Скачал. Что дальше?
— Тебе надо зайти в настройки проекта (Open Module Settings) в раздел Libraries и добавить туда jar-файлы из скачанного архива.
— Готово.
— Строки перестали светиться красным?
import javax.mail.internet.MimeMessage;
import javax.mail.internet.*;
— Ага.
— Отлично, тогда продолжим.
Отправка письма состоит из трех частей.
1) Установить соединение с почтовым сервером, через который будет отправлено письмо
2) Создать письмо, добавить вложения если надо
3) Отправить письмо.
Начнём сначала.
Чтобы отравить email в Java, для начала нужно установить соединение с почтовым сервером.
Лучше всего, чтобы там у тебя уже был почтовый аккаунт. Современные почтовые серверы не хотят рассылать сообщения анонимных пользователей, опасаясь спама.
Создать соединение с сервером можно одним вызовом метода javax.mail.Session.getDefaultInstance:
Properties props = new Properties();
//тут надо загрузить данные в объект props
Session session = Session.getDefaultInstance(props);
Но этому методу нужно передать настройки почтового сервера.
Например, можно создать файл Mail.properties и заполнить его нужными настройками, например, как-то так:
mail.transport.protocol=smtp
mail.host=smtp.gmail.com
mail.smtp.auth=true
mail.user=arnold@gmail.com
mail.password=strong
Главное – это задать protocol и host, но возможно понадобятся дополнительные настройки, в зависимости от режима работы почтового сервера.
А можно просто добавить эти данные в объект типа Properties прямо в Java-коде.
Пример:
Properties props = new Properties();
props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.host", “smtp.gmail.com”);
props.put("mail.smtps.auth", "true");
props.put("mail.smtp.sendpartial", "true");
Session session = Session.getDefaultInstance(props);
Отлично, сессия у нас есть, теперь давай создадим почтовое сообщение.
Сделать это легче, чем кажется на первый взгляд. Пример:
//создаем сообщение
MimeMessage message = new MimeMessage(session);
//устанавливаем тему письма
message.setSubject("тестовое письмо!");
//добавляем текст письма
message.setText("Asta la vista, baby!");
//указываем получателя
message.addRecipient(Message.RecipientType.TO, new InternetAddress("stalone@gmail.com"));
//указываем дату отправления
message.setSentDate(new Date());
— В качестве получателя можно указать любой email?
— Ага. Более того. Можно указать и отправителя. Любой email-адрес.
— Круто! Я это учту.
— Теперь осталось отправить это сообщение.
Сначала мы авторизуемся на сервере, а затем отправим свое сообщение. Всего две строчки кода:
//логин и пароль gmail пользователя
String userLogin = “arnold@gmail.com”;
String userPassword = “strong”;
//авторизуемся на сервере:
Transport transport = session.getTransport();
transport.connect("smtp.gmail.com", 465, userLogin, userPassword);
//отправляем сообщение:
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
— Как интересно. Надо пробовать.
— Если тебе интересно, как отправить письмо с вложениями, то можешь почитать про это тут.
Если хочешь разобраться, как еще и получать почту, милости прошу сюда.
— Ух ты, какие полезные ссылки.
Да, я теперь свой почтовый клиент сделаю. Круто!
Спасибо, Элли!