SpringBoot郵件推送功能

鞠躬,道歉

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

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

以前一個unity3D項目的展現視頻

正題

挺長時間了,一直在學Spring、SpringMVC、SpringBoot、Mybatis這些,可是感受學了蠻久但不精通,也就不敢亂分享高深的。如今在作一個系統,須要發送郵件給用戶,網上找了一圈相關博客,參考大佬作了本身的一個記錄。也藉機迴歸一週一更的狀態,不寫點東西對不起你們,嘿嘿。java

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

介紹

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

引入pom.xml依賴

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

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

請修改username及password爲你的發件郵箱,各平臺發件密碼規格不同,切須要卡通smtp功能,請看各平臺要求。
以前用QQ郵箱要求配置後,測試好屢次都沒法發送,建議使用其餘郵箱,筆者用163郵箱,但各位注意163郵箱默認在郵件後附帶推廣,記得在設置中關閉,以前測試的時候很坑。web

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 便可發送郵件
結果以下:
spring

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

請看如下代碼,或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_Studyapp

說明

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

新的開始,再也不頹廢。
謝謝你們spring-boot


以上

相關文章
相關標籤/搜索