SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送功能
說(shuō)明:郵件發(fā)送是一個(gè)很普遍的功能,springboot整合了相關(guān)的starter,以下方式可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的郵件發(fā)送功能。
1、引入依賴
- mail依賴,發(fā)送郵件使用
- test依賴,測(cè)試使用
<!-- email -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope>
</dependency>2、配置yml文件
spring:
mail:
host: smtp.qq.com
port: 25
protocol: smtp
username: 123456789@qq.com
password: oujhlavdjhirgiee
default-encoding: UTF-8注意:password屬性是郵箱授權(quán)碼,用于第三方接口調(diào)用使用, 而不是郵箱登錄密碼,需要登錄郵箱查看或者申請(qǐng)獲取。下面是qq郵箱授權(quán)碼獲取方式(設(shè)置->賬號(hào)->賬號(hào)安全)

3、編寫測(cè)試代碼
這里主要測(cè)試了發(fā)送兩種格式的郵件,一種是純文字的郵件,另一種是帶有附件的郵件。
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
@SpringBootTest
class EmailUtilsTest {
// 發(fā)件人郵箱
@Value("${spring.mail.username}")
private String mailFrom;
// 收件人郵箱
private static String MAIL_TO = "zhangsan123@163.com";
// 測(cè)試發(fā)送PDF文件的路徑
private static String PDF_PATH = "E:\\test.pdf";
@Autowired
private JavaMailSender mailSender;
/**
* 測(cè)試發(fā)送文字內(nèi)容
*/
@Test
void testSendText() {
// 郵件標(biāo)題
String subject = "測(cè)試郵件";
// 郵件文字內(nèi)容
String textContent = "你好,這是測(cè)試郵件4";
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailFrom);
helper.setTo(MAIL_TO);
helper.setSubject(subject);
helper.setText(textContent, true);
mailSender.send(message);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
/**
* 測(cè)試發(fā)送文件內(nèi)容
*/
@Test
void testSendFile() {
// 郵件標(biāo)題
String subject = "一份測(cè)試發(fā)送的PDF文件";
// 郵件文本內(nèi)容
String textContent = "這是您的文件,請(qǐng)注意查收";
// 郵件文件內(nèi)容
FileSystemResource pdfFile = new FileSystemResource(PDF_PATH);
// 文件名字
String fileName = "測(cè)試文件.pdf";
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailFrom);
helper.setTo(MAIL_TO);
helper.setSubject(subject);
helper.setText(textContent, true);
// 如果一次要發(fā)送多個(gè)附件, 只需要添加多個(gè) helper.addAttachment() 即可
helper.addAttachment(fileName, pdfFile);
mailSender.send(message);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
/**
* 擴(kuò)展: 不使用yml文件, 使用對(duì)象的方式設(shè)置屬性值
*/
@Test
void testSendFileNoYml() {
// 郵件標(biāo)題
String subject = "一份測(cè)試發(fā)送的PDF文件";
// 郵件文本內(nèi)容
String textContent = "這是您的文件,請(qǐng)注意查收";
// 郵件文件內(nèi)容
FileSystemResource pdfFile = new FileSystemResource(PDF_PATH);
// 文件名字
String fileName = "測(cè)試文件.pdf";
// 獲取自定義屬性的sender
JavaMailSender javaMailSender = getJavaMailSender();
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(mailFrom);
helper.setTo(MAIL_TO);
helper.setSubject(subject);
helper.setText(textContent, true);
// 如果一次要發(fā)送多個(gè)附件, 只需要添加多個(gè) helper.addAttachment() 即可
helper.addAttachment(fileName, pdfFile);
mailSender.send(message);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
/**
* 獲取自定義的屬性的 JavaMailSender 對(duì)象
* @return JavaMailSender
*/
public JavaMailSender getJavaMailSender(){
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
// 設(shè)置發(fā)送的服務(wù)器ip (qq:smtp.qq.com 網(wǎng)易:smtp.126.com)
javaMailSender.setHost("qq:smtp.qq.com");
javaMailSender.setUsername("1454376161@qq.com");
// 郵箱授權(quán)碼
javaMailSender.setPassword("oujhldvdjhirgiea");
// 設(shè)置端口(默認(rèn)25, 或者設(shè)置456)
javaMailSender.setPort(465);
// 設(shè)置編碼方式,避免常出現(xiàn)亂碼
javaMailSender.setDefaultEncoding("UTF-8");
//其他屬性
Properties p = new Properties();
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.ssl", "true");
p.setProperty("mail.smtp.socketFactory.port", "465");
p.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
p.setProperty("mail.smtp.starttls.enable", "true");
p.setProperty("mail.smtp.starttls.required", "true");
javaMailSender.setJavaMailProperties(p);
return javaMailSender;
}
}到此這篇關(guān)于SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送功能的文章就介紹到這了,更多相關(guān)SpringBoot整合Javamail郵件發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用lombok@Data存在extends時(shí)需要注意的問(wèn)題
在Java編程中,正確實(shí)現(xiàn)equals方法是保證對(duì)象比較一致性的關(guān)鍵,使用instanceof檢查類型可能導(dǎo)致違反對(duì)稱性原則,即當(dāng)子類和父類都重寫equals時(shí)可能出現(xiàn)a.equals(b)不等于b.equals(a)的情況,Lombok的@EqualsAndHashCode注解可以通過(guò)callSuper=true參數(shù)2024-10-10
spring-boot-autoconfigure模塊用法詳解
autoconfigure就是自動(dòng)配置的意思,spring-boot通過(guò)spring-boot-autoconfigure體現(xiàn)了"約定優(yōu)于配置"這一設(shè)計(jì)原則,而spring-boot-autoconfigure主要用到了spring.factories和幾個(gè)常用的注解條件來(lái)實(shí)現(xiàn)自動(dòng)配置,思路很清晰也很簡(jiǎn)單,感興趣的朋友跟隨小編一起看看吧2022-11-11
MyBatis-Plus 分頁(yè)插件配置的兩種方式實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus 分頁(yè)插件配置的兩種方式實(shí)現(xiàn),包括使用PaginationInterceptor和MybatisPlusInterceptor兩種方式,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Java MQTT實(shí)戰(zhàn)應(yīng)用
本文詳解MQTT協(xié)議,涵蓋其發(fā)布/訂閱機(jī)制、低功耗高效特性、三種服務(wù)質(zhì)量等級(jí)(QoS0/1/2),以及客戶端、代理、主題的核心概念,最后提供Linux部署教程、SpringBoot整合方法與MQTTX工具下載鏈接,對(duì)java mqtt相關(guān)知識(shí)感興趣的朋友一起看看吧2025-06-06
mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊)
這篇文章主要介紹了mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-11-11
Spring MVC中處理ajax請(qǐng)求的跨域問(wèn)題與注意事項(xiàng)詳解
跨域問(wèn)題是我們大家在開發(fā)中會(huì)經(jīng)常遇到的一個(gè)問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Spring MVC中處理ajax請(qǐng)求的跨域問(wèn)題與注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
SpringBoot項(xiàng)目引入MCP的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot項(xiàng)目引入MCP的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Gradle jvm插件系列教程之Java?Library插件權(quán)威詳解
這篇文章主要介紹了Java?Library插件權(quán)威詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01

