L'envoi de mails via Spring boot “printemps-amorçage-starter-mail”
Je suis en train d'envoyer des e-mails à l'aide de spring boot, mais je suis arriver:
java.lang.UnsupportedOperationException: Method not yet implemented
at javax.mail.internet.MimeMessage.<init>(MimeMessage.java:89)
at org.springframework.mail.javamail.SmartMimeMessage.<init>(SmartMimeMessage.java:52)
at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:325)
J'ai utilisé cette maven entrée:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.6.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
application.propriétés:
spring.mail.host=smtp.gmail.com
spring.mail.port= 25
spring.mail.username= test
spring.mail.password= test
Et Mon code:
@Autowired
private JavaMailSender javaMailSender;
private void send() {
MimeMessage mail = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mail, true);
helper.setTo("[email protected]");
helper.setReplyTo("someone@localhost");
helper.setFrom("someone@localhost");
helper.setSubject("Lorem ipsum");
helper.setText("Lorem ipsum dolor sit amet [...]");
} catch (MessagingException e) {
e.printStackTrace();
} finally {}
javaMailSender.send(mail);
//return helper;
}
Ce qui semble être tout droit vers l'avant, mais ne faites pas ce qui me manque!
Vous devez vous connecter pour publier un commentaire.
Ma recommandation est d'utiliser le c'.ozimov:spring-boot-e-mail-core de la bibliothèque, qui cache tous ces implémentations derrière un seul composant appelé
EmailService
- eh bien, je suis également à l'élaboration de la bibliothèque :).Votre exemple serait:
Avec le suivant
application.properties
:Il prend également en charge certains moteurs de template, comme Freemarker, Moustache et de Galets, alors que vous pouvez l'étendre à utiliser plusieurs moteurs de template. En outre, il prend également en charge l'email de planification et de hiérarchisation des priorités (par exemple, une haute priorité pour la récupération de mot de passe et la faible priorité pour la newsletter.
Il y a un article sur LinkedIn expliquant comment l'utiliser. Il est ici.
Email
objet est envoyé, il est converti en un javax.mail.internet.MimeMessage
. Jusqu'à présent, je vois deux en-têtes définis dans la conversion:Disposition-Notification-To
etReturn-Receipt-To
qui sont définies par l'intermédiaire de laEmail
méthodesgetDepositionNotificationTo()
etgetReceiptTo()
, respectivement. Si vous pensez qu'il est utile d'avoir des en-têtes supplémentaires, il pourrait être une bonne idée d'ouvrir un sujet sur GitHub sur le projet de référentiel.your.smtp.com
?Vous avez une deuxième version de
javax.mail.internet.MimeMessage
sur le chemin de la classe, en plus de celle qui est tirée dans la viaspring-boot-starter-mail
. D'un commun coupable est de Geronimo JavaMail spec jar. Selon le bocal, vous devez exclure de dépendances de votre application. Si vous ne savez pas d'où ça vient, l'exécution de votre application avec-verbose:class
vais vous le dire.mvn spring-boot:run
etjava -jar
. Dans le cas où elle travaille, la bonne version de la JavaMail classes seront sur le chemin de la classe avant la mauvaise version et vice-versa dans le cas où il échoue.Ne pas utiliser
javaMailSender.createMimeMessage();
essayez d'utiliser
MimeMessagePreparator
&MimeMessageHelper
au lieuCela a fonctionné pour moi:
Il ne semblait exiger cette dépendance:
Et j'ai mis des propriétés:
Pour info, le port que vous choisissez n'est pas arbitraire, 465 a été nécessaire pour Gmail, par exemple. Et vous avez aussi besoin de faire des changements à l'envoi du compte Gmail de l'obtenir pour fonctionner correctement. Je l'ai fait il y a longtemps, mais je suis positif que j'ai vu cette exception avant. Le lambda utilisé dans cet exemple peut être utile dans la résolution de ce problème, mais malheureusement je ne me souviens pas. Hésitez pas à me contacter si vous avez besoin d'éclaircissements ou souhaitez voir plus de code de l'exemple que j'ai eu à travailler.