Java Mail - это инструмент, который использует существующие учетные записи электронной почты для отправки электронных писем. Например, я регистрирую учетную запись электронной почты в NetEase. Благодаря управлению Java Mail, я не могу войти в сетевой почтовый ящик лично, чтобы программа могла автоматически использовать Netease Mailbox для отправки электронных писем. Этот механизм широко используется в регистрационной активации и отправке спама.
Общий процесс отправки Java Mail заключается в следующем:
1. Создайте конкретный класс, унаследованный от javax.mail.authenticator и переопределить метод getPasswordAuthentication () внутри. Этот класс используется в качестве проверки входа в систему, чтобы убедиться, что вы имеете право отправлять электронные письма в этот почтовый ящик.
2. Создайте файл свойств, который хранит такие параметры, как адрес SMTP -сервера.
3. Создайте javax.mail.session через встроенный файл свойств и класс Javax.mail.Authenticator Concrete. Создание сеанса эквивалентно входу на адрес электронной почты. Остальное, естественно, новое электронное письмо.
4. Чтобы создать контент электронной почты, это, как правило, это объект javax.mail.internet.mememessage и укажите отправителя, получателя, предмета, контента и т. Д.
5. Используйте класс инструментов javax.mail.transport для отправки электронных писем.
Ниже приведен код, который я инкапсулировал, и комментарии также довольно подробно.
1. Во -первых, это конкретный класс, унаследованный от javax.mail.authenticator. Метод getPasswordAuthentication () заключается в создании объекта с помощью пароля и вернуть его, что немного сбивает с толку, чтобы понять намерения дизайна Java Mail. Может случиться так, что javax.mail.authenticator предоставляет нам дополнительные меры проверки для обеспечения безопасности.
пакет com.mzule.simplemail; Импорт javax.mail.authenticator; импортировать javax.mail.passwordAuthentication; /** * Проверка входа в систему почтового ящика сервера * * @author mzule * */public Class MailOuthenticator Extends Authenticator {/** * username (вход в почтовый ящик) */private String username; / *** Пароль*/ Private String Password; / *** Инициализировать почтовый ящик и пароль** @param username mailbox* @param пароль пароля*/ public mailOuthenticator (String username, String Password) {this.username = username; this.password = пароль; } String getPassword () {return пароль; } @Override защищенная пароль, getPasswordAuthentication () {return New PasswordAuthentication (имя пользователя, пароль); } String getUsername () {return username; } public void setPassword (String password) {this.password = password; } public void setUsername (string username) {this.username = username; }}2. Электронная почта отправляя класс , оставшиеся шаги реализованы в этом классе. Simplemail в коде - это POJO, который инкапсулирует предмет и содержание электронной почты. Я чувствую, что не подходит для включения как темы, так и контента в параметр метода, поэтому я перегрузил этот метод. Кроме того, поскольку адреса SMTP -сервера большинства почтовых ящиков можно рассчитать по адресам электронной почты. Для простоты предоставляется конструктор, который не требует адреса SMTP -сервера.
пакет com.mzule.simplemail; импортировать java.util.list; импортировать java.util.properties; Импорт javax.mail.messagingexception; импорт javax.mail.session; импорт javax.mail.transport; импорт javax.mail.internet.addressexception; импорт javax.mail.internet.internetDdress; import javax.mail.internet.mimessage; import javax.mail.mipememessage /*** Простой отправитель почты может быть отправлен в одиночку или массу. * * @author mzule * */public class SimpleMailsender {/** * Файл реп. / *** Проверка входа в систему почтового сервера*/ private Transiet MailAuthenticator Authenticator; / ** * Электронная сессия */ частная сеанс переходного процесса; / ** * Инициализируйте отправитель Mail * * @param smtphostname * smtp -адрес почтового сервера * @param username * username (адрес) для отправки почты * @param пароль * Пароль для отправки электронной почты */ public simplemailsender (final String smtphostname, final String username, final String Password) {initamame, пароль, smtphostname; } /*** Инициализируйте отправитель электронной почты** @param имени пользователя* username (адрес) отправки электронных писем, и используйте его для разрешения адреса SMTP -сервера* @param пароль* для отправки электронной почты* /public summerailsender (окончательная строка username, final String Password) {// Решение SMTP -сервера через адрес электронной почты, который работает для большинства почтовых ячейки SMTPOST. + username.split ("@") [1]; init (имя пользователя, пароль, smtphostname); } / ** * Инициализация * * @param username * username (адрес) для отправки электронной почты * @param password * password * @param smtphostname * smtp -адрес хоста * / private void init (string username, string password, string smtphostname) {// initiaze props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.host", smtphostname); // проверка Authenticator = New MailOuthenticator (имя пользователя, пароль); // Создать сеанс сеанса = session.getInstance (opts, autenticator); } /** * Send email* * @param recipient * Recipient email address* @param subject * Email subject* @param content * Email content* @throws AddressException * @throws MessagingException */ public void send(String recipient, String subject, Object content) throws AddressException, MessagingException { // Create mime type mail final MimeMessage message = new MimeMessage(session); // Установить сообщение отправителя.setFrom (new InternetAddress (Authenticator.getUserName ())); // установить сообщение получателя. SetRecipient (ReceientType.to, New InternetAddress (получатель)); // Установить тематическое сообщение.setsubject (субъект); // Установить сообщение содержимого сообщения. SetContent (content.toString (), "text/html; charset = utf-8"); // отправить транспорт.send (сообщение); } / ** * ОБРАЗОВАНИЕ ЭЛЕКТА * * * @param получателей * получатели * @param субъект * Субъект * @param content * content * @throws addressexception * @throws messagingexception * / public void send (list <String> получатели, строковая субъект, объектный содержимое) Throws addressexception, messagingException {// Создание типа mime mistecom // Установить сообщение Sender.setFrom (New InternetAddress (Authenticator.getUserName ())); // Установить получатель окончательный int num = получатели. Size (); InternetAddress [] address = new InternetAddress [num]; for (int i = 0; i <num; i ++) {адреса [i] = new InternetAddress (получатели.get (i)); } message.setRecipients (receientType.to, address); // Установить тематическое сообщение.setsubject (субъект); // Установить сообщение содержимого почтового сообщества.setContent (content.toString (), "text/html; charset = utf-8"); // отправить транспорт.send (сообщение); } / ** * Отправить электронную почту * * @param получатель * Адрес электронной почты получателя * @param mail * mail объект * @throws addressexception * @thtrows messagingexception * / public void send (получатель строки, usmemail mail) throws addresexception, messagingexception {send (получатель, mail.getsubject (), mail.getContent ()); } / ** * ОБРАЗОВАНИЕ ЭЛЕКТА * * * @PARAM получателей * Получатели * @param mail * mail объект * @Throws addressexception * @Throws MessagingException * / public void Send (List <string> получатели, SimpleMail Mail) Throws Addresexception, MessagingException {Send -получатели, mail.getSubject (), mail.getContent ()); }}3. Вызов приведенного выше отправителя почтового ящика может построить заводский класс . Заводский класс может инкапсулировать процесс создания, поэтому становится очень удобным получить имя пользователя почтового ящика, прочитав файл конфигурации. Следующий код был написан, когда я писал режим наблюдателя, и он просто кратко продемонстрировал класс завода.
пакет com.mzule.dp.observer.factory; Import com.mzule.dp.observer.constant.mailsendertype; import com.mzule.simplemail.simplemailsender; /*** Фабрика Outbor** @author mzule**/public class mailsendefactory {/*** Служба почтового ящика*/private static sumplemailsender servicesms = null; / *** Получить почтовый ящик** @param Тип почтового ящика Тип* @return Mailbox, который соответствует типу*/ public static simplemailsender getsender (тип mailsendertype) {if (type == mailsendertype.service) {if (servicesms = null) {servicesms = new Simplemailsender ("vivisible@126", "hidman); } return Servicesms; } return null; }}4. Отправить электронную почту или код в режиме наблюдателя, да.
пакет com.mzule.dp.observer.observer; Импорт java.util.arraylist; import java.util.list; import java.util.observable; импорт java.util.observable; import java.util.observable; импорт java.util.observer; import javax.messagingException; import javax.mail.Internete.dressexexex; com.mzule.dp.observer.constant.mailsendertype; import com.mzule.dp.observer.factory.mailsenderfactory; импорт com.mzule.dp.observer.po.product; import com.mzule.simplemail.simplemailsender; ProductObserver ProductObserver реализует Observer {@Override public void update (наблюдаемый OBJ, Object arg) {продукт продукт = null; if (obj экземпляр продукта) {product = (product) obj; } if (arg ancessionof float) {float price = (float) arg; Float уменьшение = product.getPrice () - цена; if (DEMUSES> 0) {// Отправить электронную почту SimpleMailSender SMS = mailSenderFactory .getSender (mailSenderType.service); List <string> получатели = новый ArrayList <string> (); Получатели.add ("[email protected]"); Получатели.add ("[email protected]"); try {for (string получатель: получатели) {sms.send (получатель, «изменение цены», «предметы, которые вы обращаете внимание на« + product.getName () + ». Цена была снижена, от« + product.getPrice () + «yuan» до « + цена +», юань, поток достиг « + снижение +» yuan rmb. }} catch (addresexception e) {e.printstacktrace (); } catch (messagingException e) {e.printstackTrace (); }}}}} 5. Проверьте, было ли электронное письмо успешно отправлено.
Выше приведено весь процесс отправки электронных писем Java, и я надеюсь, что это будет полезно для каждого обучения.