zoukankan      html  css  js  c++  java
  • Spring Boot实现发送邮件

    注意:这篇博客是自己学完发送邮箱之后的一个小总结,不适合新手拿来学习用!


     

    分为三步:

    1.邮箱的设置:在你使用的邮箱内启用客户端SMTP服务

    2.Spring Email:导入jar包;邮箱参数配置;使用JavaMailSender发送邮件

    3.模板引擎:使用Thymeleaf发送HTML邮件

    1.首先发送邮件需要一个代理发送邮件的邮箱,启用SMTP服务:

    改图是使用的新浪邮箱:

    2.在pom.xml中导入jar包(spring-boot-starter-mail):

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

    在项目的配置文件中配置代理发送邮件的邮箱属性:

    1 spring.mail.host=smtp.sina.com
    2 spring.mail.port=465
    3 spring.mail.username=#这里填邮箱地址
    4 spring.mail.password=#这里填邮箱的授权码5 spring.mail.protocol=smtps
    6 spring.mail.properties.mail.smtp.ssl.enable=true

    然后使用JavaMailSender发送邮件:

     1 import org.slf4j.Logger;
     2 import org.slf4j.LoggerFactory;
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.beans.factory.annotation.Value;
     5 import org.springframework.mail.javamail.JavaMailSender;
     6 import org.springframework.mail.javamail.MimeMessageHelper;
     7 import org.springframework.stereotype.Component;
     8 
     9 import javax.mail.MessagingException;
    10 import javax.mail.internet.MimeMessage;
    11 
    12 @Component
    13 public class MailClient {
    14 
    15     private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
    16 
    17     @Autowired
    18     private JavaMailSender mailSender;
    19 
    20     @Value("${spring.mail.username}")
    21     private String from;
    22 
    23     public void sendMail(String to,String subject,String content){
    24         try {
    25             MimeMessage message = mailSender.createMimeMessage();
    26             MimeMessageHelper helper = new MimeMessageHelper(message);
    27             helper.setFrom(from);
    28             helper.setTo(to);
    29             helper.setSubject(subject);
    30             helper.setText(content,true);
    31             mailSender.send(helper.getMimeMessage());
    32         } catch (MessagingException e) {
    33             logger.error("发送邮箱失败:"+e.getMessage());
    34         }
    35 
    36     }
    37 }

    这里看JavaMailSender源码就可以发现这个JavaMailSender只做两件事情

    创建MimeMessage还有发送邮件,如下代码:

     1 public interface JavaMailSender extends MailSender {
     2     MimeMessage createMimeMessage();
     3 
     4     MimeMessage createMimeMessage(InputStream var1) throws MailException;
     5 
     6     void send(MimeMessage var1) throws MailException;
     7 
     8     void send(MimeMessage... var1) throws MailException;
     9 
    10     void send(MimeMessagePreparator var1) throws MailException;
    11 
    12     void send(MimeMessagePreparator... var1) throws MailException;
    13 }

    使用JavaMailSender创建MimeMessage之后可以使用一个名为MimeMessageHelper的类来set参数,然后用JavaMailSender执行发送方法.

    1 MimeMessage message = mailSender.createMimeMessage();
    2 MimeMessageHelper helper = new MimeMessageHelper(message);
    3 helper.setFrom(from);
    4 helper.setTo(to);
    5 helper.setSubject(subject);
    6 helper.setText(content,true);
    7 mailSender.send(helper.getMimeMessage());        

    3.使用Thymeleaf模板引擎发送HTML格式的邮件

    在templates下创建一个html:

     1 <!DOCTYPE html>
     2 <html lang="en" xmlns:th="http://www.thymeleaf.org">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>邮箱示例</title>
     6 </head>
     7 <body>
     8     <p>欢迎你,<span style="color: red" th:text="${username}"></span>!</p>
     9 </body>
    10 </html>

    在测试类中测试:

     1 import com.nowcoder.community.util.MailClient;
     2 import org.junit.Test;
     3 import org.junit.runner.RunWith;
     4 import org.springframework.beans.factory.annotation.Autowired;
     5 import org.springframework.boot.test.context.SpringBootTest;
     6 import org.springframework.test.context.ContextConfiguration;
     7 import org.springframework.test.context.junit4.SpringRunner;
     8 import org.thymeleaf.TemplateEngine;
     9 import org.thymeleaf.context.Context;
    10 
    11 
    12 @RunWith(SpringRunner.class)
    13 @SpringBootTest
    14 @ContextConfiguration(classes = CommunityApplication.class)
    15 public class MailTests {
    16 
    17     @Autowired
    18     private MailClient mailClient;
    19 
    20     @Autowired
    21     private TemplateEngine templateEngine;
    22 
    23     @Test
    24     public void testHtmlMail(){
    25         Context context = new Context();
    26         context.setVariable("username","sunday");
    27 
    28         String content = templateEngine.process("/mail/demo",context);
    29         System.out.println(content);
    30 
    31         mailClient.sendMail("目标邮箱","邮件标题","邮件内容");
    32     }
    33 }

    测试之后邮箱就会发送给目标邮箱!

  • 相关阅读:
    购物车实现原理
    百分百加载动画
    利用CORS实现跨域请求(转载)
    AMD与CMD(转载)
    移动端Web页面问题(转载)
    JQuery的一些简单功能
    js基础3
    Ajax完整篇(转载)
    js基础2
    阮一峰对js的见解(10大缺陷)
  • 原文地址:https://www.cnblogs.com/lkylin/p/13225766.html
Copyright © 2011-2022 走看看