JavaMail
| JavaMail | |
|---|---|
| Тип | библиотека функций |
| Разработчик | Eclipse Foundation |
| Написана на | Java |
| Дата выпуска | 1996[1] |
| Аппаратная платформа | кроссплатформенность |
| Последняя версия |
|
| Репозиторий | github.com/eclipse-ee4j/… |
| Лицензия | GNU GPL 2 и Common Development and Distribution License version 1.1[вд] |
| Сайт | projects.eclipse.org/… (англ.) |
JavaMail — Java API предназначенное для получения и отправки электронной почты с использованием протоколов SMTP, POP3 и IMAP. JavaMail является частью платформы Java EE, но также доступен в качестве дополнительного пакета для использования в приложениях Java SE.
Существует также альтернативная реализация JavaMail с открытым исходным кодом — GNU JavaMail — которая реализует только спецификацию JavaMail версии 1.3; это единственная свободная реализация, поддерживающая протокол NNTP, позволяющий читать и отсылать статьи в новостные группы.
В состав JavaMail не входит почтовый сервер, однако для подобных задач могут использоваться свободные Apache James[англ.] и Java Email Server (POP3 и SMTP), или библиотека SubEthaSMTP для создания SMTP сервера[3].
Лицензия
Исходный код и скомпилированные библиотеки доступны под лицензией CDDL-1.1 и частично под GPLv2 с исключением для компоновки[англ.], а исходники примеров доступны по лицензии BSD[4].
Примеры использования
Получение сообщений по IMAP
import javax.mail.*;
import java.util.Properties;
public class TestImap {
public static void main(String[] args) throws Exception {
final String user = "[email protected]"; // имя пользователя
final String pass = "your password"; // пароль
final String host = "imap.mail.ru"; // адрес почтового сервера
// Создание свойств
Properties props = new Properties();
//включение debug-режима
props.put("mail.debug", "true");
//Указываем протокол - IMAP с SSL
props.put("mail.store.protocol", "imaps");
Session session = Session.getInstance(props);
Store store = session.getStore();
//подключаемся к почтовому серверу
store.connect(host, user, pass);
//получаем папку с входящими сообщениями
Folder inbox = store.getFolder("INBOX");
//открываем её только для чтения
inbox.open(Folder.READ_ONLY);
//получаем последнее сообщение (самое старое будет под номером 1)
Message m = inbox.getMessage(inbox.getMessageCount());
Multipart mp = (Multipart) m.getContent();
BodyPart bp = mp.getBodyPart(0);
//Выводим содержимое на экран
System.out.println(bp.getContent());
}
}
Пример отправки текстового сообщения
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
// Отправка простого сообщения с типом контента "text/plain"
public class TestEmail {
public static void main(String[] args) {
// Сюда необходимо подставить адрес получателя сообщения
String to = "sendToMailAddress";
String from = "sendFromMailAddress";
// Сюда необходимо подставить SMTP сервер, используемый для отправки
String host = "smtp.yourisp.net";
// Тут указываем порт SMTP сервера.
int port = 123;
// Создание свойств, получение сессии
Properties props = new Properties();
// При использовании статического метода Transport.send()
// необходимо указать через какой хост будет передано сообщение
props.put("mail.smtp.host", host);
// Если почтовый сервер использует SSL
props.put("mail.smtp.ssl.enable", "true");
// Указываем порт SMTP сервера.
props.put("mail.smtp.port", port);
// Большинство SMTP серверов, используют авторизацию.
props.put("mail.smtp.auth", "true");
// Включение debug-режима
props.put("mail.debug", "true");
// Авторизируемся.
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
// Указываем логин пароль, от почты, с которой будем отправлять сообщение.
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("login", "password");
}
});
try {
// Создание объекта сообщения
Message msg = new MimeMessage(session);
// Установка атрибутов сообщения
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("Test E-Mail through Java");
msg.setSentDate(new Date());
// Установка тела сообщения
msg.setText("This is a test of sending a " +
"plain text e-mail through Java.\n" +
"Here is line 2.");
// Отправка сообщения
Transport.send(msg);
}
catch (MessagingException mex) {
// Печать информации об исключении в случае его возникновения
mex.printStackTrace();
}
}
}
Пример отправки составного сообщения с файловыми вложениями
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendMailUsage {
public static void main(String[] args) {
// Сюда необходимо подставить адрес получателя сообщения
String to = "sendToMailAddress";
String from = "sendFromMailAddress";
// Сюда необходимо подставить SMTP сервер, используемый для отправки
String host = "smtpserver.yourisp.net";
// Создание свойств, получение сессии
Properties props = new Properties();
// При использовании статического метода Transport.send()
// необходимо указать через какой хост будет передано сообщение
props.put("mail.smtp.host", host);
// Включение debug-режима
props.put("mail.debug", "true");
//Включение авторизации
props.put("mail.smtp.auth", "true");
// Получение сессии
Session session = Session.getInstance(props);
try {
// Получение объекта транспорта для передачи электронного сообщения
Transport bus = session.getTransport("smtp");
// Устанавливаем соединение один раз
// Метод Transport.send() отсоединяется после каждой отправки
//bus.connect();
// Обычно для SMTP сервера необходимо указать логин и пароль
bus.connect("smtpserver.yourisp.net", "username", "password");
// Создание объекта сообщения
Message msg = new MimeMessage(session);
// Установка атрибутов сообщения
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
// Парсинг списка адресов разделённых пробелами. Строгий синтаксис
msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(to, true));
// Парсинг списка адресов разделённых пробелами. Более мягкий синтаксис.
msg.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse(to, false));
msg.setSubject("Тест отправки E-Mail с помощью Java");
msg.setSentDate(new Date());
// Установка контента сообщения и отправка
setTextContent(msg);
msg.saveChanges();
bus.sendMessage(msg, address);
setMultipartContent(msg);
msg.saveChanges();
bus.sendMessage(msg, address);
setFileAsAttachment(msg, "C:/WINDOWS/CLOUD.GIF");
msg.saveChanges();
bus.sendMessage(msg, address);
setHTMLContent(msg);
msg.saveChanges();
bus.sendMessage(msg, address);
bus.close();
}
catch (MessagingException mex) {
// Печать информации обо всех возможных возникших исключениях
mex.printStackTrace();
// Получение вложенного исключения
while (mex.getNextException() != null) {
// Получение следующего исключения в цепочке
Exception ex = mex.getNextException();
ex.printStackTrace();
if (!(ex instanceof MessagingException)) break;
else mex = (MessagingException)ex;
}
}
}
// Сообщение, состоящее из одной части с типом контента text/plain.
public static void setTextContent(Message msg) throws MessagingException {
// Установка типа контента
String mytxt = "This is a test of sending a " +
"plain text e-mail through Java.\n" +
"Here is line 2.";
msg.setText(mytxt);
// Альтернативный способ
msg.setContent(mytxt, "text/plain");
}
// Сообщение с типом контента multipart/mixed. Обе части имеют тип контента text/plain.
public static void setMultipartContent(Message msg) throws MessagingException {
// Создание и заполнение первой части
MimeBodyPart p1 = new MimeBodyPart();
p1.setText("This is part one of a test multipart e-mail.");
// Создание и заполнение второй части
MimeBodyPart p2 = new MimeBodyPart();
// Here is how to set a charset on textual content
p2.setText("This is the second part", "us-ascii");
// Создание экземпляра класса Multipart. Добавление частей сообщения в него.
Multipart mp = new MimeMultipart();
mp.addBodyPart(p1);
mp.addBodyPart(p2);
// Установка объекта класса Multipart в качестве контента сообщения
msg.setContent(mp);
}
// Прикрепление файла в качестве вложения. Используется JAF FileDataSource.
public static void setFileAsAttachment(Message msg, String filename)
throws MessagingException {
// Создание и заполнение первой части
MimeBodyPart p1 = new MimeBodyPart();
p1.setText("This is part one of a test multipart e-mail." +
"The second part is file as an attachment");
// Создание второй части
MimeBodyPart p2 = new MimeBodyPart();
// Добавление файла во вторую часть
FileDataSource fds = new FileDataSource(filename);
p2.setDataHandler(new DataHandler(fds));
p2.setFileName(fds.getName());
// Создание экземпляра класса Multipart. Добавление частей сообщения в него.
Multipart mp = new MimeMultipart();
mp.addBodyPart(p1);
mp.addBodyPart(p2);
// Установка экземпляра класса Multipart в качестве контента документа
msg.setContent(mp);
}
// Добавление в первую часть html-контента.
// Оптправка данных любого другого типа производится аналогичным образом.
public static void setHTMLContent(Message msg) throws MessagingException {
String html = "<html><head><title>" +
msg.getSubject() +
"</title></head><body><h1>" +
msg.getSubject() +
"</h1><p>This is a test of sending an HTML e-mail" +
" through Java.</body></html>";
// HTMLDataSource является внутренним классом
msg.setDataHandler(new DataHandler(new HTMLDataSource(html)));
}
/*
* Внутренний класс работает аналогично JAF datasource и добавляет HTML в контент сообщения
*/
static class HTMLDataSource implements DataSource {
private String html;
public HTMLDataSource(String htmlString) {
html = htmlString;
}
// Возвращаем html строку в InputStream.
// Каждый раз возвращается новый поток
public InputStream getInputStream() throws IOException {
if (html == null) throw new IOException("Null HTML");
return new ByteArrayInputStream(html.getBytes());
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("This DataHandler cannot write HTML");
}
public String getContentType() {
return "text/html";
}
public String getName() {
return "JAF text/html dataSource to send e-mail only";
}
}
}
Примечания
- ↑ JavaMail™ API - A Technical Overview — С. 4.
- ↑ Release 2.1.5 — 2025.
- ↑ JavaMail API: mail servers. Дата обращения: 21 февраля 2015. Архивировано 21 февраля 2015 года.
- ↑ JavaMail License. Дата обращения: 20 февраля 2015. Архивировано 12 ноября 2014 года.
Ссылки
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.