Maison  >  Article  >  Java  >  Exemple d'utilisation de JavaMailSender pour envoyer des e-mails dans Spring Boot (code source joint)

Exemple d'utilisation de JavaMailSender pour envoyer des e-mails dans Spring Boot (code source joint)

黄舟
黄舟original
2017-03-09 10:10:201981parcourir

Cet article présente principalement des exemples d'utilisation de JavaMailSender pour envoyer des e-mails dans Spring Boot. Je pense que de nombreux développeurs qui ont utilisé Spring savent que Spring fournit une interface JavaMailSender très simple à utiliser pour envoyer des e-mails. La configuration automatique est également fournie dans le module Starter de Spring Boot. Les amis dans le besoin peuvent s'y référer.

Démarrage rapide

Introduisez la dépendance spring-boot-starter-mail dans pom.xml dans le projet Spring Boot :

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Comme les autres modules de configuration automatisés, après avoir terminé l'introduction des dépendances, il vous suffit de configurer le contenu de l'attribut correspondant dans application.properties .

Prenons l'exemple de la boîte aux lettres QQ et ajoutons la configuration suivante dans application.properties (note pour remplacer votre nom d'utilisateur et votre mot de passe) :

spring.mail.host=smtp.qq.com
spring.mail.username=用户名
spring.mail.password=密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

Utilisez les tests unitaires pour envoyer un simple email :

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {
 @Autowired
 private JavaMailSender mailSender;
 @Test
 public void sendSimpleMail() throws Exception {
 SimpleMailMessage message = new SimpleMailMessage();
 message.setFrom("dyc87112@qq.com");
 message.setTo("dyc87112@qq.com");
 message.setSubject("主题:简单邮件");
 message.setText("测试邮件内容");
 mailSender.send(message);
 }
}

Ici, un simple email est envoyé. exécuter le test unitaire et voir comment cela fonctionne ?

« Étant donné que le module de démarrage de Spring Boot fournit une configuration automatisée, après avoir introduit la dépendance spring-boot-starter-mail, une instance JavaMailSender sera créée en fonction du contenu du fichier de configuration, afin que nous puissions la configurer directement lorsque nécessaire Utilisez @Autowired directement pour introduire l'objet d'envoi de courrier »

Utilisation avancée

Dans l'exemple ci-dessus, nous utilisons SimpleMailMessage. utilisé pour un simple envoi d'e-mails, mais en utilisation réelle, nous pouvons également apporter des pièces jointes, ou utiliser le module email, etc. À l'heure actuelle, nous devons utiliser MimeMessage pour définir un contenu de courrier électronique plus complexe. Implémentons-le dans l'ordre.

Envoyer la pièce jointe

Ajoutez le cas de test suivant au test unitaire ci-dessus (envoyer un e-mail avec pièce jointe via MimeMessageHelper) :

@Test
public void sendAttachmentsMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 helper.setSubject("主题:有附件");
 helper.setText("有附件的邮件");
 FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
 helper.addAttachment("附件-1.jpg", file);
 helper.addAttachment("附件-2.jpg", file);
 mailSender.send(mimeMessage);
}

Intégrer des ressources statiques

En plus d'envoyer des pièces jointes, nous souhaiterons peut-être intégrer des ressources statiques telles que des images dans le contenu de l'e-mail pour obtenir Pour une meilleure expérience de lecture de l'e-mail, au lieu de visualiser des images spécifiques de la pièce jointe, le cas de test suivant montre comment intégrer des ressources statiques dans le corps de l'e-mail via MimeMessageHelper.

@Test
public void sendInlineMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 helper.setSubject("主题:嵌入静态资源");
 helper.setText("<html><body><img src=\"cid:weixin\" ></body></html>", true);
 FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
 helper.addInline("weixin", file);
 mailSender.send(mimeMessage);
}

Ce qu'il faut noter ici, c'est que le nom de la ressource weixin dans la fonction addInline doit correspondre au cid:weixin dans le texte

Modèles d'e-mails

Habituellement, lorsque nous utilisons des services d'envoi d'e-mails, il existe certains scénarios fixes, tels que la réinitialisation du mot de passe, la confirmation de l'inscription, etc., et seulement une petite partie du le contenu envoyé à chaque utilisateur peut changer. Par conséquent, nous utiliserons souvent un moteur de modèles pour définir des modèles pour différents types d'e-mails, de sorte que nous n'ayons besoin que de remplacer les paramètres modifiés lors de l'envoi.

Il est également très simple d'utiliser le moteur de modèles de Spring Boot pour implémenter l'envoi d'e-mails par modèle. Prenons Velocity comme exemple pour l'implémenter.

Introduisez les dépendances du module de vélocité :

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-velocity</artifactId>
</dependency>

Sous ressources/templates/, créez une page modèle template.vm :

<html>
<body>
 <h3>你好, ${username}, 这是一封模板邮件!</h3>
</body>
</html>

Lorsque nous développions des applications Web dans Spring Boot auparavant, nous avons mentionné que dans la configuration automatisée de Spring Boot, les modèles se trouvent dans le dossier ressources/modèles/ répertoire par défaut.

Enfin, nous ajoutons un scénario de test pour l'envoi d'e-mails de modèles au test unitaire, comme suit :

@Test
public void sendTemplateMail() throws Exception {
 MimeMessage mimeMessage = mailSender.createMimeMessage();
 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
 helper.setFrom("dyc87112@qq.com");
 helper.setTo("dyc87112@qq.com");
 helper.setSubject("主题:模板邮件");
 Map<String, Object> model = new HashedMap();
 model.put("username", "didi");
 String text = VelocityEngineUtils.mergeTemplateIntoString(
 velocityEngine, "template.vm", "UTF-8", model);
 helper.setText(text, true);
 mailSender.send(mimeMessage);
}

Essayez de l'exécuter, vous pouvez simplement recevoir le contenu à votre bénéfice, didi, ceci est un modèle d'e-mail . Ici, nous remplaçons la variable ${username} dans le modèle dans le contenu de l'e-mail en passant le paramètre username.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn