SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送的詳細(xì)過(guò)程
序言
? 發(fā)郵件對(duì)于咱們的Java來(lái)說(shuō)是一個(gè)基本的功能,因此這里SpringBoot整合Javamail實(shí)際就是簡(jiǎn)化了javamail發(fā)郵件的過(guò)程。咱們先看三個(gè)基本概念,就是Javamail發(fā)送郵件所需要遵從的協(xié)議:
- SMTP(Simple Mail Transfer Protocol):簡(jiǎn)單郵件傳輸協(xié)議,用于發(fā)送電子郵件的傳輸協(xié)議
- POP3(Post Office Protocol - Version 3):用于接收電子郵件的標(biāo)準(zhǔn)協(xié)議
- IMAP(Internet Mail Access Protocol):互聯(lián)網(wǎng)消息協(xié)議,是POP3的替代協(xié)議
? 簡(jiǎn)而言之,SMTP就是發(fā)郵件必須遵從的標(biāo)準(zhǔn),POP3就是接受郵件要遵從的標(biāo)準(zhǔn),而IMAP則是對(duì)POP3協(xié)議的升級(jí)。日常使用中,我們主要使用的是發(fā)郵件操作,那么接下來(lái),咱們接跟著風(fēng)哥一起來(lái)看看SpringBoot整合Javamail發(fā)送郵件的步驟吧~。
簡(jiǎn)單郵件
1.老生常談第一步,導(dǎo)入Javamail的Maven坐標(biāo)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置郵箱的登錄信息
配置文件
javamail使用的郵件發(fā)送功能說(shuō)到底還是由相應(yīng)的供應(yīng)商提供,所以要配置相應(yīng)郵件供應(yīng)商的信息。
host:配置發(fā)送郵件的主機(jī)協(xié)議
username:相應(yīng)供應(yīng)商的郵箱賬號(hào)
password:由郵箱供應(yīng)商提供的一個(gè)加密后的密碼,接下來(lái)咱們來(lái)看獲取步驟,此處以qq郵箱為例。
打開(kāi)qq郵箱,進(jìn)入設(shè)置,找到這個(gè)選項(xiàng),點(diǎn)生成授權(quán)碼,進(jìn)行安全驗(yàn)證后,即可獲得授權(quán)碼


spring:
mail:
host: smtp.qq.com
username: test@qq.com
password: test
創(chuàng)建發(fā)送文件的接口類(lèi)和方法實(shí)現(xiàn)類(lèi)
public interface SendMailService {
void SendMail() throws MessagingException;
}
把實(shí)現(xiàn)類(lèi)交給Spring容器管理,目的是為了方便在測(cè)試方法里自動(dòng)注入使用。
@Service
public class SendMailServiceImpl implements SendMailService {
@Autowired
private JavaMailSender javaMailSender;
private String from = "test@qq.com";
private String to = "test@qq.com";
private String title = "test";
private String text = "hahahaha";
@Override
public void SendMail() {
//創(chuàng)建SimpleMailMessage對(duì)象,用于郵件發(fā)送
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(from);
mailMessage.setTo(to);
mailMessage.setSubject(title);
mailMessage.setText(text);
javaMailSender.send(mailMessage);
}
}
在測(cè)試類(lèi)方法里進(jìn)行測(cè)試

