SpringBoot3整合郵件服務(wù)實(shí)現(xiàn)郵件發(fā)送功能
內(nèi)容概要
本文介紹了spring boot整合email服務(wù),實(shí)現(xiàn)發(fā)送驗(yàn)證碼,郵件(普通文本郵件、靜態(tài)資源郵件、附件郵件)。
開通服務(wù)
實(shí)現(xiàn)email服務(wù)需要先將自己的郵箱開通POP3/IMAP服務(wù)才可以通過(guò)該郵箱發(fā)送郵件,開通步驟如下:
這里以QQ郵箱為例
1.進(jìn)入QQ郵箱官網(wǎng)
2.登錄后點(diǎn)擊設(shè)置
3.選擇賬號(hào)
找到 POP3/IMAP.....服務(wù)這里開啟你的服務(wù),這里我已經(jīng)開啟了的。
4.開啟服務(wù)
開啟成功會(huì)得到授權(quán)碼 ,記住這個(gè)授權(quán)碼。下面開始在spring boot中整合。
spring boot整合
1.依賴引入
pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2.配置屬性
application.yml:
修改成你自己的實(shí)際信息。
spring: #郵件服務(wù)配置 mail: host: smtp.qq.com #郵件服務(wù)器地址 protocol: smtp #協(xié)議 username: 305462*****@qq.com #發(fā)送郵件的郵箱也就是你開通服務(wù)的郵箱 password: fiwvcy******d #開通服務(wù)后得到的授權(quán)碼 default-encoding: utf-8 #郵件內(nèi)容的編碼
3.創(chuàng)建郵件發(fā)送工具類
使用@component注解標(biāo)記為組件,可以在Service中注入使用。
里面一共定義了三種發(fā)送郵件方法:
- 發(fā)送純文本的普通郵件,可以發(fā)送一些純文本的消息以及驗(yàn)證碼內(nèi)容。
- 發(fā)送HTML格式的文本內(nèi)容,可以發(fā)一些靜態(tài)資源,圖片,音頻,視頻等,也可以發(fā)驗(yàn)證碼信息。
- 發(fā)送攜帶附件的郵件,比如word,excel,pdf文檔或者其他文件。
具體可以根據(jù)業(yè)務(wù)需求調(diào)整代碼。我實(shí)現(xiàn)的較為簡(jiǎn)單可以當(dāng)個(gè)模板使用。
import jakarta.annotation.Resource; import jakarta.mail.internet.MimeMessage; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import java.io.File; import java.util.Objects; /** * @author mijiupro */ @Component public class EmailUtil { @Resource private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from ;// 發(fā)件人 /** * 發(fā)送一般郵件--無(wú)附件 * @param to 收件人 * @param subject 主題 * @param content 內(nèi)容 * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendGeneralEmail(String subject, String content, String... to){ // 創(chuàng)建郵件消息 org.springframework.mail.SimpleMailMessage message = new org.springframework.mail.SimpleMailMessage(); message.setFrom(from); // 設(shè)置收件人 message.setTo(to); // 設(shè)置郵件主題 message.setSubject(subject); // 設(shè)置郵件內(nèi)容 message.setText(content); // 發(fā)送郵件 mailSender.send(message); return true; } /** * 發(fā)送帶附件的郵件 * @param to 收件人 * @param subject 主題 * @param content 內(nèi)容 * @param filePaths 附件路徑 * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendAttachmentsEmail(String subject, String content, String[] to, String[] filePaths) { // 創(chuàng)建郵件消息 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom(from); // 設(shè)置收件人 helper.setTo(to); // 設(shè)置郵件主題 helper.setSubject(subject); // 設(shè)置郵件內(nèi)容 helper.setText(content); // 添加附件 if (filePaths != null) { for (String filePath : filePaths) { FileSystemResource file = new FileSystemResource(new File(filePath)); helper.addAttachment(Objects.requireNonNull(file.getFilename()), file); } } // 發(fā)送郵件 mailSender.send(mimeMessage); return true; } /** * 發(fā)送帶靜態(tài)資源的郵件 * @param to 收件人 * @param subject 主題 * @param content 內(nèi)容 * @param rscPath 靜態(tài)資源路徑 * @param rscId 靜態(tài)資源id * @return 是否成功 */ @SneakyThrows(Exception.class) public boolean sendInlineResourceEmail(String subject, String content, String to, String rscPath, String rscId) { // 創(chuàng)建郵件消息 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); // 設(shè)置發(fā)件人 helper.setFrom(from); // 設(shè)置收件人 helper.setTo(to); // 設(shè)置郵件主題 helper.setSubject(subject); //html內(nèi)容圖片 String contentHtml = "<html><body>這是郵件的內(nèi)容,包含一個(gè)圖片:<img src=\'cid:" + rscId + "\'>"+content+"</body></html>"; helper.setText(contentHtml, true); //指定講資源地址 FileSystemResource res = new FileSystemResource(new File(rscPath)); helper.addInline(rscId, res); mailSender.send(mimeMessage); return true; } }
4.編寫測(cè)試用例測(cè)試
下面測(cè)試前兩種發(fā)送郵件的方法。
測(cè)試發(fā)送普通文本郵件
import com.mijiu.commom.util.EmailUtil; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class EmailTest { @Autowired private EmailUtil emailUtil; @Test public void sendEmail() { //發(fā)送郵件 boolean b = emailUtil.sendGeneralEmail("測(cè)試郵件", " 這是測(cè)試郵件", "你的郵箱@163.com"); System.out.println(b); } }
修改成發(fā)送目標(biāo)郵箱運(yùn)行代碼測(cè)試即可。
測(cè)試成功。
測(cè)試發(fā)送圖片郵件
import com.mijiu.commom.util.EmailUtil; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class EmailTest { @Autowired private EmailUtil emailUtil; @Test public void sendEmail() { // 發(fā)送圖片郵件 boolean b = emailUtil.sendInlineResourceEmail("測(cè)試郵件", " 這是測(cè)試郵件", "你的郵箱@163.com", "C:\\Users\\mijiupro\\Desktop\\潮.jpg", "C:\\Users\\mijiupro\\Desktop\\潮.jpg"); System.out.println(b); } }
修改成發(fā)送目標(biāo)郵箱運(yùn)行代碼測(cè)試即可。
以上就是SpringBoot3整合郵件服務(wù)實(shí)現(xiàn)郵件發(fā)送功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot3郵件發(fā)送的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringSecurity中的Filter Chain(過(guò)濾器鏈)
Spring Security的Filter Chain是由一系列過(guò)濾器組成的管道,每個(gè)過(guò)濾器執(zhí)行特定的安全功能,Spring Security能夠提供強(qiáng)大而靈活的安全控制機(jī)制,從而保護(hù)你的應(yīng)用程序不受各種網(wǎng)絡(luò)安全威脅的侵害,本文介紹SpringSecurity中的Filter Chain,感興趣的朋友跟隨小編一起看看吧2024-06-06Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫(kù)詳解
最近用到了Java解析Html的一個(gè)庫(kù)Jsoup,所以下面這篇文章主要給大家介紹了關(guān)于Java如何解析html中的內(nèi)容并存到數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03SpringBoot整合log4j日志與HashMap的底層原理解析
這篇文章主要介紹了SpringBoot整合log4j日志與HashMap的底層原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01SpringBoot利用MDC機(jī)制過(guò)濾單次請(qǐng)求的所有日志
在服務(wù)出現(xiàn)故障時(shí),我們經(jīng)常需要獲取一次請(qǐng)求流程里的所有日志進(jìn)行定位 ,如何將一次數(shù)據(jù)上報(bào)請(qǐng)求中包含的所有業(yè)務(wù)日志快速過(guò)濾出來(lái),就是本文要介紹的,需要的朋友可以參考下2024-04-04SpringData JPA中查詢接口Repository的使用
本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07springboot項(xiàng)目獲取請(qǐng)求頭當(dāng)中的token的方法
本文主要介紹了springboot項(xiàng)目獲取請(qǐng)求頭當(dāng)中的token的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11Java使用ExecutorService來(lái)停止線程服務(wù)
這篇文章主要介紹了Java使用ExecutorService來(lái)停止線程服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04