鞠躬,道歉
抱歉,遲到了近一年的更新,這一年挺忙的,發生了很多事情,就厚臉皮拖更了,抱歉。
現在狀態回來了,打算分享下近期學到的東西,這一年期間學到的東西可能會隨意更新,其實也就是玩了下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,有刪改及自我實操問題匯總。
附
新的開始,不再頹廢。
謝謝大家
以上
