Як відправити лист з java-додатки (з прикладом)

Як відправити лист з Java-додатка (з прикладом)

Переклад статті: How to Send Email from Java Program with Example

Приклад Java-коду для відправки електронного повідомлення

Як відправити лист з java-додатки (з прикладом)

Для відправки листа з Java-програми тобі будуть потрібні Java Mail API і Java Activation Framework (JAF); якщо точніше, то тобі знадобляться mail-1.4.5.jar. smtp-1.4.4.jar. і activation-1.1.jar. Тобі потрібно завантажити ці JAR файли і включити їх в твій Classpath для запуску цієї програми. В якості альтернативи ти можеш використовувати Maven для управління залежностями і включити всі залежності там. Як тільки у тебе будуть всі ці JAR файли, просто йди кроків нижче для створення і відправлення електронного листа c допомогою Java.

  1. Створи об'єкт Session викликаючи Session.getDefaultInstance (properties). де properties - містить всі важливі властивості, наприклад, ім'я хоста SMTP сервера.
  2. Створи об'єкт MimeMessage передаючи йому об'єкт Session. отриманий на попередньому кроці. У нас є набір різних властивостей в цьому об'єкті, таких як одержувач листа, тема, тіло повідомлення, вкладення і т.д.
  3. Використовуй javax.mail.Transport для відправлення листа викликаючи статичний метод send (email). де email може бути об'єкт MimeMessage.

Кількість властивостей, які ти передаєш для створення об'єкта Session відрізняється в залежності від типу SMTP сервера, наприклад, якщо ти використовуєш SMTP сервер. який не вимагає ніякої аутентифікації, ти можеш створити об'єкт Session тільки з одним властивістю, наприклад, smtp.mail.host, і тобі не потрібно вказувати порт, тому що він має порт 25 за замовчуванням. З іншого боку, якщо ти підключаєшся до SMTP сервера. який вимагає TLS або SSL аутентифікацію, наприклад, GMail's SMTP Host, тоді тобі потрібно надати трохи більше властивостей, наприклад, mail.smtp.port = 547 для TLS і mail.smtp.port = 457 для SSL.

Це закінчена Java-програма, яка з'єднується з стандартним SMTP сервером без аутентифікації і відправляє текстове лист використовуючи Java Mail API.

На виході :
Ти можеш скомпілювати і запустити цю програму для відправки простого електронного листа з Java-програми:


Sent email successfully ...

Ти можеш додати людей в поле TO використовуючи Message.RecipientType.TO. в поле CC використовуючи Message.RecipientType.CC. і в BCC - Message.RecipientType.BCC.

Помилки і виключення


Коли багато Java-програмісти вперше починають писати програму для відправки електронного листа, вони натикаються на помилку, тому що більшість з них думає, що mail.jar і activation.jar буде досить для відправки листа з Java-додатка, що не так, особливо якщо ти відправляєш імейл через локальний SMTP сервер в Linux. Якщо ти запускаєш цю програму тільки з mail.jar і activation.jar в твоєму CLASSPATH. ти найімовірніше отримаєш цю помилку.

Exception 1:


Хоча рішення цієї помилки дуже просте, вона може вас запитати. java.net.ConnectException: Connection refused: connect зазвичай вилітає, коли не працює сервер або невірно вказаний порт, по якому ти з'єднується. Рішення: крім mail-1.4.5.jar, тобі так само потрібні smtp-1.4.4.jar і activation-1.1.jar.

Exception 2:

Це інша помилка, яка називається NoClassDefFoundError. яка зазвичай відноситься до відсутнього JAR файлу в Classpath

Рішення: Мені вдалося вирішити мою проблему, вона сталася через некоректне Classpath. Незважаючи на те, що у мене були всі три необхідних JAR, файл Java класу для програми в одній директорії і я запускав програму звідти, Java не змогла цього зрозуміти. Я спробував ввести наступні команди і програма прекрасно заробила:


Sent email successfully ...

Будь ласка, зверніть увагу, що поточна директорія відзначена точкою в кінці аргументу Classpath. Так як я запускав програму в Linux, я використовував двокрапка (:) замість крапки з комою (;) (як в Windows).

Ось і все про те, як відправити імейл з Java-додатка використовуючи поштове API. Тобі може здатися це дуже простим, тому що не потрібно нічого більше, крім трьох JAR файлів. Набагато простіше, якщо ти використовуєш Gradle або Maven для управління залежностями. У наступних туторіали ми побачимо більш складні приклади Java Mail API для відправки листів з вкладеннями, з картинками і красиво відформатованих листів для відправки звітів і таблиць.

Всім доброго дня. Для відправки листів хочу використовувати корпоративний ящик google, параметри для роботи з ним (порти, SSL, TLS), наскільки я розумію, повинні прописуватися в «properties.setProperty (String key, String value);». Підкажіть будь ласка, як будуть виглядати «String key» для цих параметрів (синтаксис) або де можна подивитися повний перелік можливих параметрів. Гугл по java.util.Properties і javax.mail.Session, але списку параметрів так і не знайшов. Заздалегідь вдячний.

Знайшов! Може комусь знадобляться:

( «Mail.smtp.host», «smtp.gmail.com»);
( «Mail.smtp.socketFactory.port», «465»);
( «Mail.smtp.socketFactory.class», «javax.net.ssl.SSLSocketFactory»);
( «Mail.smtp.auth», «true»)
( «Mail.smtp.port», «465»)

( «Mail.smtp.auth», «true»)
( «Mail.smtp.starttls.enable», «true»)
( «Mail.smtp.host», «smtp.gmail.com»)
( «Mail.smtp.port», «587»)

Добрий день, допоможіть, не можу додати jar-файли. Скачую їх, кидаю в папку, додаю в змінну classpath по повному шляху + ім'я файлу, намагаюся імпортувати класи, а вони все одно не видно, в чому може бути проблема. Намагався їх через File \ Settings \ Plugins \ Install plugin from disk видає помилку «fail to load plugin descriptor from file"

Дякуємо. Гарний переклад!
ПС прочитав статтю, загугли приклад роботи з сервером яндекса, все вийшло.