Обзор
1. Связанные с электронной почтой стандарты
Программы обслуживания Javamail, предоставленные производителями
SMTP (протокол простых передачи почты) - это простой протокол передачи почты. Это набор правил для передачи почты с адреса источника на адрес назначения. Он управляет методом транзита букв.
POP3 (Post Office Protocol Version 3): Это стандартный протокол, используемый для получения электронных писем.
IMAP (протокол доступа к Интернету): то есть протокол доступа к Интернету. Это альтернативный протокол для POP3.
Эти три протокола имеют протоколы, соответствующие зашифрованной передаче SSL, а именно SMTPS, POP3S и IMAP.
MIME (многоцелевые расширения интернет -почты): то есть многоцелевой стандарт расширения интернет -почты. Это не протокол передачи почты. Тем не менее, формат определяется для передачи сообщений, вложений и другого содержимого.
2. Введение в Javamail
Javamail - API, опубликованный Sun для обработки электронной почты. Он не включен в Java SE, но является частью Java EE.
mail.jar: этот файл JAR содержит API Javamail и поставщики услуг SMTP, IMAP и POP3;
Activation.jar: Этот файл JAR содержит реализации JAF API и Sun.
Основные классы, используемые в пакетах Javamail для обработки электронных писем: свойства, сеанс, сообщение, адрес, аутентификатор, транспорт, магазин и т. Д.
3. Процесс передачи почты
Как показано на рисунке выше, шаги для обработки электронных писем следующие:
4. Структура сообщения
Mimemessage Class: представляет всю электронную почту.
Класс MimeBodyPart: сообщение MIME, представляющее сообщение.
MiMemultipart Class: представляет собой комбинированную информацию MIME, состоящую из множественной информации MIME.
5. Основной класс Javamail
Javamail обеспечивает высокий уровень абстракции отправки и получения электронных писем, формирования некоторых ключевых интерфейсов и классов, которые составляют основу программы. Давайте посмотрим на эти самые распространенные объекты.
6. java.util.properties Class (объект свойства)
Класс java.util.properties представляет собой набор свойств.
Каждый из его ключей и значений имеет тип строки.
Поскольку Javamail необходимо общаться с почтовым сервером, это требует, чтобы программа предоставила много информации, такой как адрес сервера, порт, имя пользователя, пароль и т. Д. Javamail инкапсулирует эту информацию атрибута через объект свойств.
Пример: например, следующий код инкапсулирует несколько атрибутов:
Свойства prop = new Properties (); Prop.SetProperty ("mail.debug", "true"); prop.setproperty ("mail.host", "[email protected]"); prop.setproperty ("mail.transport.protocol", "smtp"); prop.setproperty ("mail.smtp.auth", "true");Для различных протоколов почты Javamail предусматривает, что поставщики услуг должны поддерживать ряд атрибутов.
Следующая таблица представляет собой некоторые общие атрибуты (значения атрибутов устанавливаются как тип строки, а панель типа атрибута показывает только то, как анализируются атрибуты):
7. javax.mail.session Class (объект сеанса)
Сессия представляет собой почтовый сеанс.
Основные функции сеанса включают два аспекта:
Получить различную информацию о атрибуте конфигурации: Информация об атрибуте, установленную через объект Properties;
Инициализируйте среду Javamail: инициализируйте среду Javamail в соответствии с файлом конфигурации Javamail, чтобы создать экземпляры других важных классов через объект сеанса.
Javamail предоставляет базовую информацию о конфигурации через следующие файлы в каталоге Meta-INF пакета JAR, чтобы сеанс мог загрузить класс реализации поставщика в соответствии с этим файлом конфигурации:
javamail.default.providers;
javamail.default.address.map.
пример:
Properties props = new Properties (); props.setProperty ("mail.transport.protocol", "smtp"); session session = session.getinstance (ops);8. javax.mail.transport Class (Mail Transfer)
Есть только два способа обработки операций по электронной почте: отправка или получение.
Javamail описывает эти две различные операции как передача (javax.mail.transport) и хранилище (javax.mail.store), передавая отправку соответствующего письма и хранение получения соответствующей почты.
GetTransport: getTransport () в классе сеанса имеет несколько перегруженных методов, которые можно использовать для создания транспортных объектов.
Connect: Если команда аутентификации - mail.smtp.auth установлена, то при подключении к серверу с помощью метода подключения транспортного класса необходимо добавить имя пользователя и пароль.
Sendmessage: метод Sendmessage в транспортном классе используется для отправки почтовых сообщений.
Закрыть: Метод закрытия транспортного класса используется для закрытия подключения к почтовому серверу.
9. javax.mail.store Class (Mail Storage)
GetStore: getStore () в классе сеанса имеет несколько перегруженных методов, которые можно использовать для создания объектов магазина.
Connect: Если команда аутентификации - mail.smtp.auth установлена, то при подключении к серверу с помощью метода Connect Class класса Store необходимо добавить имя пользователя и пароль.
GetFolder: метод GetFolder класса магазина может получить объект папки папки в почтовом ящике.
Закрыть: метод закрытия класса магазина используется для закрытия соединения с почтовым сервером.
10. javax.mail.message (объект сообщения)
javax.mail.message - это абстрактный класс, который может быть создан только подклассами, и в большинстве случаев это javax.mail.internet.miMemessage.
Mimemessage представляет собой электронное сообщение типа Mime.
Чтобы создать сообщение, вам нужно передать объект сеанса конструктору Mimemessage:
Mimemessage Message = new Mimemessage (Session);
Примечание. Существуют другие конструкторы, такие как использование входных потоков в формате RFC822 для создания сообщений.
SETFROM: Установите отправителя электронной почты
SetRecipient: установите отправителя, человека CC и секретного человека электронного письма
Три предопределенные типы адресов:
Message.recipienttype.to: получатель
Message.recipienttype.cc: CC Person
Message.recipienttype.bcc: тайно раздайте
setSubject: установите тему электронной почты
SETCONTENT: Установите почтовый контент
SetText: Если содержимое электронной почты является простым текстом, вы можете использовать этот интерфейс для установки текстового контента.
10. javax.mail.address (адрес)
После того, как вы создали сеанс и сообщение и заполнили сообщение, вы можете использовать адрес для определения почтового адреса. Как сообщение, адрес также является абстрактным классом. Вы используете класс javax.mail.internet.internetaddress.
Если созданный адрес содержит только адрес электронной почты, просто передайте адрес электронной почты конструктору.
пример:
Адрес адрес = new InternetAddress ("[по электронной почте защищено]");
Аутентикатор: сертифицирован
Как и класс java.net, API Javamail также может использовать аутентификатор для доступа к защищенным ресурсам через имя пользователя и пароль. Для Javamail API эти ресурсы являются почтовыми серверами. Javamail Authenticator находится в пакете javax.mail, и он отличается от класса Authenticator с тем же именем в java.net. Они не имеют одного и того же аутентификатора, потому что API Javamail используется для Java 1.1, и у него нет категории java.net.
Чтобы использовать Authenticator, сначала создайте подкласс абстрактного класса и верните экземпляр PasswordAuthentication из метода getPasswordAuthentication (). После завершения создания вы должны зарегистрировать аутентификатор с помощью сеанса. Затем, когда требуется аутентификация, аутентификатор будет уведомлен. Вы можете вспять Windows или читать имена пользователей и пароли из файла конфигурации (хотя это не безопасно не шифровать) и вернуть их в вызывающую программу в качестве объектов PasswordAuthentication.
пример:
Свойства props = new Properties (); Authenticator auth = new myAuthenticator (); session = session.getDefaultInstance (over);
Пример
Отправить текстовую почту
public static void main (string [] args) бросает исключение {свойства prop = new Properties (); prop.setproperty ("mail.debug", "true"); prop.setproperty ("mail.host", mail_server_host); prop.setproperty ("mail.transport.protocol", "smtp"); prop.setproperty ("mail.smtp.auth", "true"); // 1. Создать сеанс сеанса = session.getInstance (prop); Транспорт TS = NULL; // 2. Получить транспортный объект через сеанс ts = session.getTransport (); // 3. Подключиться к почтовому серверу ts.connect (mail_server_host, пользователь, пароль); // 4. Создать сообщение Mimemessage Message = new Mimemessage (Session); // Сообщение заголовка сообщений электронной почты.setfrom (new InternetAddress (mail_from)); // отправитель сообщения.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // Получатель сообщения электронной почты.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc)); // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // Сообщение отправителя сообщений.setsubject ("Тестовая текстовая почта"); // заголовок электронной почты // Сообщение сообщения.settext («Непревзойденное в мире».); // 5. Отправить почту ts.sendmessage (message, message.getallrecipients ()); ts.close ();}Отправьте электронные письма в формате HTML
public static void main (string [] args) бросает исключение {свойства prop = new Properties (); prop.setproperty ("mail.debug", "true"); prop.setproperty ("mail.host", mail_server_host); prop.setproperty ("mail.transport.protocol", "smtp"); prop.setproperty ("mail.smtp.auth", "true"); // 1. Создать сеанс сеанса = session.getInstance (prop); Транспорт TS = NULL; // 2. Получить транспортный объект через сеанс ts = session.getTransport (); // 3. Подключиться к почтовому серверу ts.connect (mail_server_host, пользователь, пароль); // 4. Создать сообщение Mimemessage Message = new Mimemessage (Session); // Сообщение заголовка сообщений электронной почты.setfrom (new InternetAddress (mail_from)); // отправитель сообщения.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // Получатель сообщения электронной почты.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc)); // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // Получатель сообщения электронной почты.setsubject ("тест html mail"); // заголовок строки электронной почты htmlcontent = "<h1> hello </h1>" + "<p> Показать изображение <img src = 'cid: abc.jpg'> 1.jpg </p>"; MimeBodyPart Text = new MimeBodyPart (); text.setContent (htmlcontent, "text/html; charset = utf-8"); MimeBodyPart Image = new MimeBodyPart (); DataHandler dh = new DataHandler (new FileDataSource ("d: // [04] temp // img // 1.jpg")); Image.SetDataHandler (DH); Image.setContentId ("abc.jpg"); // Опишите отношения данных miMemultipart mm = new miMemultipart (); mm.addbodypart (текст); mm.addbodypart (изображение); mm.setsubtype ("связанный"); message.setContent (мм); message.savechanges (); // 5. Отправить почту ts.sendmessage (message, message.getallrecipients ()); ts.close ();}Отправить электронные письма с вложениями
public static void main (string [] args) бросает исключение {свойства prop = new Properties (); prop.setproperty ("mail.debug", "true"); prop.setproperty ("mail.host", mail_server_host); prop.setproperty ("mail.transport.protocol", "smtp"); prop.setproperty ("mail.smtp.auth", "true"); // 1. Создать сеанс сеанса = session.getInstance (prop); Транспорт TS = NULL; // 2. Получить транспортный объект через сеанс ts = session.getTransport (); // 3. Подключиться к почтовому серверу ts.connect (mail_server_host, пользователь, пароль); // 4. Создать сообщение Mimemessage Message = new Mimemessage (Session); // Сообщение заголовка сообщений электронной почты.setfrom (new InternetAddress (mail_from)); // отправитель сообщения.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); // Получатель сообщения электронной почты.setRecipient (message.recipienttype.cc, new InternetAddress (mail_cc)); // cc message.setRecipient (message.recipienttype.bcc, new InternetAddress (mail_bcc)); // Получатель сообщения электронной почты.setsubject («тест с вложением почты»); // название электронной почты MimeBodyPart Text = new MimeBodyPart (); Text.SetContent («В электронном письме есть два вложения.», «Text/html; charset = UTF-8»); // Опишите отношения данных miMemultipart mm = new miMemultipart (); mm.setsubtype ("связанный"); mm.addbodypart (текст); String [] files = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // Добавить вложение электронной почты для (строковое файл: файлы) {mimebodypart atchatpart = new MimebodyPart (); AttachPart.attachfile (имя файла); mm.addbodypart (AttactPart); } message.setContent (мм); message.savechanges (); // 5. Отправить почту ts.sendmessage (message, message.getallrecipients ()); ts.close ();}Получите электронные письма в своем почтовом ящике
открытый класс StoreMail {final Static String user = "robot"; // Имя пользователя Окончательная статическая строка пароль = "password520"; // пароль публичная окончательная статическая строка mail_server_host = "mail. ***. Com"; // Сервер почтового ящика Public Final Static String Type_html = "text/html; charset = utf-8"; // Текстовый контент Тип публичной окончательной статической строки mail_from = "[по электронной почте защищено]"; // отправитель публичный окончательный статический строка mail_to = "[электронная почта защищена]"; // к получателю публичную окончательную статическую строку mail_cc = "[электронная почта защищена]"; // CC Person public final Static String mail_bcc = "[электронная почта защищена]"; // тайно отправлять публичную статическую void main (string [] args) выбрасывает исключение {// Создать объект свойств с конкретной информацией о подключении prop = new Properties (); prop.setproperty ("mail.debug", "true"); prop.setproperty ("mail.store.protocol", "pop3"); prop.setproperty ("mail.pop3.host", mail_server_host); // 1. Создать сеанс сеанса сеанса = session.getInstance (prop); // 2. Получить объект магазина через Session Store Store = session.getStore (); // 3. Подключиться к хранилищам Mail Server store.connect (mail_server_host, пользователь, пароль); // 4. Получить папку почты в папке почтового ящика = store.getFolder ("inbox"); folder.open (folder.read_only); // Получение всех сообщений в сообщении сообщений папки [] Сообщения = folder.getMessage (); for (int i = 0; i <Сообщения. String from = (сообщения [i] .getFrom () [0]). ToString (); System.out.println ("th" + (i + 1) + "Субъект сообщения:" + субъект); System.out.println ("th" + (i + 1) + "Адрес отправителя электронной почты:" + from); } // 5. Close folder.close (false); Store.close (); }}Пересылать электронную почту
Пример: получите первое электронное письмо под указанной почтовой папкой и переправьте его
public static void main (string [] args) бросает исключение {свойства prop = new Properties (); prop.put ("mail.store.protocol", "pop3"); prop.put ("mail.pop3.host", mail_server_host); prop.put ("mail.pop3.starttls.enable", "true"); prop.put ("mail.smtp.auth", "true"); prop.put ("mail.smtp.host", mail_server_host); // 1. Создать сеанс сеанса = session.getDefaultInstance (prop); // 2. Прочтите магазин Mail Folder Store = session.getStore ("pop3"); store.connect (mail_server_host, пользователь, пароль); Папка папка = store.getFolder ("inbox"); folder.open (folder.read_only); // Получить первое сообщение электронной почты в сообщении папки Mail [] Сообщения = folder.getMessage (); if (сообщения.length <= 0) {return; } Сообщение сообщения = сообщения [0]; // Печать строки сообщений ключа от = InternetAddress.toString (message.getFrom ()); if (from! = null) {System.out.println ("from:" + from); } String replyto = InternetAddress.toString (message.getReplyTo ()); if (replyto! = null) {System.out.println ("Ответить:" + Ответить); } String to = InternetAddress.toString (message.getRecipients (message.recipienttype.to)); if (to! = null) {System.out.println ("to:" + to); } String subject = message.getSubject (); if (субъект! = null) {System.out.println ("Субъект:" + субъект); } Date SEND = message.getSentDate (); if (Send! = null) {System.out.println ("Send:" + sed); } // Установите сообщение «Отправить сообщение сообщением электронной почты» forward.setfrom (new InternetAddress (mail_from)); forward.setRecipient (message.recipienttype.to, new InternetAddress (mail_to)); forward.setsubject ("fwd:" + message.getSubject ()); // Установите содержимое электронной почты MimeBodyPart BodyPart = new MimeBodyPart (); bodypart.setContent (сообщение "Message/RFC822"); Multipart Multipart = new MiMemultIpart (); multipart.addbodypart (bodypart); forward.setContent (multipart); Forward.saveChanges (); Transport ts = session.getTransport ("SMTP"); ts.connect (пользователь, пароль); ts.sendmessage (вперед, forward.getallrecipents ()); folder.close (false); Store.close (); ts.close (); System.out.println («Сообщение успешно перенаправлено ...»);}Выше всего об этой статье. Я надеюсь, что для всех будет полезно научиться отправлять и получать электронные письма от Javamail.