【SpringBoot】郵件服務——發送郵件

如果餓了就喫,困了就睡,渴了就喝,人生就太無趣了
源碼地址:https://github.com/keer123456789/springbootstudy/tree/master/maildemo


1.郵件基礎知識

常見的郵件協議有兩種:SMTPPOP3兩種。它們的工作內容如圖1:
在這裏插入圖片描述
①發信人使用用戶代理來撰寫郵件,用戶代理使用SMTP協議將郵件發送到發送方郵件服務器。
②發送方郵件服務器將郵件放入緩存隊列中,等待發送。
③發送方的郵件服務器發現有等待發送的郵件,就想接收端的郵件服務器建立TCP連接。
④TCP連接建成後,使用SMTP協議發送郵件。郵件發送成功後,關閉TCP連接。
⑤接收端的郵件服務器接收到郵件後,將郵件發到接收者的郵箱中。
⑥收信人打算收信時,調用用戶代理,使用POP3協議將郵件從接收端郵件服務器的郵箱取出。

2.準備工作

使用qq郵箱作爲發送郵箱,需要在郵箱中將POP3SMTP開啓。

  1. 登錄qq郵箱,打開設置,如圖2:
    在這裏插入圖片描述
  2. 點擊賬戶,找到POP3和SMTP服務,點擊開啓,會給一個授權碼,保存好,有大用如圖3:
    在這裏插入圖片描述

3.添加依賴,配置

###3.1 添加依賴
可以在創建項目時勾選,如圖4:
在這裏插入圖片描述

pom.xml中的依賴如下

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

3.2 添加配置

spring.mail.password=**********
spring.mail.username=*******@qq.com
#465 或者 587
spring.mail.port=587
spring.mail.host=smtp.qq.com
spring.mail.default-encoding=UTF-8
  • password:剛剛開啓SMTPPOP3的授權碼,不是登錄密碼
  • username:你的郵箱
  • port:qq郵箱的STMP端口,一般是456或者587

3.發送郵件的四種方式

創建發送郵件的服務接口MailService,代碼如下:

public interface MailService {
    /**
     * 發送簡單的文字郵件
     *
     * @param receiverMail 接受者郵箱
     * @param subject      郵件主題
     * @param content      郵件內容
     */
    void sendSimpleMail(String receiverMail, String subject, String content);

    /**
     * 發送html文件的郵件
     *
     * @param receiverMail 接受者郵箱
     * @param subject      郵件主題
     * @param content      郵件內容
     */
    void sendHtmlMail(String receiverMail, String subject, String content);

    /**
     * 發送帶有附件的郵件
     *
     * @param receiverMail 接受者郵箱
     * @param subject      郵件主題
     * @param content      郵件內容
     * @param filePath     附件文件地址
     */
    void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath);

    /**
     * 發送模板文件
     *
     * @param receiverMail 接受者郵箱
     * @param subject      郵件主題
     * @param user         發送模板信息
     */
    void sendThymeleafMail(String receiverMail, String subject, User user);

}

3.1 發送簡單的文字郵件

其中mailSenderJavaMailSender的實例。

public void sendSimpleMail(String receiverMail, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(senderMail); //設置發送者郵箱
        message.setTo(receiverMail); //設置接受者郵箱 
        message.setSubject(subject); //設置主題
        message.setText(content);    //設置發送內容
        try {
            mailSender.send(message);
            logger.info("簡單郵件已經發送");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("簡單郵件發送失敗!!!");
        }
    }

測試發送:

	@Test
    @DisplayName("發送簡單郵件")
    public void testSimpleMail() {
        mailService.sendSimpleMail("1511***[email protected]", "Test use springboot send mail", "簡單郵件測試文件");
    }

如圖5:
在這裏插入圖片描述

3.2 發送html格式的郵件

其中mailSenderJavaMailSender的實例。

	public void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String filename = file.getFile().getName();
            helper.addAttachment(filename, file);

            mailSender.send(message);
            logger.info("帶附件的郵件已經發送。");

        } catch (MessagingException e) {
            e.printStackTrace();
            logger.error("發送帶附件的郵件時發生異常!");
        }
    }

測試發送:

	@Test
    @DisplayName("發送html郵件")
    public void testHtmlMail() {
        StringBuffer sb = new StringBuffer();
        sb.append("<html><body><h1>使用springboot 發送html郵件 測試文件!!!</h1>")
                .append("<p >測試成功</p>")
                .append("<p >測試時間" + new Date() + "</p></body></html>");
        mailService.sendHtmlMail("1511***[email protected]", "Test use springboot send mail", sb.toString());
    }

如圖6:
在這裏插入圖片描述

3.3 發送帶附件的郵件

其中mailSenderJavaMailSender的實例。

	public void sendAttachmentsMail(String receiverMail, String subject, String content, String filePath) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String filename = file.getFile().getName();
            helper.addAttachment(filename, file);

            mailSender.send(message);
            logger.info("帶附件的郵件已經發送。");

        } catch (MessagingException e) {
            e.printStackTrace();
            logger.error("發送帶附件的郵件時發生異常!");
        }

    }

測試代碼:

	@Test
    @DisplayName("發送附件郵件")
    public void testAttachmentsMail() {
        String path = "./testMailFile.txt";
        StringBuffer sb = new StringBuffer();
        sb.append("<html><body><h1>使用springboot 發送附件郵件 測試文件!!!</h1>")
                .append("<p >測試成功</p>")
                .append("<p >測試時間" + new Date() + "</p></body></html>");
        mailService.sendAttachmentsMail("[email protected]", "Test use springboot send mail", sb.toString(), path);
    }

結果如圖7:
在這裏插入圖片描述

3.4 發送thymeleaf模板郵件

  1. 引入Thymeleaf的依賴
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 創建mail.html模板文件
    resources/templates文件加下創建mail.html模板文件
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<bo
<p>hello 歡迎加入 Springboot大家庭,您的入職信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>工號</td>
        <td th:text="${num}"></td>
    </tr>
    <tr>
        <td>部門</td>
        <td th:text="${department}"></td>
    </tr>
</table>
<div style="color: #ff1a0e">一起學習,共同努力!!</div>
</body>
</html>
  1. 創建相應的對象類User
    根據模板文件創建相應的對象類
	public class User {
	    private String name;
	    private String num;
	    private String department;
	
	    public User() {
	    }
	
	    public String getName() {
	        return name;
	    }
	
	    public String getNum() {
	        return num;
	    }
	
	    public String getDepartment() {
	        return department;
	    }
	
	    public void setName(String name) {
	        this.name = name;
	    }
	
	    public void setNum(String num) {
	        this.num = num;
	    }
	
	    public void setDepartment(String department) {
	        this.department = department;
	    }
	}
	
  1. 郵件發送代碼
	public void sendThymeleafMail(String receiverMail, String subject, User user) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(senderMail);
            helper.setTo(receiverMail);
            helper.setSubject(subject);

            Context context = new Context();
            context.setVariable("username", user.getName());
            context.setVariable("num", user.getNum());
            context.setVariable("department", user.getDepartment());
            String process = templateEngine.process("mail.html", context);

            helper.setText(process, true);
            mailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
  1. 測試代碼
	@Test
    @DisplayName("發送模板html郵件")
    public void testThymeleafMail() {
        User user = new User();
        user.setName("keer");
        user.setNum("135");
        user.setDepartment("mail");
        mailService.sendThymeleafMail("1511***[email protected]", "Test use springboot send mail", user);
    }

如圖8
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fWE2CGqO-1583589905995)(img/11.png)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章