@SpringBootTest
class YsjApplicationTests {
@Autowired
private SendMailService2 sendMailService2;
@Test
void contextLoads() {
for(int i=0; i<10; i++)
sendMailService2.SendMail();
}
}
總結(jié):
- 注意看郵箱授權(quán)碼怎么生成的
- 千萬(wàn)不要連續(xù)多發(fā)相同內(nèi)容的無(wú)意義文件,否則會(huì)被判定為垃圾郵件
- 簡(jiǎn)單郵件使用SimpleMailMessage類(lèi)對(duì)象進(jìn)行郵件發(fā)送即可
- 郵件發(fā)送使用JavaMailSender對(duì)象
多組件郵件(帶附件,圖片,超鏈接的郵件)
? 正常生活中,我們肯定不止步使用簡(jiǎn)單的標(biāo)題,正文這些只包含枯燥的文字的郵件,更多的是喜歡使用帶有圖片、視頻、尤其是交作業(yè)給老師使用的附件功能,所以呢,在經(jīng)過(guò)上面的基礎(chǔ)學(xué)習(xí)后,接下來(lái),朋友們跟著踏風(fēng)一起來(lái)學(xué)習(xí)一下怎么實(shí)現(xiàn)用SpringBoot整合Javamail實(shí)現(xiàn)發(fā)送咱們更多使用的多組件郵件,Let‘s go.
? 為了防止有的小伙伴在處理過(guò)程中出現(xiàn)差錯(cuò),咱們這里還從最開(kāi)始導(dǎo)坐標(biāo)一步一步來(lái)。
發(fā)送帶超鏈接的郵件
1、導(dǎo)入Javamail的Maven坐標(biāo)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、配置配置文件,獲取郵箱授權(quán)碼的步驟請(qǐng)參考上邊。
spring:
mail:
host: smtp.qq.com
username: test@qq.com
password: test
3、創(chuàng)建發(fā)送郵件的方法所在的接口,及接口的實(shí)現(xiàn)類(lèi)。
public interface SendMailService2 {
void SendMail();
}
- 發(fā)送帶網(wǎng)頁(yè)鏈接的郵件要先使用JavaMailSender類(lèi)的createMimeMessage()方法創(chuàng)建一個(gè)MinmeMessage類(lèi)對(duì)象
- 創(chuàng)建MImeMessageHelper對(duì)象用于發(fā)送帶超鏈接的郵件
- helper.setText(text,true):true表示支持解析html格式
- helper.setFrom(from+“(踏風(fēng)彡)”) :后邊的+“()”左右時(shí)把發(fā)送者的備注改為括號(hào)里邊的內(nèi)容
@Service
public class SendMailServiceImpl2 implements SendMailService2 {
@Autowired
private JavaMailSender javaMailSender;
private String from = "test@qq.com";
private String to = "test@qq.com";
private String title = "test";
private String text = "<a ;
@Override
public void SendMail(){
try {
//發(fā)送帶超鏈接的郵件需要?jiǎng)?chuàng)建MimeMessage對(duì)象
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo(to);
helper.setFrom(from+"(踏風(fēng)彡)");
helper.setText(text,true);
helper.setSubject(title);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
在測(cè)試類(lèi)測(cè)試

@SpringBootTest
class YsjApplicationTests {
@Autowired
private SendMailService2 sendMailService2;
@Test
void contextLoads() {
sendMailService2.SendMail();
}
}
發(fā)送帶圖片的郵件
? 前面幾步都同于發(fā)送帶超鏈接郵件的步驟,接下來(lái)咱們主要看怎么使用MimeMessageHelper類(lèi)對(duì)象進(jìn)行帶附件郵件的發(fā)送,所以咱們主要看實(shí)現(xiàn)類(lèi)方法就行了
? 下面,首先,咱們先做一件有意思的事情,咱們發(fā)送帶附件的郵件同樣是使用MimeMessageHelper對(duì)象,那是不是可以有一個(gè)大膽的想法,咱們直接創(chuàng)建文件并使用它進(jìn)行發(fā)送,comn,來(lái)試一下。
? 下面的方法我已經(jīng)幫大家創(chuàng)建好了,大家可直接復(fù)制粘貼食用。
@Service
public class SendMailServiceImpl2 implements SendMailService2 {
@Autowired
private JavaMailSender javaMailSender;
private String from = "test@qq.com";
private String to = "test@qq.com";
private String title = "踏風(fēng)彡";
private String text = "<a ;
@Override
public void SendMail(){
try {
//發(fā)送帶附件的郵件需要?jiǎng)?chuàng)建MimeMessage對(duì)象
MimeMessage message = javaMailSender.createMimeMessage();
//這個(gè)true表示要發(fā)送的郵件支持附件
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo(to);
helper.setFrom(from+"(踏風(fēng)彡)");
helper.setText(text,true); //設(shè)置正文支持html格式
helper.setSubject(title);
// File file = new File("G:\\Javamail.zip");
File file1 = new File("C:\\Users\\10116\\Desktop\\1.jpg");
// helper.addAttachment(file.getName(),file); //添加附件
helper.addAttachment("皮卡丘丫~.jpg",file1);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
看到這的小伙伴,看來(lái)都遇見(jiàn)了如下的報(bào)錯(cuò)。

? 這是因?yàn)槭裁茨兀窟@是因?yàn)樵蹅儧](méi)有開(kāi)啟附件發(fā)送的功能啊,小伙伴們,那么,接下來(lái),讓咱們看看怎么開(kāi)啟吧。
? 很簡(jiǎn)單,如下,這個(gè)true即表示開(kāi)啟附件發(fā)送功能。

? 接下來(lái),已經(jīng)有思路的小伙伴,建議改完后,自己去實(shí)踐一下,如果出錯(cuò),可以再到文章底部看我的代碼。
總結(jié)
- 發(fā)送帶附件的郵件跟發(fā)送帶超鏈接的圖片只有一步之差,開(kāi)啟附件發(fā)送功能即可。
- 若是要支持html語(yǔ)法,可以在setText的方法參數(shù)上加上true,表示開(kāi)啟了MimeMessageHelper類(lèi)的html語(yǔ)法解析功能。
- 記得把代碼中的test改成相應(yīng)的賬號(hào),郵箱動(dòng)態(tài)碼。
文末代碼
@Service
public class SendMailServiceImpl2 implements SendMailService2 {
@Autowired
private JavaMailSender javaMailSender;
private String from = "test@qq.com";
private String to = "test@qq.com";
private String title = "快看啊叼人";
private String text = "<a ;
@Override
public void SendMail(){
try {
//發(fā)送帶附件的郵件需要?jiǎng)?chuàng)建MimeMessage對(duì)象
MimeMessage message = javaMailSender.createMimeMessage();
//這個(gè)true表示要發(fā)送的郵件支持附件
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setFrom(from+"(踏風(fēng)彡)");
helper.setText(text,true); //設(shè)置正文支持html格式
helper.setSubject(title);
// File file = new File("G:\\Javamail.zip");
File file1 = new File("C:\\Users\\10116\\Desktop\\1.jpg");
// helper.addAttachment(file.getName(),file); //添加附件
helper.addAttachment("皮卡丘丫~.jpg",file1);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
il.zip");
File file1 = new File("C:\\Users\\10116\\Desktop\\1.jpg");
// helper.addAttachment(file.getName(),file); //添加附件
helper.addAttachment("皮卡丘丫~.jpg",file1);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
到這里,SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送的流程風(fēng)哥已經(jīng)帶大家做完了,大家覺(jué)得不錯(cuò)的,辛苦給博主個(gè)三連+關(guān)注,您的支持就是我創(chuàng)作的動(dòng)力。
到此這篇關(guān)于SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送的文章就介紹到這了,更多相關(guān)SpringBoot整合Javamail郵件發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot啟動(dòng)異常Exception in thread “main“ java.lang.UnsupportedClassVersionError
- Spring?Boot項(xiàng)目中使用OpenAI-Java的示例詳解
- Java SpringBoot集成ChatGPT實(shí)現(xiàn)AI聊天
- Spring AI 入門(mén)學(xué)習(xí)指南
- Spring?AI?+?ollama?本地搭建聊天?AI?功能
- Spring?AI?+?混元帶你實(shí)現(xiàn)企業(yè)級(jí)穩(wěn)定可部署的AI業(yè)務(wù)智能體
- Spring?AI借助全局參數(shù)實(shí)現(xiàn)智能數(shù)據(jù)庫(kù)操作與個(gè)性化待辦管理
- Spring AI 文檔的提取、轉(zhuǎn)換、加載功能實(shí)現(xiàn)
- 深入解析Spring?AI框架如何在Java應(yīng)用中實(shí)現(xiàn)智能化交互的關(guān)鍵
相關(guān)文章
Spring mvc整合tiles框架的簡(jiǎn)單入門(mén)教程(maven)
這篇文章主要給大家介紹了關(guān)于Spring mvc整合tiles框架的簡(jiǎn)單入門(mén)教程(maven),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看詳細(xì)的介紹吧。2017-12-12
Java.lang.Long.parseLong()方法詳解及示例
這個(gè)java.lang.Long.parseLong(String s) 方法解析字符串參數(shù)s作為有符號(hào)十進(jìn)制長(zhǎng),下面這篇文章主要給大家介紹了關(guān)于Java.lang.Long.parseLong()方法詳解及示例的相關(guān)資料,需要的朋友可以參考下2023-01-01
SpringBoot使用@Cacheable出現(xiàn)預(yù)覽工具亂碼的解決方法
直接使用注解進(jìn)行緩存數(shù)據(jù),我們?cè)偈褂霉ぞ呷ヮA(yù)覽存儲(chǔ)的數(shù)據(jù)時(shí)發(fā)現(xiàn)是亂碼,這是由于默認(rèn)序列化的問(wèn)題,所以接下來(lái)將給大家介紹一下SpringBoot使用@Cacheable出現(xiàn)預(yù)覽工具亂碼的解決方法,需要的朋友可以參考下2023-10-10
Netty網(wǎng)絡(luò)編程實(shí)戰(zhàn)之開(kāi)發(fā)聊天室功能
這篇文章主要為大家詳細(xì)介紹了如何利用Netty實(shí)現(xiàn)聊天室功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Netty網(wǎng)絡(luò)編程有一定幫助,需要的可以參考一下2022-10-10
Spring中BeanFactory?FactoryBean和ObjectFactory的三種的區(qū)別
關(guān)于FactoryBean?和?BeanFactory的對(duì)比文章比較多,但是對(duì)ObjectFactory的描述就比較少,今天我們對(duì)比下這三種的區(qū)別,感興趣的朋友跟隨小編一起看看吧2023-01-01

