Как отправить электронное письмо из программы 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
- Нажмите «Файл» > «Создать» > «Проект» > «Maven» > «Проект Maven».
- Выберите Создать простой проект (пропустить выбор архетипа) и нажмите Готово.
- Укажите идентификатор артефакта и идентификатор группы для вашего проекта.
- Это даст структуру проекта по умолчанию, как показано ниже:
- Создается файл pom.xml по умолчанию: ол>
- Добавьте следующие зависимости в файл pom.xml.
- Щелкните правой кнопкой мыши Проект, создайте новый пакет и назовите его com.sendemail
- Щелкните правой кнопкой мыши пакет и создайте класс 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.
Это добавит javax.mail.jar 1.6.2 в ресурсы вашего проекта.
Шаг 2. Создание класса Java
В вашем коде нам потребуется импортировать следующие пакеты и класс.
Отправка электронной почты через 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
Читайте также: