Вне платформы 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 variablesString host = "your_smtp_server";String from = "from_address";String to = "to_address";// Set propertiesProperties props = new Properties();props.put("mail.smtp.host", host);props.put("mail.debug", "true"); // Get sessionSession 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 partMimeBodyPart part1 = new MimeBodyPart();part1.setText("This is part one of this multipart message."); // Create and fill second partMimeBodyPart 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 contentmsg.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 fileMimeBodyPart part3 = new MimeBodyPart(); // Put a file in the second partFileDataSource fds = new FileDataSource("THE_FILE_NAME");part3.setDataHandler(new DataHandler(fds));part3.setFileName(fds.getName()); // 'mp' is the previously created 'MimeMultipart' objectmp.addBodyPart(part3); // 'msg' is the previously created 'Message' objectmsg.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 partMimeBodyPart 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 identifierMimeBodyPart 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, более близкий к людям, чем к протоколам.
Ресурсы
- JavaMail — домашняя страница проекта JavaMail.
- Apache Commons Email — подпроект Apache Commons для упрощения работы с JavaMail API. Смотрите раздел « Руководство пользователя ».
- MIME (Multipurpose Internet Mail Extensions) — описание формата MIME для составных электронных писем.
Ссылка: отправка электронных писем с Java от нашего партнера JCG блоге «Любопытное животное» .