SpringBoot學習歷程(十一):SpringBoot2.X集成mail發(fā)送郵件

暫時使用的是Spring提供的org.springframework.mail.javamail.JavaMailSender發(fā)送郵件。

1. 引入依賴

<!--引入郵件依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--引入Thymeleaf依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. 設置郵件配置信息

spring:
  #發(fā)送郵件設置
  mail:
    host: smtp.163.com
    username: xxxxxx@163.com
    #對l63郵箱,password是授權碼
    password: xxxxxx
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

==注意:如果發(fā)送方用的是163郵箱,password對應的是郵箱的授權碼,而不是你的郵箱密碼。==

3. 發(fā)送郵件

3.1 發(fā)送普通文本郵件

EmailController .java

package com.xj.learn.controller;

import com.xj.learn.util.JmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @Description: 發(fā)送郵件類
 * @Author: RabbitsInTheGrass_xj
 * @Date: 2019/10/2 09:39
 */
@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private JmsUtil jmsUtil;

    /**
     * 發(fā)送簡單的郵件
     * @return 結果
     */
    @RequestMapping("sendSimpleEmail")
    public String sendSimpleEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        // 接收地址
        message.setTo("xxxxxx@qq.com");
        // 標題
        message.setSubject("一封普通文本郵件");
        // 內容
        message.setText("我要發(fā)送一份普通文本郵件。");
        return jmsUtil.sendSimpleEmail(message);
    }
}

JmsUtil .java

package com.xj.learn.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

/**
 * @Description: 發(fā)送郵件工具類
 * @Author: RabbitsInTheGrass_xj
 * @Date: 2019/10/2 09:45
 */
@Component
public class JmsUtil {

    private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);

    @Autowired
    private JavaMailSender jms;

    @Value("${spring.mail.username}")
    private String from;

    public String sendSimpleEmail(SimpleMailMessage message) {
        try {
            jms.send(message);
            return "發(fā)送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "發(fā)送失敗";
        }
    }
}

3.2 發(fā)送HTML格式內容的郵件

EmailController .java

    /**
     * 發(fā)送HTML格式內容的郵件
     * @return 發(fā)送結果
     */
    @RequestMapping("sendHtmlEmail")
    public String sendHtmlEmail() {
        // 接收地址
        String toAddress = "xxxxxxx@qq.com";
        // 標題
        String subject = "一封HTML格式內容的郵件";
        // 帶HTML格式的內容
        StringBuilder sb = new StringBuilder("<p style='color:#42b983'>我要發(fā)送一份HTML格式內容的郵件。</p>");
        return jmsUtil.sendHtmlEmail(toAddress,subject,sb.toString());
    }

JmsUtil .java

package com.xj.learn.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.internet.MimeMessage;

/**
 * @Description: 發(fā)送郵件工具類
 * @Author: RabbitsInTheGrass_xj
 * @Date: 2019/10/2 09:45
 */
@Component
public class JmsUtil {

    private static final Logger logger = LoggerFactory.getLogger(JmsUtil.class);

    @Autowired
    private JavaMailSender jms;

    @Value("${spring.mail.username}")
    private String from;

    public String sendHtmlEmail(String toAddress, String subject, String text) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            //true表示發(fā)送HTML格式郵件
            helper.setText(text, true);
            jms.send(message);
            return "發(fā)送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "發(fā)送失敗";
        }
    }
}

3.3 發(fā)送帶附件的郵件

EmailController .java

    /**
     *發(fā)送帶附件的郵件
     * @return 發(fā)送結果
     */
    @RequestMapping("sendAttachmentsMail")
    public String sendAttachmentsMail() {
        // 接收地址
        String toAddress = "xxxxx@qq.com";
        // 標題
        String subject = "一封帶附件的郵件";
        // 內容
        String text = "詳情參見附件內容!";
        // 傳入附件
        FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/file/xxxx.doc"));
        return jmsUtil.sendAttachmentsMail(toAddress,subject,text,file);
    }

JmsUtil .java

    public String sendAttachmentsMail(String toAddress, String subject, String text, FileSystemResource file) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(text);
            helper.addAttachment(file.getFilename(), file);
            jms.send(message);
            return "發(fā)送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "發(fā)送失敗";
        }
    }

3.4 發(fā)送帶靜態(tài)資源的郵件

EmailController .java

    /**
     * 發(fā)送帶靜態(tài)資源的郵件
     * @return 發(fā)送結果
     */
    @RequestMapping("sendInlineMail")
    public String sendInlineMail() {
        // 接收地址
        String toAddress = "xxxxxxx@qq.com";
        // 標題
        String subject = "一封帶靜態(tài)資源的郵件";
        String contentId = "img";
        // 內容
        String text = "<html><body>一份美圖:<img src='cid:" + contentId + "'/></body></html>";
        // 傳入附件
        FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/yourName.jpg"));
        return jmsUtil.sendInlineMail(toAddress,subject,text,file,contentId);
    }

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String text, FileSystemResource file, String contentId) {
        MimeMessage message;
        try {
            message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(text,true);
            //contentId 必須與圖片標簽里cid后的名稱相對應,例如:img
            helper.addInline(contentId, file);
            jms.send(message);
            return "發(fā)送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "發(fā)送失敗";
        }
    }

3.5 使用模板發(fā)送郵件

在發(fā)送驗證碼等情況下可以創(chuàng)建一個郵件的模板,唯一的變量為驗證碼。這個例子中使用的模板解析引擎為Thymeleaf,所以必須引入Thymeleaf依賴。

EmailController .java

    /**
     * 發(fā)送模板郵件
     *
     * @param code 驗證碼
     * @return 發(fā)送結果
     */
    @RequestMapping("sendTemplateEmail")
    public String sendTemplateEmail(String code) {
        //接收地址
        String toAddress = "xxxxx@qq.com";
        //標題
        String subject = "發(fā)送一份模板郵件";
        //郵件模板
        String templateName = "emailTemplate";
        Context context = new Context();
        context.setVariable("code", code);
        return jmsUtil.sendInlineMail(toAddress, subject, templateName, context);

    }

JmsUtil .java

    public String sendInlineMail(String toAddress, String subject, String templateName, Context context) {
        try {
            MimeMessage message = jms.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            // 接收地址
            helper.setTo(toAddress);
            // 標題
            helper.setSubject(subject);
            // 處理郵件模板
            String template = templateEngine.process(templateName, context);
            helper.setText(template, true);
            jms.send(message);
            return "發(fā)送成功";
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return "發(fā)送失敗";
        }
    }

emailTemplate.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>驗證碼郵件模板</title>
</head>
<body>
您好,您的驗證碼為<span th:text="${code}"></span>,請在兩分鐘內使用完成操作。
</body>
</html>

4. 啟動服務驗證

啟動服務后請求各個方法即可。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • ? ?互聯(lián)網(wǎng)發(fā)展到現(xiàn)在,相必大家都知道發(fā)送郵件應該是網(wǎng)站的必備功能之一:用戶注冊發(fā)送郵箱驗證、忘記密碼、監(jiān)控提醒以...
    3d0829501918閱讀 819評論 0 5
  • 一、前言 Spring Email 抽象的核心是 MailSender 接口,MailSender 的實現(xiàn)能夠把 ...
    程序員日常填坑閱讀 448評論 0 1
  • 目錄 電子郵件與Java發(fā)送郵件的歷史 電子郵件原理電子郵件服務器電子郵箱郵件客戶端郵件傳輸協(xié)議郵件格式電子郵件發(fā)...
    西召閱讀 1,209評論 0 2
  • 文章首發(fā)于微信公眾號“己論” 作者:姜譚 己論導讀:觀影結束,幾點雜感。 歡迎關注“己論”~ 晚上飯后去看了《烈火...
    己論閱讀 399評論 0 1
  • 人無完人,物無完物,做就做自己喜歡的人。 沒錢自己去掙,沒本事自己去學,想吃東西自己掏錢買,不祈求別人幫你,但自己...
    Lyra江閱讀 2,484評論 26 77

友情鏈接更多精彩內容