Préface
Le code pour l'envoi de l'e-mail a été copié directement à partir d'une application précédente. Le service de messagerie Tencent que j'ai utilisé dans le passé n'a aucun problème avec l'exécution du programme. Plus tard, après l'avoir modifié au service de courrier Office365 de Microsoft, j'ai rencontré deux problèmes.
Question 1, Paramètres de chiffrement TLS
Les informations d'exception sont les suivantes:
Exception dans le thread "Main" com.sun.mail.smtp.smtpsendFailedException: 530 5.7.57 SMTP; Le client n'a pas été authentifié pour envoyer un courrier anonyme pendant le courrier de
C'est plus facile à résoudre. Après avoir trouvé des informations, ajoutez la configuration suivante:
mail.smtp.starttls.enable = true
Question 2: Le protocole rapide est nul:
Les informations d'exception sont les suivantes:
Exception dans Thread "Main" javax.mail.nosuchproviderexception: protocole invalide: null sur javax.mail.session.getprovider (session.java:449) à javax.mail.session.getTransport (session.java:667) à javax.mail.Session.getTransport (session.java:648) ATT javax.mail.session.gettransport (session.java:634)
Ce problème n'est rencontré qu'après le déploiement de l'application dans un environnement de production. Après inspection, j'ai constaté que le package JAR que j'ai appelé n'était pas la version que j'ai spécifiée dans Maven. Plus tard, il a été confirmé que le package JAR utilisé par l'application était en conflit avec le package JAR utilisé par le conteneur (c'est-à-dire la jetée). La version pot utilisée par le conteneur est plus ancienne, mais les pots du conteneur sont chargés par défaut. Il existe deux façons de résoudre ce problème:
Réécrire le code avec des pots qui dépendent des conteneurs;
Mettez à jour le pot du conteneur.
Le deuxième choix est quelque peu dangereux, alors utilisez la première option, modifiez simplement une ligne:
Transport Transport = Session.getTransport ("SMTP");Ce problème se produira dans javax.mail version 1.4. Plus tard, les versions supérieures utiliseront le protocole SMTP pour envoyer des e-mails par défaut.
Programme modifié:
Package com.zhyea.zytools; import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.Session; import javax.mail.transport; chaîne finale mail_smtp_host = "smtp.exmail.qq.com"; entier final statique privé Mail_smtp_port = 587; Private statique final booléen mail_smtp_auth = true; chaîne finale statique privée mail_smtp_user = "[email protected]"; chaîne finale statique privée mail_smtp_password = "Robinzhyea"; Propriétés statiques privées Props = nouvelles propriétés (); 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); } / ** * Envoyer un e-mail * / public static void send (String to, title de chaîne, contenu de la chaîne) {try {session session = session.getInstance (accessoires); // Créer un nouvel objet de message de session MimEMessage Message.SetFrom (new Internetddress (mail_smtp_password)) Message.SetReccipient (message.recipentType.to, new InternetAddress (TO)); // Définissez le destinataire et définissez son type de réception sur // Définir le contenu du message // message.seTTeTXt (MailContent); // Envoyer un e-mail de texte en clair TODO Message.SetSubject (Title); // Définissez le titre Message.SetContent (Content, "Text / Html; charSet = GBK"); // Envoi HTML Mail, le style de contenu est plus riche message.SentDate (new Date ()); // Définissez le message d'heure d'envoi.SaveChanges (); // Informations de messagerie de stockage // Envoyer un e-mail Transport = Session.getTransport ("SMTP"); transport.connect (mail_smtp_user, mail_smtp_password); Transport.SendMessage (message, message.getAllrecicipients ()); // Envoyer un e-mail, le deuxième paramètre est toutes les adresses du destinataire SET Transport.Close (); } catch (exception e) {e.printStackTrace (); }}} package com.zhyea.zytools; import java.util.date; import java.util.properties; Importer javax.mail.mesage; import javax.mail.sses; importer javax.mail.transport; import javax.mail.internet.internetAddress; import javax.mail.internet.mimeMessage; classe publique MailSender {chaîne finale statique privée Mail_smtp_host = "smtp.exmail.qq.com"; entier final statique privé Mail_smtp_port = 587; Private statique final booléen mail_smtp_auth = true; chaîne finale statique privée mail_smtp_user = "[email protected]"; chaîne finale statique privée mail_smtp_password = "Robinzhyea"; Propriétés statiques privées Props = nouvelles propriétés (); 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); } / ** * Envoyer un e-mail * / public static void send (String to, title de chaîne, contenu de la chaîne) {try {session session = session.getInstance (accessoires); // Créer un nouvel objet de message de session MimEMessage Message.SetFrom (new Internetddress (mail_smtp_password)) Message.SetReccipient (message.recipentType.to, new InternetAddress (TO)); // Définissez le destinataire et définissez son type de réception sur // Définir le contenu du message // message.seTTeTXt (MailContent); // Envoyer un e-mail de texte en clair TODO Message.SetSubject (Title); // Définissez le titre Message.SetContent (Content, "Text / Html; charSet = GBK"); // Envoi HTML Mail, le style de contenu est plus riche message.SentDate (new Date ()); // Définissez le message d'heure d'envoi.SaveChanges (); // Informations de messagerie de stockage // Envoyer un e-mail Transport = Session.getTransport ("SMTP"); transport.connect (mail_smtp_user, mail_smtp_password); Transport.SendMessage (message, message.getAllrecicipients ()); // Envoyer un e-mail, le deuxième paramètre est toutes les adresses du destinataire SET Transport.Close (); } catch (exception e) {e.printStackTrace (); }}}
Ce qui précède est tout le contenu de cet article. J'espère que le contenu de cet article sera utile à l'étude et au travail de chacun.