Вільно розповсюджувана бібліотека JavaMail призначена для підключення до поштових серверів з метою отримання і відправки електронної пошти з використанням протоколів SMTP. POP3 і IMAP. Бібліотека дозволяє відправляти повідомлення з вкладеннями і видаляти їх на поштовому сервері.
Протоколи JavaMail API
- SMTP (Simple Mail Transfer Protocol простий протокол передачі пошти) - це широко використовуваний мережевий протокол для передачі електронної пошти в мережах TCP / IP. Електронні поштові сервери використовують протокол SMTP для відправки та отримання поштових повідомлень. Клієнтські поштові програми зазвичай використовують SMTP тільки для відправки повідомлень на поштовий сервер і для ретрансляції з використанням порту 25 (465 для SSL). Тобто протокол SMTP застосовують для передачі вихідної пошти.
- IMAP (Internet Message Access Protocol) - протокол прикладного рівня для доступу до електронної пошти. Протокол IMAP надає користувачеві широкі можливості для роботи з поштовими скриньками, розташованими на віддаленому сервері. Поштова програма, яка використовує даний протокол, отримує доступ до сховища кореспонденції на сервері так, як ніби ця кореспонденція розташована на комп'ютері одержувача. Електронними листами можна керувати з комп'ютера користувача без пересилки файлів по мережі. Протокол IMAP використовує транспортний протокол TCP і прослуховує порт 143.
- POP3 (Post Office Protocol Version 3 протокол поштового відділення 3-ї версії) - це стандартний мережевий протокол прикладного рівня, який використовується клієнтами електронної пошти для отримання пошти з віддаленого сервера по TCP / IP-з'єднанню. Протокол POP3 підтримує прості вимоги «завантаж-і-видали» для доступу до віддалених поштових скриньках. Сервер POP3 прослуховує порт 110.
Відправлення повідомлення по протоколу SMTP
Конструктор класу SendEmail.java, настройка SMTP SSL
Конструктор об'єкта повідомлення message типу MimeMessage як параметр отримує значення створеної захищеної з сервером SMTP сесії session.
Лістинг аутентифікатора EmailAuthenticator.java
Вкладення файлу в повідомлення, MimeBodyPart
Щоб додати файл до повідомлення необхідно створити об'єкт типу MimeBodyPart. в якому в якості параметрів вказати шлях до файлу та найменування файлу. Наступний лістинг представляє функцію формування об'єкта MimeBodyPart з вмісті файлу, який можна вкладати в повідомлення.
Відправлення повідомлення, Multipart
Функція sendMessage завершує оформлення повідомлення. Для цього створюється об'єкт mmp типу MimeMultipart. в який можна вкласти інші об'єкти типу MimeBodyPart (текст, файл). Метод повідомлення setContent. якому в якості параметра передається об'єкт MimeMultipart. визначає зміст повідомлення.
Для відправки повідомлення використовується метод send класу Transport. який має такі перевантажені методи send:
Перший метод send відправить повідомлення одержувачам, зазначеним в повідомленні. Другий метод відправить повідомлення всім одержувачам, визначеним в масиві addresses за винятком тих, які визначені в повідомленні.
Приклад відправки повідомлення
Для відправки повідомлення створимо файл властивостей email.properties. в якому визначимо всі необхідні параметри сервера SMTP і параметри підключення. У прикладі використовуємо поштовий сервер Yandex. хоча настройки дозволяють використовувати і інші відомі поштові сервера.
Наступний клас EmailTest використовується для відправки повідомлення. Спочатку з файлу властивостей читаються параметри поштового сервера і параметри підключення. Для читання файлу використовується клас InputStream. більш детально про якому сказано на сторінці Потоки введення. Після цього створюється об'єкт SendEmail і виконується відправка повідомлення.
Представлений приклад з невеликими змінами можна використовувати для розсилки повідомлень.
Читання повідомлень по протоколу IMAP
Як було зазначено вище протокол IMAP слід використовувати для читання поштових повідомлень. При використанні протоколу IMAP програма повинна підключитися до сервера і отримати доступ до папки INBOX. Для настройки сесії підключення по протоколу IMAP необхідно вказати наступні дані:
Лістинг прикладу читання поштових повідомлень
У наступному прикладі спочатку налаштовується сесія з поштовим сервером для роботи по «закритому» каналу зв'язку. Після цього виконується читання останнього повідомлення папки «INBOX», яке було відправлено в попередньому прикладі. В консоль виводиться інформація цього останнього повідомлення.
Щоб приклад спрацював необхідно замість крапок підставити реальні логін і пароль.
У прикладі використовуються абстрактні класи
- Store - являє собою сховище повідомлень, підтримуваних поштовим сервером і згрупованих за власнику,
- Folder - надає можливість ієрархічно організовувати повідомлення. Папки можуть містити повідомлення і піддиректорії.
В консоль буде виведено наступне повідомлення. Звичайно, кількість повідомлень в поштовій скриньці «INBOX» буде іншим.
Тексти програм розглянутих прикладів використання бібліотеки JavaMail у вигляді проекту Eclipse можна скачати тут (930 Кб).