Предисловие
Код для отправки электронной почты был скопирован непосредственно из предыдущего заявления. У стойки электронной почты, которую я использовал в прошлом, нет проблем с выполнением программы. Позже, после изменения его в Microsoft Office365 Mail Service, я столкнулся с двумя проблемами.
Вопрос 1, Настройки шифрования TLS
Информация об исключении заключается в следующем:
Исключение в потоке "Main" com.sun.mail.smtp.smtpsendfailedException: 530 5.7.57 SMTP; Клиент не был аутентифицирован для отправки анонимной почты во время почты
Это легче решить. После поиска некоторой информации добавьте следующую конфигурацию:
mail.smtp.starttls.enable = true
ВОПРОС 2: Протокол быстрых
Информация об исключении заключается в следующем:
Исключение в ветке "Main" javax.mail.nosuchproviderexception: недействительный протокол: null at javax.mail.session.getprovider (session.java:449) на javax.mail.session.gettranspor javax.mail.session.getTransport (session.java:634)
Эта проблема сталкивается только после развертывания приложения в производственную среду. После проверки я обнаружил, что пакет JAR, который я назвал, не был версией, которую я указал в Maven. Позже было подтверждено, что пакет JAR, используемый приложением, в конфликте с пакетом JAR, используемым контейнером (то есть причал). Версия JAR, используемая контейнером, старше, но банки контейнера загружаются по умолчанию. Есть два способа решить эту проблему:
Переписать код с банками, которые зависят от контейнеров;
Обновите банку контейнера.
Второй выбор несколько опасен, поэтому используйте первый вариант, просто измените одну строку:
Транспорт Transport = Session.getTransport ("SMTP");Эта проблема возникнет в javax.mail версии 1.4. Позже, более высокие версии будут использовать SMTP -протокол для отправки электронных писем по умолчанию.
Модифицированная программа:
пакет com.zhyea.zytools; import java.util.date; import java.util.properties; импорт javax.mail.message; импорт javax.mail.session; импорт javax.mail.transport; import javax.mail.internet.internetadress; import.mail.mail.mail.mail.Internet.InternetDress; Статическая конечная строка mail_smtp_host = "smtp.exmail.qq.com"; Частное статическое окончательное целое число mail_smtp_port = 587; Частный статический окончательный логический Mail_smtp_auth = true; частная статическая конечная строка mail_smtp_user = "[email protected]"; частная статическая конечная строка mail_smtp_password = "robinzhyea"; частные статические свойства реквизит = новые свойства (); static {props.put ("mail.smtp.host", mail_smtp_host); props.put ("mail.smtp.auth", mail_smtp_auth); props.put ("mail.smtp.user", mail_smtp_user); props.put ("mail.smtp.password", mail_smtp_password); props.put ("mail.smtp.starttls.enable", true); }/*** Отправить электронную почту*/public static void Send (String to, название строки, строка содержимого) {try {session = session.getinstance (rops); // Создание почтового сеанса miMemessage message = new mimemessage (session); // Создание объекта сообщения из почтового сеанса. Setrom (New InternetDress (mail_smtp_password); message.setRecipient (message.recipienttype.to, new InternetAddress (to)); // Установить получателя и установить его тип получения на // Установить содержимое сообщения // message.settext (mailContent); // Отправить простое текстовое электронное письмо todo message.setsubject (title); // Установить заголовок. // Отправить html mail, стиль контента является более богатым сообщением. SetsEntDate (new Date ()); // Установить время отправки. transport.connect (mail_smtp_user, mail_smtp_password); transport.sendmessage (message, message.getallrecipents ()); // Отправить электронное письмо, второй параметр - все установлено адреса получателя Transper.close (); } catch (Exception e) {e.printstackTrace (); }}} пакет com.zhyea.zytools; импортировать java.util.date; импортировать java.util.properties; Импорт javax.mail.message; импорт javax.mail.session; import javax.mail.transport; импорт javax.mail.internet.internetDdress; импорт javax.mail.internet.mimemessage; открытый класс MailSender {Private Static Final String mail_smtp_host = "smtp.exmail.qq.com"; Частное статическое окончательное целое число mail_smtp_port = 587; Частный статический окончательный логический Mail_smtp_auth = true; частная статическая конечная строка mail_smtp_user = "[email protected]"; частная статическая конечная строка mail_smtp_password = "robinzhyea"; частные статические свойства реквизит = новые свойства (); static {props.put ("mail.smtp.host", mail_smtp_host); props.put ("mail.smtp.auth", mail_smtp_auth); props.put ("mail.smtp.user", mail_smtp_user); props.put ("mail.smtp.password", mail_smtp_password); props.put ("mail.smtp.starttls.enable", true); }/*** Отправить электронную почту*/public static void Send (String to, название строки, строка содержимого) {try {session = session.getinstance (rops); // Создание почтового сеанса miMemessage message = new mimemessage (session); // Создание объекта сообщения из почтового сеанса. Setrom (New InternetDress (mail_smtp_password); message.setRecipient (message.recipienttype.to, new InternetAddress (to)); // Установить получателя и установить его тип получения на // Установить содержимое сообщения // message.settext (mailContent); // Отправить простое текстовое электронное письмо todo message.setsubject (title); // Установить заголовок. // Отправить html mail, стиль контента является более богатым сообщением. SetsEntDate (new Date ()); // Установить время отправки. transport.connect (mail_smtp_user, mail_smtp_password); transport.sendmessage (message, message.getallrecipents ()); // Отправить электронное письмо, второй параметр - все установлено адреса получателя Transper.close (); } catch (Exception e) {e.printstackTrace (); }}}
Выше всего содержание этой статьи. Я надеюсь, что содержание этой статьи будет полезно для каждого обучения и работы.