Vorwort
Der Code zum Senden der E -Mail wurde direkt aus einer früheren Bewerbung kopiert. Der Tencent -E -Mail -Service, den ich in der Vergangenheit verwendet habe, hat keine Probleme mit der Ausführung des Programms. Nachdem ich es an Microsofts Office365 -Mail -Dienst geändert hatte, stieß ich auf zwei Probleme.
Frage 1, TLS -Verschlüsselungseinstellungen
Die Ausnahmeinformationen sind wie folgt:
Ausnahme im Thread "Haupt" com.sun.mail.smtp.smtppendfailedException: 530 5.7.57 SMTP; Der Kunde wurde nicht authentifiziert, anonyme Mail während Mail von zu senden
Dies ist einfacher zu lösen. Fügen Sie nach dem Finden einiger Informationen die folgende Konfiguration hinzu:
mail.smtp.starttls.enable = true
Frage 2: Eingehend -Protokoll ist null:
Die Ausnahmeinformationen sind wie folgt:
Ausnahme in Thread "Haupt" javax.mail javax.mail.session.getTransport (Session.java:634)
Dieses Problem tritt erst nach der Bereitstellung der Anwendung in einer Produktionsumgebung auf. Nach der Inspektion stellte ich fest, dass das von mir angerufene JAR -Paket nicht die Version war, die ich in Maven angegeben habe. Später wurde bestätigt, dass das von der Anwendung verwendete JAR -Paket mit dem vom Container verwendeten JAR -Paket (d. H. Jetty) in Konflikt gerät. Die vom Container verwendete JAR -Version ist älter, die Gläser des Containers werden jedoch standardmäßig geladen. Es gibt zwei Möglichkeiten, dieses Problem zu lösen:
Neu schreiben Code mit Gläser, die von Containern abhängen;
Aktualisieren Sie das Glas des Containers.
Die zweite Wahl ist etwas gefährlich. Verwenden Sie also die erste Option. Ändern Sie einfach eine Zeile:
Transport transport = session.getTransport ("SMTP");Dieses Problem tritt in Javax.Mail Version 1.4 auf. Später verwenden höhere Versionen das SMTP -Protokoll, um standardmäßig E -Mails zu senden.
Modifiziertes Programm:
Paket com.zhyea.zytools; import java.util.date; import Java.util.properties; import Javax.mail.Message; Import Javax.Mail.Session; importieren javax.mail.mail.Mail.Mail. endgültige Zeichenfolge mail_smtp_host = "SMTP.Exmail.qq.com"; private statische endgültige Ganzzahl mail_smtp_port = 587; private statische endgültige boolean mail_smtp_auth = true; private statische endgültige String mail_smtp_user = "[email protected]"; private statische endgültige Zeichenfolge mail_smtp_password = "Robinzhyea"; private statische Eigenschaften Requisiten = neue Eigenschaften (); 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); }/*** E -Mail senden*/public static void send (String an, String -Titel, String -Inhalt) {try {session session = session message.setRecipient (Message.RecipientType.to, New InternetAddress (to)); // Setzen Sie den Empfänger und setzen Sie den Empfangstyp auf // den Nachrichteninhalt // message.setText (mailcontent) festlegen. // Senden Sie Plain Text -E -Mail todo message // HTML -Mail senden, der Inhaltsstil ist eine reichhaltigere Nachricht. transport.connect (mail_smtp_user, mail_smtp_password); transport.sendMessage (message, message.getAllrecipients ()); // E -Mail senden, der zweite Parameter ist alle festgelegt. Empfängeradressen transport.close (); } catch (Ausnahme e) {e.printstacktrace (); }}} Paket com.zhyea.zytools; Import Java.util.date; Import Java.util.Properties; import javax.mail.message; import javax.mail.Session; import Javax.mail.transport; import Javax.mail.Internet.Internetaddress; Import Javax.mail.internet.Mimemessage; public class mailSender {private statische endgültige Zeichenfolge mail_smtp_host = "SMTP.Exmail.qq.com"; private statische endgültige Ganzzahl mail_smtp_port = 587; private statische endgültige boolean mail_smtp_auth = true; private statische endgültige String mail_smtp_user = "[email protected]"; private statische endgültige Zeichenfolge mail_smtp_password = "Robinzhyea"; private statische Eigenschaften Requisiten = neue Eigenschaften (); 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); }/*** E -Mail senden*/public static void send (String an, String -Titel, String -Inhalt) {try {session session = session message.setRecipient (Message.RecipientType.to, New InternetAddress (to)); // Setzen Sie den Empfänger und setzen Sie den Empfangstyp auf // den Nachrichteninhalt // message.setText (mailcontent) festlegen. // Senden Sie Plain Text -E -Mail todo message // HTML -Mail senden, der Inhaltsstil ist eine reichhaltigere Nachricht. transport.connect (mail_smtp_user, mail_smtp_password); transport.sendMessage (message, message.getAllrecipients ()); // E -Mail senden, der zweite Parameter ist alle festgelegt. Empfängeradressen transport.close (); } catch (Ausnahme e) {e.printstacktrace (); }}}
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird für das Studium und die Arbeit aller hilfreich sein.