SpringBoot 學習系列(六)
有些其他的檔案 如 Devtools 和 mail元件等可以在下面勾選,也可以自己手動新增
新增完點選生成,會下載一個壓縮包,匯入到 idea即可
正式開始
1、如果剛才沒勾選 mail 則需要新增依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies>
2、在application.properties中新增郵箱配置(注意 配置完畢後把後面的註釋去掉,否則會提示連線不上的錯誤)
把使用者名稱和密碼改成自己郵箱的使用者名稱和密碼 伺服器地址變成郵箱傳送伺服器的地址 如:smtp.126.com
spring.mail.host=smtp.qiye.163.com //郵箱伺服器地址 [email protected] //使用者名稱 spring.mail.password=xxyyooo //密碼 spring.mail.default-encoding=UTF-8 [email protected] //以誰來發送郵件
3、編寫介面和實現類
介面:
package com.emailtest.service; /** * Created by admin * */ public interface MailService { public void sendSimpleMail(String to, String subject, String content); public void sendHtmlMail(String to, String subject, String content); public void sendAttachmentsMail(String to, String subject, String content, String filePath); public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId); }
實現類:
package com.emailtest.service;
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.core.io.FileSystemResource;
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.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* Created by admin
*
*/
@Component
public class MailServiceImpl implements MailService{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private JavaMailSender mailSender;
@Value("${mail.fromMail.addr}")
private String from;
/**
* 傳送文字郵件
* @param to
* @param subject
* @param content
*/
@Override
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
mailSender.send(message);
logger.info("簡單郵件已經發送。");
} catch (Exception e) {
logger.error("傳送簡單郵件時發生異常!", e);
}
}
/**
* 傳送html郵件
* @param to
* @param subject
* @param content
*/
@Override
public void sendHtmlMail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage();
try {
//true表示需要建立一個multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
mailSender.send(message);
logger.info("html郵件傳送成功");
} catch (MessagingException e) {
logger.error("傳送html郵件時發生異常!", e);
}
}
/**
* 傳送帶附件的郵件
* @param to
* @param subject
* @param content
* @param filePath
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath){
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
//helper.addAttachment("test"+fileName, file);
mailSender.send(message);
logger.info("帶附件的郵件已經發送。");
} catch (MessagingException e) {
logger.error("傳送帶附件的郵件時發生異常!", e);
}
}
/**
* 傳送正文中有靜態資源(圖片)的郵件
* @param to
* @param subject
* @param content
* @param rscPath
* @param rscId
*/
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource res = new FileSystemResource(new File(rscPath));
helper.addInline(rscId, res);
mailSender.send(message);
logger.info("嵌入靜態資源的郵件已經發送。");
} catch (MessagingException e) {
logger.error("傳送嵌入靜態資源的郵件時發生異常!", e);
}
}
}
4、在src/main/resources 下建立資料夾templates 存放模板檔案emailTemplate.html
emailTemplate.html檔案的內容如下
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
您好,這是驗證郵件,請點選下面的連結完成驗證,<br/>
<a href="#" th:href="@{ http://www.aaabbb.com/ccc/{id}(id=${id}) }">啟用賬號</a>
</body>
</html>
5、建立測試類EmailtestApplicationTests,用junit單元測試即可收到郵件,完整程式碼如下:
提示:如果需要測試,請把郵箱變成自己的,謝謝
package com.emailtest.emailtest;
import com.emailtest.service.MailService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
/**
* Created by admin
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailtestApplicationTests {
@Autowired
private MailService mailService;
@Autowired
private TemplateEngine templateEngine;
@Test
public void testSimpleMail() throws Exception {
mailService.sendSimpleMail("[email protected]","test simple mail"," hello this is simple mail");
}
@Test
public void testHtmlMail() throws Exception {
String content="<html>\n" +
"<body>\n" +
" <h3>hello world ! 這是一封html郵件!</h3>\n" +
"</body>\n" +
"</html>";
mailService.sendHtmlMail("[email protected]","test simple mail",content);
}
@Test
public void sendAttachmentsMail() {
String filePath="C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";
mailService.sendAttachmentsMail("[email protected]", "主題:帶附件的郵件", "有附件,請查收!", filePath);
}
@Test
public void sendInlineResourceMail() {
String rscId = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";
String content="<html><body>這是有圖片的郵件:<img src=\'cid:" + rscId + "\' ></body></html>";
String imgPath = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";
mailService.sendInlineResourceMail("[email protected]", "主題:這是有圖片的郵件", content, imgPath, rscId);
}
@Test
public void sendTemplateMail() {
//建立郵件正文
Context context = new Context();
context.setVariable("id", "006");
String emailContent = templateEngine.process("emailTemplate", context);
mailService.sendHtmlMail("[email protected]","主題:這是模板郵件",emailContent);
}
}
是不是很簡單?
相關推薦
SpringBoot 學習系列(六)
有些其他的檔案 如 Devtools 和 mail元件等可以在下面勾選,也可以自己手動新增 新增完點選生成,會下載一個壓縮包,匯入到 idea即可 正式開始 1、如果剛才沒勾選 mail 則需要新增依賴 <dependencies> <de
springboot學習系列
創建 ont mage png control 啟動 height 加載 -- 準備環境 1.eclipse 下載 安裝相應的springboot插件(search --->Find或者popular搜索spring插件) 2.安裝後eclipse new P
webservice 教程學習系列(六)——監聽請求,使用eclipse的TCP_IP工具(埠轉發)
有的情況我們本身的開發機可能不能連線網際網路,但是我們需要呼叫一些網際網路的介面,到時候放在生產伺服器就可以直接呼叫。那麼我們繼續使用上次說的直接在dos視窗上面解析wsdl的URL連結就不行了,因為連線不通。 這個時候我們就可以 使用eclipse的這個TCP_IP工具了。 首先
activemq 學習系列(六) activemq 集群
服務 .com active nec style failover ive 準備 mage activemq 集群 activemq 是可以通過 networkConnectors 來實現集群的。 首頁準備多臺 activemq 1:端口號:8161,服務端口號:616
SpringBoot 學習系列(五)
SpringBoot可以讓我們快速的開發一個定時任務程式。 在我們的專案開發過程中,經常需要定時任務來幫助我們來做一些內容,springboot預設已經幫我們實現了,只需要新增相應的註解就可以實現 1、pom包配置 pom包裡面只需要引入springboot start
SpringBoot 學習系列(八)
1、maven配置(web專案 和 thymeleaf模板引擎) <dependency> <groupId>org.springframework.b
Redis學習系列六ZSet(有序列表)及Redis資料結構的過期
一、簡介 ZSet可以說是Redis中最有趣的資料結構了,因為他兼具了Hash集合和Set的雙重特性,也是用的最多的,保證了value值的唯一性的同時,,同時又保證了高效能,最主要的是還可以給每個Value設定Source(權重),那麼我們就可以通過權重進行排序,這在業務上是非常
SpringBoot 學習系列(九)
Spring Boot 專案新增 Docker 支援 在 pom.xml-properties 中新增 Docker 映象名稱 <properties> <docker.image.prefix>springboot</docker.ima
SpringBoot 學習系列(三)
進入如下頁面,點選紅框中的按鈕即可: 2、解壓到某個目錄 3、像配置java環境變數那樣配置Gradle環境變數 3、Path中加入 %GRADLE_HOME%\bin 4、開啟命令列 輸入 gradle -v IDEA中配置: 開啟 fi
SpringBoot 學習系列 | (八)IDEA Mybatis 生成逆向工程(generator)
本篇將主要介紹Mybatis的逆向工程如何在SpringBoot環境上實現。 環境準備 IDEA、SpringBoot、Mybatis 目錄結構 表結構 maven依賴的包與外掛(只貼出Mybatis相關包) <!--mysql資
tensorflow學習系列六:mnist從訓練儲存模型再到載入模型測試
通過前面幾個系列的學習對tensorflow有了一個漸漸親切的感覺,本文主要是從tensorflow模型訓練與驗證的模型進行實踐一遍,以至於我們能夠通過tensorflow的訓練有一個整體的概念。下面主要是從訓練到儲存模型,然後載入模型進行預測。# -*- codin
深度學習系列(六):自編碼網路的特徵學習
在第三節我們已經介紹了 知道了自編碼學習其實就是學習到了輸入資料的隱含特徵,通過新的特徵來表徵原始資料,本節將介紹如何使用這些隱含特徵進行模式分類; 還是以前面的三層自編碼網路: 抽象一下如下: 其中學習到的權值係數W1與W1’是不一樣的,我
SpringBoot 學習系列 配置隨機埠
一 springboot 配置埠的方式一般有3種 1 實現 EmbeddedServletContainerCustomizer 介面並重寫 customize方法 @Override public void customize(ConfigurableEmbedde
SpringBoot學習系列之一:配置自動化
引言 大家都知道SpringBoot簡化了Spring開發工作,讓開發者不用再去面對繁瑣的配置,可以使我們可以迅速上手進行開發,將重點放在業務邏輯的實現上。但也正因為這樣,使得開發者容易忽略對於其背後原理的理解。我們可能知道怎麼用,但是實際上並不知道Sprin
SpringBoot 學習系列 | (九)SpringBoot快速整合Redis
話不多說,直接貼程式碼: Maven pom.xml引入依賴 <!--Redis--> <dependency> <groupId>org.springframework.boot</groupId> <
Vue.js學習系列六——Vue單元測試Karma+Mocha學習筆記
在使用vue-cli建立專案的時候,會提示要不要安裝單元測試和e2e測試。既然官方推薦我們使用這兩個測試框架,那麼我們就動手去學習實踐一下他們吧。 簡介 Karma Karma是一個基於Node.js的JavaScript測試執行過程管理工
Java NIO學習系列六:Java中的IO模型
前文中我們總結了linux系統中的5中IO模型,並且著重介紹了其中的4種IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路複用(IO multiplexing) 非同步I/O(asynchronous IO) 但是前面總結的IO
SpringBoot學習系列之一(反射)
最近在學習SpringBoot的知識,動起手來學習的時候才發現SpringBoot專案採用了大量的反射機制,暈,作為一個應屆畢業生,以前學習反射的時候給我的感覺就是,這個到底用來幹嘛的,好像沒啥用啊,而且接觸的地方也不是非常的多,接觸比較多的地方還是JDBC註冊驅動的那條語句: Class.forNam
SpringBoot學習(六)—— springboot快速整合RabbitMQ
目錄 Rabbit MQ訊息佇列 簡介 Rabbit MQ工作模式 交換機模式 引入RabbitMQ佇列 程式碼實戰 Rabbi
hadoop入門學習系列之六hadoop學習之sqoop安裝
1.7 sqoop安裝 opc 2.6 clas jdb -m -- error 1.下載安裝包及解壓 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 2.配置環境變量和配置文件 cd 到 sqoop