Статьи

Отправка писем с помощью Java

Я начинаю писать этот пост как простое «как отправить электронное письмо» с использованием Java, но позже я обнаружил, что мне нужно кратко объяснить больше вещей. Итак, вот такой вид всех в одном резюме об отправке электронных писем с Java.

Вне платформы Java SE, но включенной в JavaEE, пакет JavaMail предоставляет платформу для создания приложений почты и обмена сообщениями. Давайте рассмотрим пример.

Отправка простого текстового сообщения

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Common variables
String host = "your_smtp_server";
String from = "from_address";
String to = "to_address";
 
// Set properties
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "true");
  
// Get session
Session session = Session.getInstance(props);
  
try {
    // Instantiate a message
    Message msg = new MimeMessage(session);
  
    // Set the FROM message
    msg.setFrom(new InternetAddress(from));
  
    // The recipients can be more than one so we use an array but you can
    // use 'new InternetAddress(to)' for only one address.
    InternetAddress[] address = {new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO, address);
  
    // Set the message subject and date we sent it.
    msg.setSubject("Email from JavaMail test");
    msg.setSentDate(new Date());
  
    // Set message content
    msg.setText("This is the text for this simple demo using JavaMail.");
  
    // Send the message
    Transport.send(msg);
}
catch (MessagingException mex) {
    mex.printStackTrace();
}

В качестве альтернативы вместо использования:

1
msg.setText("This is the text for this simple demo using JavaMail.");

Вы можете использовать рядом, чтобы установить содержание сообщения:

1
msg.setContent("This is the text for this simple demo using JavaMail.", "text/plain");

Проверка адреса электронной почты

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

1
2
3
4
Pattern rfc2822 = Pattern.compile("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
if(rfc2822.matcher(EMAIL_ADDRESS).matches()) {
    // Well formed email
}

Составные сообщения

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

ПРИМЕЧАНИЕ. См. Ниже в разделе «Ссылки», чтобы узнать о формате MIME, который расширяет данные, которые вы можете прикрепить к электронному письму, и разрешить использование нескольких частей, вложений и т. Д.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
...
// Here create two parts and set as message contect
// Create and fill first part
MimeBodyPart part1 = new MimeBodyPart();
part1.setText("This is part one of this multipart message.");
  
// Create and fill second part
MimeBodyPart part2 = new MimeBodyPart();
part2.setText("This is part two of this multipart message.");
  
// Create the Multipart.
Multipart mp = new MimeMultipart();
mp.addBodyPart(part1);
mp.addBodyPart(part2);
  
// Set the message's content
msg.setContent(mp);
...

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

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
...
// Create a new part for the attached file
MimeBodyPart part3 = new MimeBodyPart();
  
// Put a file in the second part
FileDataSource fds = new FileDataSource("THE_FILE_NAME");
part3.setDataHandler(new DataHandler(fds));
part3.setFileName(fds.getName());
  
// 'mp' is the previously created 'MimeMultipart' object
mp.addBodyPart(part3);
  
// 'msg' is the previously created 'Message' object
msg.setContent(mp);
...

HTML сообщения

Создать сообщение или составное сообщение с содержимым HTML очень просто, просто укажите тип MIME в методе setContent:

1
2
3
4
...
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part</p>", "text/html");
...

Прикрепление изображений в HTML-код

Если вы пишете насыщенное сообщение с использованием HTML, вы, конечно, можете добавлять изображения с помощью тега img. Если на изображение ссылаются с внешнего сервера, проблем не возникает, но: как прикрепить изображение к сообщению и отобразить в теле сообщения HTML?

Идея заключается в следующем:

  • Сначала вам нужно прикрепить файл изображения и установить идентификатор и
  • во-вторых, вам нужно написать свой HTML-код и ссылаться на идентификатор изображения в теге ‘img’.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
...
// Create and fill html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part with an attached image</p>" +
    "<img src='cid:some_image_id'>", "text/html");
  
// Create a new part for the attached image and set the CID image identifier
MimeBodyPart imagePart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("THE_IMAGE_FILE_NAME");
imagePart.setDataHandler(new DataHandler(fds));
imagePart.setHeader("Content-ID", "some_image_id");
  
mp.addBodyPart(htmlPart);
mp.addBodyPart(imagePart);
...

Что-нибудь еще сказать?

Прибыв к этому моменту вы практически мастер отправки писем. Вы знаете, как отправлять простые электронные письма, составные электронные письма с самым богатым HTML-контентом, а также прикреплять файлы и изображения к своему сообщению.

Что еще может желать программист?

Возможно, более простой в использовании API, и это то, что предлагает вам проект Apache Commons Email . См. Раздел «Руководство пользователя» http://commons.apache.org/email/userguide.html, чтобы понять, что я говорю. Он предлагает более абстрактный API, более близкий к людям, чем к протоколам.

Ресурсы

Ссылка: отправка электронных писем с Java от нашего партнера JCG блоге «Любопытное животное» .

Статьи по Теме :