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

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

  • Вы можете скачать последнюю версию с сайта Java:JavaMail, откройте веб-страницу, и справа есть ссылкаЗагрузки, нажмите её, чтобы скачать.
  • Вы можете скачать последнюю версию с сайта Java:JAF (версия 1.1.1)。

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

  • JavaMail mail.jar 1.4.5
  • JAF (версия 1.1.1) activation.jar

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

Если вы используете сторонний почтовый сервер, например SMTP-сервер QQ, можете обратиться к полному примеру аутентификации пользователя в конце статьи.


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

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

Код файла SendEmail.java:

//Имя файла: SendEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String [] args) { //Адрес электронной почты получателя String to = "[email protected]"; //Адрес электронной почты отправителя String from = "[email protected]"; //Укажите хост для отправки почты как localhost String host = "localhost"; //Получить системные свойства Properties properties = System.getProperties(); //Настроить почтовый сервер properties.setProperty("mail.smtp.host", host); //Получить объект Session по умолчанию Session session = Session.getDefaultInstance(properties); try{ //Создать объект MimeMessage по умолчанию MimeMessage message = new MimeMessage(session); //Установить поле заголовка From: message.setFrom(new InternetAddress(from)); //Установить поле заголовка To: message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Установить поле заголовка Subject: message.setSubject("Это строка темы!"); //Установить тело сообщения message.setText("Это фактическое сообщение"); //Отправить сообщение Transport.send(message); System.out.println("Сообщение успешно отправлено...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

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

$ java SendEmail
Sent message successfully....

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

void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException

Ниже приведено описание параметров:

  • type:Должно быть установлено в TO, CC или BCC, где CC означает копию (carbon copy), а BCC — скрытую копию (blind carbon copy). Пример:Message.RecipientType.TO

  • addresses:Это массив идентификаторов электронной почты. При указании идентификаторов электронной почты вам потребуется использовать метод InternetAddress().


Отправка HTML-письма

Ниже приведён пример отправки HTML-письма. Предполагается, что ваш локальный хост уже подключён к сети.

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

Код файла SendHTMLEmail.java:

//Имя файла: SendHTMLEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendHTMLEmail { public static void main(String [] args) { //Адрес электронной почты получателя String to = "[email protected]"; //Адрес электронной почты отправителя String from = "[email protected]"; //Укажите хост для отправки почты как localhost String host = "localhost"; //Получить системные свойства Properties properties = System.getProperties(); //Настроить почтовый сервер properties.setProperty("mail.smtp.host", host); //Получить объект Session по умолчанию. Session session = Session.getDefaultInstance(properties); try{ //Создать объект MimeMessage по умолчанию. MimeMessage message = new MimeMessage(session); //Установить поле заголовка From: message.setFrom(new InternetAddress(from)); //Установить поле заголовка To: message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Установить поле заголовка Subject: message.setSubject("Это строка темы!"); //Отправить HTML-сообщение; можно вставлять HTML-теги message.setContent("<h1>Это фактическое сообщение</h1>", "text/html" ); //Отправить сообщение Transport.send(message); System.out.println("Сообщение успешно отправлено...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

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

$ java SendHTMLEmail
Sent message successfully....

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

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

Код файла SendFileEmail.java:

//Имя файла: SendFileEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendFileEmail { public static void main(String [] args) { //Адрес электронной почты получателя String to = "[email protected]"; //Адрес электронной почты отправителя String from = "[email protected]"; //Укажите хост для отправки почты как localhost String host = "localhost"; //Получить системные свойства Properties properties = System.getProperties(); //Настроить почтовый сервер properties.setProperty("mail.smtp.host", host); //Получить объект Session по умолчанию. Session session = Session.getDefaultInstance(properties); try{ //Создать объект MimeMessage по умолчанию. MimeMessage message = new MimeMessage(session); //Установить поле заголовка From: message.setFrom(new InternetAddress(from)); //Установить поле заголовка To: message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Установить поле заголовка Subject: message.setSubject("Это строка темы!"); //Создайте часть сообщения BodyPart messageBodyPart = new MimeBodyPart(); //Message messageBodyPart.setText("Это тело сообщения"); //Создайте составное сообщение Multipart multipart = new MimeMultipart(); //Установите текстовую часть сообщения multipart.addBodyPart(messageBodyPart); //Часть вложения messageBodyPart = new MimeBodyPart(); String filename = "file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); //Отправьте полное сообщение message.setContent(multipart ); //Отправить сообщение Transport.send(message); System.out.println("Сообщение успешно отправлено...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

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

$ java SendFileEmail
Sent message successfully....

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

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

props.put("mail.smtp.auth", "true"); props.setProperty("mail.user", "myuser"); props.setProperty("mail.password", "mypwd");

Остальная часть механизма отправки электронной почты остаётся такой же, как выше.

Пример отправки электронной почты с аутентификацией по имени пользователя/паролю:

В этом примере в качестве примера используется почтовый сервер QQ. Вам нужно войти в серверную часть вашего почтового ящика QQ и включить службу POP3/SMTP в разделе "Настройки" => "Учетные записи", как показано на рисунке ниже:

Почтовый ящик QQ задаёт пароль путём генерации кода авторизации:

Код Java выглядит следующим образом:

Код файла SendEmail2.java:

//Пример отправки электронной почты, требующей имени пользователя и пароля //Имя файла: SendEmail2.java //В этом примере используется почтовый ящик QQ в качестве примера; вам нужно настроить его в бэкенде QQ import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendEmail2 { public static void main(String [] args) { //Адрес электронной почты получателя String to = "[email protected]"; //Адрес электронной почты отправителя String from = "[email protected]"; //Укажите хост для отправки почты как smtp.qq.com String host = "smtp.qq.com"; //Почтовый сервер QQ //Получить системные свойства Properties properties = System.getProperties(); //Настроить почтовый сервер properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.auth", "true"); //Получить объект Session по умолчанию Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "код авторизации почтового ящика QQ"); //Имя пользователя электронной почты отправителя и код авторизации } }); try{ //Создать объект MimeMessage по умолчанию MimeMessage message = new MimeMessage(session); //Установить поле заголовка From: message.setFrom(new InternetAddress(from)); //Установить поле заголовка To: message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Установить поле заголовка Subject: message.setSubject("Это строка темы!"); //Установить тело сообщения message.setText("Это фактическое сообщение"); //Отправить сообщение Transport.send(message); System.out.println("Сообщение успешно отправлено....от example.com"); }catch (MessagingException mex) { mex.printStackTrace(); } } }
Другие расширения