Как отправить электронное письмо из программы Java

Обновлено: 21.11.2024

Отправить электронное письмо с помощью Java-приложения достаточно просто, но для начала на вашем компьютере должны быть установлены JavaMail API и Java Activation Framework (JAF).

Вы можете загрузить последнюю версию JavaMail (версия 1.2) со стандартного веб-сайта Java.

Вы можете загрузить последнюю версию JAF (версия 1.1.1) со стандартного веб-сайта Java.

Загрузите и разархивируйте эти файлы. Во вновь созданных каталогах верхнего уровня вы найдете несколько JAR-файлов для обоих приложений. Вам нужно добавить файлы mail.jar и активации.jar в ваш CLASSPATH.

Отправить простое электронное письмо

Вот пример отправки простого электронного письма с вашего компьютера. Предполагается, что ваш локальный хост подключен к Интернету и имеет достаточную мощность для отправки электронной почты.

Пример

Скомпилируйте и запустите эту программу, чтобы отправить простое электронное письмо —

Вывод

Если вы хотите отправить электронное письмо нескольким получателям, то для указания нескольких идентификаторов электронной почты можно использовать следующие методы:

Вот описание параметров —

type — для этого будет установлено значение TO, CC или BCC. Здесь CC представляет собой углеродную копию, а BCC представляет собой черную углеродную копию. Пример: Message.RecipientType.TO

адреса — это массив идентификаторов электронной почты. Вам нужно будет использовать метод InternetAddress() при указании идентификаторов электронной почты.

Отправить электронное письмо в формате HTML

Вот пример отправки электронной почты в формате HTML с вашего компьютера. Здесь предполагается, что ваш локальный хост подключен к Интернету и имеет достаточную мощность для отправки электронной почты.

Этот пример очень похож на предыдущий, за исключением того, что здесь мы используем метод setContent() для установки содержимого, вторым аргументом которого является "text/html", чтобы указать, что содержимое HTML включено в сообщение.

Используя этот пример, вы можете отправлять HTML-контент любого размера.

Пример

Скомпилируйте и запустите эту программу, чтобы отправить электронное письмо в формате HTML –

Вывод

Отправить вложение по электронной почте

Вот пример отправки электронного письма с вложением с вашего компьютера. Здесь предполагается, что ваш локальный хост подключен к Интернету и имеет достаточную мощность для отправки электронной почты.

Пример

Скомпилируйте и запустите эту программу, чтобы отправить электронное письмо в формате HTML –

Вывод

Часть аутентификации пользователя

Если требуется предоставить идентификатор пользователя и пароль почтовому серверу для аутентификации, вы можете установить эти свойства следующим образом: —

Это связано с моим ответом ниже, единственная загвоздка в том, что он не использует библиотеку JavaMail. Я могу выслать вам полный исходный код, если хотите.

15 ответов 15

Следующий код очень хорошо работает с SMTP-сервером Google. Вам необходимо указать свое имя пользователя и пароль Google.

Обновление от 11 декабря 2015 г.

Имя пользователя + пароль больше не является рекомендуемым решением. Это связано с

Вот фрагмент кода для работы с Gmail API.

GoogleMail.java

Чтобы создать авторизованную службу Gmail с помощью oAuth2, используйте фрагмент кода.

Utils.java

Чтобы обеспечить удобный способ аутентификации oAuth2, я использовал JavaFX для отображения следующего диалогового окна ввода

Ключ для отображения удобного диалогового окна oAuth2 можно найти в файлах MyAuthorizationCodeInstalledApp.java и SimpleSwingBrowser.java

Мне не нравится, что методы называются Send вместо send, но это полезный класс. Есть мысли о последствиях для безопасности хранения пароля Gmail в коде?

У меня сработал следующий код.

Работал в учетной записи с отключенной двухфакторной аутентификацией. Это отличное решение, так как оно является локальным и не требует пакетов Sun.

Необходимые JAR-файлы

Короткий ответ - нет.

Длинный ответ — нет, так как код зависит от наличия SMTP-сервера, работающего на локальном компьютере и прослушивающего порт 25. SMTP-сервер (технически MTA или агент пересылки почты) отвечает за связь с Почтовый агент пользователя (MUA, в данном случае это процесс Java) для получения исходящих писем.

Если вы читали часто задаваемые вопросы по JavaMail об использовании JavaMail для доступа к GMail, вы заметите, что имя хоста и порт указывают на серверы GMail, а не на localhost. Если вы собираетесь использовать свой локальный компьютер, вам потребуется выполнить либо ретрансляцию, либо пересылку.

Возможно, вам потребуется подробно разобраться в протоколе SMTP, если вы хотите чего-то добиться, когда дело доходит до SMTP. Вы можете начать со статьи Википедии о SMTP, но любой дальнейший прогресс фактически потребует программирования для SMTP-сервера.

Отправка электронной почты — наиболее распространенное и необходимое требование для большинства приложений. Java предоставляет Java Mail API — независимую от платформы и протокола структуру для создания почтовых приложений и приложений для обмена сообщениями.

Эталонная реализация JavaMail распространяется под лицензией Common Development and Distribution License (CDDL) v1.1 и General Public License (GPL) v2 с исключением Classpath.

В этом руководстве вы подробно узнаете, как настроить JavaMail в вашем Java-проекте и внедрить JavaMail API для создания и отправки электронных писем по протоколу SMTP.

Предпосылки

  • IDE Eclipse
  • Среда выполнения Java

Шаг 1. Создайте новый проект Maven

  1. Нажмите «Файл» > «Создать» > «Проект» > «Maven» > «Проект Maven».

  1. Выберите Создать простой проект (пропустить выбор архетипа) и нажмите Готово.
  1. Укажите идентификатор артефакта и идентификатор группы для вашего проекта.

  1. Это даст структуру проекта по умолчанию, как показано ниже:
  1. Создается файл pom.xml по умолчанию:
    1. Добавьте следующие зависимости в файл pom.xml.

    Это добавит javax.mail.jar 1.6.2 в ресурсы вашего проекта.

    Шаг 2. Создание класса Java

    1. Щелкните правой кнопкой мыши Проект, создайте новый пакет и назовите его com.sendemail

    1. Щелкните правой кнопкой мыши пакет и создайте класс SendMail
      отметьте, чтобы создать основной метод:

    В вашем коде нам потребуется импортировать следующие пакеты и класс.

    • import java.util.Properties:
      Класс Properties представляет постоянный набор свойств. Свойства можно сохранить в потоке или загрузить из потока.
    • import javax.mail.Message:
      Этот класс моделирует сообщение электронной почты. Чтобы отправить сообщение, создается экземпляр подкласса Message (например, MimeMessage), заполняются атрибуты и содержимое, и сообщение отправляется с использованием метода Transport.send.
    • import javax.mail.MessagingException:
      это базовый класс для всех исключений, создаваемых классами обмена сообщениями
    • import javax.mail.PasswordAuthentication:
      Этот класс является просто хранилищем имени пользователя и пароля.
    • import javax.mail.Session:
      Класс сеанса представляет почтовый сеанс.
    • import javax.mail.Transport:
      Это абстрактный класс, моделирующий транспорт сообщений.
    • import javax.mail.internet.InternetAddress:
      Этот класс представляет адрес электронной почты в Интернете с использованием синтаксиса RFC822
    • import javax.mail.internet.MimeMessage:
      Этот класс представляет сообщение электронной почты в стиле MIME. Он реализует абстрактный класс Message и интерфейс MimePart.

    Отправка электронной почты через Java с использованием Gmail SMTP

    Ниже приведен полный код Java для отправки электронной почты с использованием SMTP-сервера Gmail с описанием каждой строки:

    Если вы хотите отправить HTML-контент, замените message.setText("Это актуальное сообщение") кодом ниже:

    Шаг 3. Проверка кода Java

    Запустите Java-приложение, и электронное письмо будет отправлено получателю. Ваша консоль будет выглядеть так.

    Вы успешно отправили электронное письмо, используя код Java.

    Теперь давайте отправим прикрепленный файл к вашему электронному письму.

    Дополнительные шаги

    Шаг 4. Отправить электронное письмо с вложением.

    Для отправки письма с вложением придется импортировать еще несколько классов.

    <р>1. import java.io.File и import java.io.IOException
    Класс File — это абстрактное представление имен путей к файлам и каталогам, а класс IOException — это общий класс исключений, создаваемых неудачными или прерванными операциями ввода-вывода. <р>2. import javax.mail.internet.MimeMultipart
    Этот класс является реализацией абстрактного класса Multipart, который использует соглашения MIME для данных.

    <р>3. import javax.mail.internet.MimeBodyPart
    Этот класс представляет часть тела MIME.
    MimeBodyPart использует класс InternetHeaders для анализа и сохранения заголовков этой части тела.

    Ниже приведен код Java для отправки вложения по электронной почте.

    Код имеет две части MIME Body, одна из которых содержит вложение, а другая содержит текст для электронной почты. Это добавляется в составную часть, а затем эта составная часть используется для установки в качестве содержимого сообщения.

    Вот работающий код Java для отправки вложений по электронной почте:

    Код Java для отправки вложения по электронной почте

    Заключение

    Теперь вы успешно внедрили Java Mail API и можете отправлять электронные письма, используя любые SMTP-серверы из вашего проекта.

    На протяжении многих лет Java считается одним из самых популярных языков веб-программирования. В этом руководстве по отправке электронных писем на Java, которое изначально было опубликовано в блоге Mailtrap, мы покажем, как создавать электронные письма в формате HTML с изображениями и вложениями и отправлять их с помощью SMTP-сервера.

    Основным вариантом является использование Java API для отправки и получения электронной почты через SMTP, POP3 и IMAP. Он реализован как дополнительный пакет, совместимый с любой операционной системой. В то же время Jakarta Mail поставляется как часть платформ Jakarta EE и Java EE. В более ранних выпусках почтовый пакет назывался «JavaMail API». Однако с июля 2019 года программное обеспечение Java было доработано Eclipse Foundation. Вот почему пакет электронной почты также получил новое имя. Все основные классы и свойства одинаковы для JavaMail и Jakarta Mail.

    В этой статье мы опишем основные свойства почтового пакета и покажем, как отправлять различные типы сообщений.

    Начало работы с Jakarta Mail (JavaMail)

    Кроме того, вы можете найти jar-файлы Jakarta Mail в репозитории Maven и добавить их в свою среду с зависимостями Maven:

    Обратите внимание, что если вы используете JDK 1.5 или более ранние версии, вам также потребуется реализация JavaBeans Activation Framework.

    Давайте сосредоточимся на основных этапах подготовки электронной почты в формате HTML и ее отправки через внешний SMTP-сервер.

    Классы и синтаксис Jakarta Mail

    Прежде чем мы перейдем к коду, давайте рассмотрим основные классы и свойства, которые чаще всего используются для создания и отправки сообщений с помощью Jakarta Mail.

    Класс сеанса ( javax.mail.Session ) является основным, соединяющим все свойства и значения по умолчанию. Для получения объекта сеанса используются следующие методы:

      getDefaultInstance() возвращает сеанс по умолчанию

    общедоступная статическая сессия getDefaultInstance/(Properties props)

    public static Session getDefaultInstance(Properties props, Authenticator auth)

    getInstance() возвращает новый сеанс.

    публичная статическая сессия getInstance (реквизиты свойств)

    public static Session getInstance(Properties props, Authenticator auth)

    Класс сообщения ( javax.mail.Message ) – это абстрактный класс, предназначенный для создания сообщения электронной почты. В основном мы будем использовать его подкласс Mime Message ( javax.mail.internet.MimeMessage ) и его основные методы:

      setFrom(Address[] address) устанавливает поле заголовка «От».

    public void addFrom(Address[] address)

    addRecipients(тип Message.RecipientType, адреса String) добавляет указанный адрес к типу получателя.

    public void addRecipient(тип Message.RecipientType, адреса Address[])

    setSubject(String subject) устанавливает поле заголовка темы.

    public void setSubject(Тема строки)

    setText(String textmessage) устанавливает текст в качестве содержимого сообщения, используя тип text/plain MIME.

    public void setText(String textmessage)

    setContent(Object o, String type) устанавливает содержимое этого сообщения.

    public void setContent(Object o, тип String)

    Для отправки электронной почты через внешний SMTP-сервер используйте пакет com.sun.mail.smtp : это поставщик протокола SMTP для JavaMail API, обеспечивающий доступ к SMTP-серверу.

    mail.smtp.host , SMTP-сервер для подключения.

    mail.smtp.port , порт SMTP-сервера для подключения, если метод connect() не указывает его явно. По умолчанию 25.

    Чтобы включить аутентификацию SMTP, задайте свойство mail.smtp.auth или укажите транспортному протоколу SMTP имя пользователя и пароль при подключении к SMTP-серверу.

    Мы покажем, как это реализовать позже, при демонстрации примеров кода.

    Класс SMTPMessage — это специализация класса MimeMessage для указания опций и параметров SMTP. Просто используйте этот класс вместо MimeMessage и задайте параметры SMTP с помощью методов этого класса.

      общедоступное SMTPMessage (сеанс сеанса)

    Transport ( javax.mail.Transport) — это абстрактный класс для отправки сообщений.

    Чтобы просмотреть все классы и их методы, см. этот раздел документации Jakarta Mail.

    Отправка электронной почты на языке Java через SMTP

    Теперь давайте рассмотрим, как реализовать классы и методы, описанные выше, и напишем код Java для отправки электронной почты через внешний SMTP-сервер.

    Прежде всего нам нужно определить, кто и что кому отправляет. Итак, используйте общедоступный класс SendEmail, установите адреса электронной почты «от» и «кому» и добавьте тему. С классом javax.mail.PasswordAuthentication мы сможем запрашивать аутентификацию по паролю для отправки сообщения через SMTP-сервер.

    В методе свойств мы добавим необходимые настройки SMTP, а затем создадим объект почтового сеанса. После этого вы можете создать сообщение, используя MimeMessage .

    Наконец, отправьте сообщение с транспортным объектом.

    Не забудьте добавить исключения. Этот класс позволяет вам получить подробную информацию о возможных ошибках, а также понять, как их отлаживать. Основной из них — MessagingException. Его можно использовать в пакетах javax.mail, javax.mail.internet и javax.mail.search. Например, AddressException для javax.mail.internet будет сгенерировано, если вы предложили адрес в неправильном формате.

    Мы вернемся к отладке чуть позже в этом посте.

    Как тестировать электронную почту в Java?

    Для тестирования отправки электронной почты с Java мы будем использовать Mailtrap, онлайн-инструмент, который помогает тестировать, просматривать и анализировать электронные письма, отправленные из среды разработки, контроля качества или промежуточной среды, без риска рассылки спама вашим клиентам или коллегам. После того, как вы проверили и убедились, что все работает правильно, измените настройки сервера, который вы используете в рабочей среде.

    Ввод:

    Вывод:

    Отправка электронной почты в формате HTML

    Чтобы отправить электронное письмо в формате HTML, необходимо выполнить те же действия, что и для отправки простого текстового сообщения, только с классом SendHTMLEmail вместо одного SendEmail . Кроме того, вам необходимо установить содержимое в MimeMessage.setContent(Object, String) и указать тип text/html.

    Ввод:

    Вывод:

    В Mailtrap вы также можете проверить необработанные данные вашего сообщения, а также его исходный код HTML на отдельных вкладках.

    Если вы хотите, чтобы ваше сообщение содержало как HTML, так и простой текст, вам нужно создать его с помощью объекта MimeMultipart("alternative"). Вы должны создать две разные части вручную и вставить их по отдельности: часть text/plain body в качестве первой части в multipart, часть text/html body в качестве второй.

    Электронная почта в формате HTML с изображениями на языке Java

    Чтобы добавить изображение в электронные письма в формате HTML в Jakarta Mail, вы можете выбрать любой из трех стандартных вариантов: CID, изображение base64 или связанное изображение.

    Чтобы внедрить изображение CID, необходимо создать составное/связанное сообщение MIME:

    Для base64 или встроенного изображения включите данные закодированного изображения в тело HTML:

    Но помните, что каждая цифра Base64 представляет 6 битов данных, поэтому фактический код изображения будет довольно длинным. Кроме того, это влияет на общий размер HTML-сообщения, поэтому лучше не встраивать большие изображения.

    Самый простой способ добавить изображение – просто создать ссылку на изображение, размещенное на каком-либо внешнем сервере. Обращайтесь к своему изображению как к ссылке в теле HTML с тегом «img»:

    Отправка электронного письма с вложениями

    Чтобы прикрепить к сообщению файлы любого типа, необходимо создать составное сообщение MIME и указать метод attachFile в MimeBodyPart .

    Отладка почты Джакарты

    Отладка играет решающую роль в тестировании отправки электронной почты. В Jakarta Mail это довольно просто. Установите для параметра debug значение true в свойствах кода электронной почты:

    В результате вы получите пошаговое описание того, как выполняется ваш код. Если возникнет какая-либо проблема с отправкой вашего сообщения, вы моментально поймете, что произошло и на каком этапе.

    Вот как выглядит результат отладки нашего HTML-сообщения:

    Нужны дополнительные параметры?

    В этом посте мы познакомили вас с основными примерами и вариантами использования Jakarta Mail. Если у вас возникнут трудности с установкой, реализацией или использованием этого пакета, обратитесь к FAQ Jakarta Mail.

    Действительно, создание транзакционных электронных писем для отправки из приложения Java с помощью Jakarta Mail API требует времени. В качестве альтернативы вы можете рассмотреть варианты упрощенной отправки электронной почты на Java. Например, Spring Framework или Apache Common Emails довольно популярны, а Play Framework предлагает плагин для отправки электронных писем. Simple Java Mail — одна из самых простых библиотек. Фактически, это оболочка JavaMail API.

    Андрей – менеджер по развитию в Mailtrap – продукте, который помогает людям проверять и отлаживать электронные письма перед отправкой их реальным пользователям. Он имеет более чем 5-летний опыт работы в области маркетинга и продуктов. Андрей любит общаться с людьми. Бег — его хобби, и ему нравится открывать для себя новые места. Вы можете связаться с Андреем через Linkedin или Facebook

    Читайте также: