SpringBoot郵件推送功能


鞠躬,道歉

抱歉,遲到了近一年的更新,這一年挺忙的,發生了很多事情,就厚臉皮拖更了,抱歉。
現在狀態回來了,打算分享下近期學到的東西,這一年期間學到的東西可能會隨意更新,其實也就是玩了下C# + unity3D,本來打算做個長期項目,但是申報比賽連預選都沒有過,預選都是墊底的。項目展示視頻見這個。還有就是和學院老師做了智慧博物館的項目,文物的建模與AR以及互動小游戲都有參與。

but,從去年10月份開始又重新開始學Java和SSM的一些東西,上面說的以后應該沒有機會玩了,AR倒是有時間可以分享給大家,但是項目那些演示視頻暫時不方便公開。教程的話網上蠻多的,我用的是Vuforia這個,和unity3D契合度蠻高的。想玩的朋友可以去弄弄,挺簡單的。

之前一個unity3D項目的展示視頻

正題

挺長時間了,一直在學Spring、SpringMVC、SpringBoot、Mybatis這些,但是感覺學了蠻久但不精通,也就不敢亂分享高深的。現在在做一個系統,需要發送郵件給用戶,網上找了一圈相關博客,參考大佬做了自己的一個記錄。也借機回歸一周一更的狀態,不寫點東西對不起大家,嘿嘿。

在我們平時,時常需要利用郵箱注冊各種各樣的賬號或者接收一些通知信息。這使得一個功能完善的系統必然會有一個郵件發送功能。下面就是我近期學習的一個郵件發送系統demo。

介紹

Spring項目中,郵件發送使用Spring提供的org.springframework.mail.javamail.JavaMailSender,它提供了一些簡單易用的方法,可以發送簡單郵件帶附件的郵件HTML格式的郵件、以及依靠固定模板的郵件

引入pom.xml依賴

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

配置(記得重新配置發件郵箱及密碼)

請修改username及password為你的發件郵箱,各平台發件密碼規格不一樣,切需要卡通smtp功能,請看各平台要求。
之前用QQ郵箱要求配置后,測試好多次都無法發送,建議使用其他郵箱,筆者用163郵箱,但各位注意163郵箱默認在郵件后附帶推廣,記得在設置中關閉,之前測試的時候很坑。

server:
  port: 8080

spring:
  mail:
    host: smtp.163.com
    username: 123456789@163.com
    password: 123456789
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

發送簡單郵件代碼展示

// 簡單郵件
@RequestMapping("sendSimpleEmail")
public String sendSimpleEmail() {
    try {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(toEmail); // 接收地址,可傳入數組進行群發
        message.setSubject("新年好"); // 標題
        message.setText("新年快樂,完事大吉\n 新年新氣象"); // 內容
        javaMailSender.send(message);
        return "發送成功";
    } catch (Exception e) {
        e.printStackTrace();
        return e.getMessage();
    }
}

啟動項目,發送 http://localhost:8080/email/sendSimpleEmail 即可發送郵件
結果如下:

完整示例(記得更換目標郵箱)

請看以下代碼,或GitHub地址clone項目查看,有完整注釋。

package com.mxwbq.demo.controller;

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;

/**
 * Created by mxwbq on 2019/3/29.
 */
@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private JavaMailSender javaMailSender;

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

    // 目標郵箱地址,記得更換
    private String toEmail = "123456789@163.com";

    @Autowired
    private TemplateEngine templateEngine;

    // 簡單郵件
    @RequestMapping("sendSimpleEmail")
    public String sendSimpleEmail() {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(toEmail); // 接收地址,可傳入數組進行群發,下同
            message.setSubject("新年好"); // 標題
            message.setText("新年快樂,完事大吉\n 新年新氣象"); // 內容
            javaMailSender.send(message);
            return "發送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    // 發送Html格式郵件
    @RequestMapping("sendHtmlEmail")
    public String sendHtmlEmail() {
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toEmail); // 接收地址
            helper.setSubject("HTML格式的郵件"); // 標題
            // 帶HTML格式的內容
            StringBuffer sb = new StringBuffer(
                    "<h1><p style='color:#42b983'>使用Spring Boot發送HTML格式郵件</p></h1>" +
                    "<p>這里是正文:</p>" +
                    "<p>這里是聽雨軒地址:www.nucode.cn</p>");
            helper.setText(sb.toString(), true);  // 第二個參數 true 代表規定郵件格式為HTML
            javaMailSender.send(message);
            return "發送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    // 發送郵件攜帶附件
    @RequestMapping("sendAttachmentsMail")
    public String sendAttachmentsMail() {
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toEmail); // 接收地址
            helper.setSubject("帶附件的郵件"); // 標題
            helper.setText("詳情參見附件內容!"); // 內容
            // 傳入附件
            FileSystemResource file = new FileSystemResource(new File("src\\main\\resources\\static\\file\\SpringBoot_Email文檔.docx"));
            helper.addAttachment("SpringBoot_Email文檔.docx", file);
            javaMailSender.send(message);
            return "發送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    // 發送附帶靜態資源的郵件
    @RequestMapping("sendInlineMail")
    public String sendInlineMail() {
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toEmail); // 接收地址
            helper.setSubject("帶靜態資源的郵件"); // 標題
            helper.setText("<html><body>生日快樂:<img src='cid:img'/></body></html>", true); // 內容
            // 傳入附件
            FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/禮物.jpg"));
            helper.addInline("img", file);
            javaMailSender.send(message);
            return "發送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    // 發送模板郵件
    @RequestMapping("sendTemplateEmail")
    public String sendTemplateEmail(String registerURL) {
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(toEmail); // 接收地址
            helper.setSubject("郵件模板測試"); // 標題
            // 處理郵件模板
            Context context = new Context();
            context.setVariable("registerURL", registerURL);
            String template = templateEngine.process("register", context);
            helper.setText(template, true);
            javaMailSender.send(message);
            return "發送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

項目GitHub地址

https://github.com/mxbq/SpringBoot_Study

說明

本文參考自MrBird大佬的博客:https://mrbird.cc/Spring-Boot-Email.html,有刪改及自我實操問題匯總。

新的開始,不再頹廢。
謝謝大家


以上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM