SpringBoot使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件
用了這么久的Spring Boot,我們對(duì)Spring Boot的了解應(yīng)該也逐步進(jìn)入正軌了,這篇文章講的案例也在我們的實(shí)際開發(fā)中算是比較實(shí)用的了,畢竟我們完成注冊(cè)功能和對(duì)用戶群發(fā)消息,都可以采用到郵箱發(fā)送功能,往下看,我們來看看什么是JavaMailSender。
什么是JavaMailSender
JavaMailSender是Spring Framework中的一個(gè)接口,用于發(fā)送電子郵件。它是Spring對(duì)JavaMail API的封裝,提供了更簡(jiǎn)單和更方便的方式來發(fā)送郵件。
JavaMailSender接口定義了一組發(fā)送郵件的方法,包括發(fā)送簡(jiǎn)單文本郵件、發(fā)送帶附件的郵件、發(fā)送HTML格式的郵件等。它隱藏了底層JavaMail API的復(fù)雜性,使得在Spring應(yīng)用中發(fā)送郵件變得更加容易。
在Spring Boot中,你可以通過依賴注入JavaMailSender來使用它。通過配置郵件服務(wù)器的相關(guān)信息,你可以使用JavaMailSender發(fā)送郵件。
JavaMailSender接口的常用實(shí)現(xiàn)類是JavaMailSenderImpl,它是基于JavaMail API實(shí)現(xiàn)的。除了JavaMailSenderImpl,Spring還提供了其他的實(shí)現(xiàn)類,例如MockMailSender用于測(cè)試目的。
使用JavaMailSender,你可以方便地發(fā)送郵件,設(shè)置收件人、發(fā)件人、主題、正文等信息,并可以附加文件、設(shè)置抄送、密送等功能。
JavaMailSender是Spring Framework中用于發(fā)送郵件的接口,它簡(jiǎn)化了郵件發(fā)送的過程,提供了更高級(jí)的抽象和便利性。
來看一個(gè)案例:
引入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-velocity</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
如其他自動(dòng)化配置一樣,我們?cè)谝胂嚓P(guān)依賴后就需要在application.properties文件中進(jìn)行配置:
spring.mail.host=your-smtp-host spring.mail.port=your-smtp-port spring.mail.username=your-username spring.mail.password=your-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true
請(qǐng)將your-smtp-host、your-smtp-port、your-username和your-password替換為你的實(shí)際信息。
然后,在你的代碼中,注入JavaMailSender并使用它來發(fā)送郵件。以下是一個(gè)簡(jiǎn)單的示例:
例如我們采用qq郵箱:
spring.mail.host=smtp.qq.com spring.mail.username=用戶名 spring.mail.password=密碼 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true
這里的密碼指你獲取的郵箱的授權(quán)碼



在這里獲取你的相關(guān)信息,
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

template.vm
<html>
<body>
<h3>你好, ${username}, 這是一封模版引擎封裝的郵箱信!</h3>
</body>
</html>
之后咱們創(chuàng)建一個(gè)測(cè)試類進(jìn)行:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {
@Autowired
private JavaMailSender mailSender;
@Autowired
private VelocityEngine velocityEngine;
//簡(jiǎn)單的郵件發(fā)送
@Test
public void sendSimpleMail() throws Exception {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("28****70@qq.com");
message.setTo("28****70@qq.com");
message.setSubject("主題:簡(jiǎn)單郵件");
message.setText("簡(jiǎn)單的郵件內(nèi)容");
mailSender.send(message);
}
//攜帶附件的郵件
@Test
public void sendAttachmentsMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("28****70@qq.com");
helper.setTo("28****70@qq.com");
helper.setSubject("主題:有附件");
helper.setText("內(nèi)容:有附件的郵件");
FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
helper.addAttachment("miaow-1.jpg", file);
helper.addAttachment("miaow-2.jpg", file);
helper.addAttachment("miaow-2.jpg", file);
mailSender.send(mimeMessage);
}
//發(fā)送嵌入靜態(tài)資源
@Test
public void sendInlineMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("28****70@qq.com");
helper.setTo("28****70@qq.com");
helper.setSubject("主題:嵌入靜態(tài)資源");
helper.setText("<html><body><img src=\"cid:weixin\" ></body></html>", true);
FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
helper.addInline("weixin", file);
mailSender.send(mimeMessage);
}
//發(fā)送模版附件
@Test
public void sendTemplateMail() throws Exception {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom("28****70@qq.com");
helper.setTo("28****70@qq.com");
helper.setSubject("主題:模板郵件");
Map<String, Object> model = new HashedMap();
model.put("username", "miaow");
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "template.vm", "UTF-8", model);
helper.setText(text, true);
mailSender.send(mimeMessage);
}
}
在項(xiàng)目下放置:weixin.jpg圖片,圖片隨便你怎么玩

這樣,你就可以在Spring Boot中使用JavaMailSender發(fā)送郵件了。記得替換示例代碼中的實(shí)際信息,以便與你的郵件服務(wù)器配置相匹配。
在使用JavaMailSender發(fā)送郵件時(shí),有一些注意事項(xiàng)需要注意:
郵件服務(wù)器的配置
在使用JavaMailSender發(fā)送郵件之前,你需要配置郵件服務(wù)器的相關(guān)信息,包括SMTP服務(wù)器地址、端口號(hào)、用戶名、密碼等。這些信息可以通過在配置文件中添加相關(guān)屬性來實(shí)現(xiàn)。
郵件內(nèi)容的設(shè)置
在設(shè)置郵件內(nèi)容時(shí),你需要注意郵件的主題、正文、收件人、發(fā)件人等信息的設(shè)置。如果你需要發(fā)送HTML格式的郵件,需要將郵件內(nèi)容設(shè)置為HTML格式,并設(shè)置相應(yīng)的郵件頭信息。
郵件發(fā)送的異常處理
在發(fā)送郵件時(shí),可能會(huì)出現(xiàn)各種異常,例如連接超時(shí)、認(rèn)證失敗等。你需要對(duì)這些異常進(jìn)行處理,以便及時(shí)發(fā)現(xiàn)和解決問題。
郵件發(fā)送的性能問題
在發(fā)送大量郵件時(shí),可能會(huì)出現(xiàn)性能問題。你需要注意郵件發(fā)送的頻率和數(shù)量,以避免對(duì)郵件服務(wù)器造成過大的負(fù)載。
郵件發(fā)送的安全問題
在發(fā)送郵件時(shí),需要注意郵件的安全性。你需要確保郵件內(nèi)容不包含敏感信息,并且郵件服務(wù)器的認(rèn)證和加密設(shè)置是正確的。
總之,在使用JavaMailSender發(fā)送郵件時(shí),你需要注意郵件服務(wù)器的配置、郵件內(nèi)容的設(shè)置、異常處理、性能問題和安全問題等方面,以確保郵件發(fā)送的順利和安全。
以上就是SpringBoot使用JavaMailSender實(shí)現(xiàn)發(fā)送郵件的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot JavaMailSender發(fā)送郵件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java線程池的幾種實(shí)現(xiàn)方法和區(qū)別介紹實(shí)例詳解
本篇文章主要介紹了Java線程池的幾種實(shí)現(xiàn)方法和區(qū)別,需要的朋友可以參考2017-04-04
Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析
這篇文章主要介紹了Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
spring data jpa 創(chuàng)建方法名進(jìn)行簡(jiǎn)單查詢方式
這篇文章主要介紹了spring data jpa 創(chuàng)建方法名進(jìn)行簡(jiǎn)單查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
詳解Spring Batch 輕量級(jí)批處理框架實(shí)踐
這篇文章主要介紹了詳解Spring Batch 輕量級(jí)批處理框架實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
關(guān)于maven配置項(xiàng)目一直提示程序包不存在以及scope的坑
這篇文章主要介紹了關(guān)于maven配置項(xiàng)目一直提示程序包不存在以及scope的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
SpringBoot 中的 @Transactional 事務(wù)基本作用及注意事項(xiàng)示例詳解
@Transactional是SpringBoot中聲明式事務(wù)管理的核心注解,通過注解簡(jiǎn)化事務(wù)控制,確保操作的原子性,支持異?;貪L、隔離級(jí)別和傳播行為配置,需注意代理模式、異常拋出及數(shù)據(jù)庫支持等條件,避免事務(wù)失效,本文介紹SpringBoot @Transactional事務(wù)作用,感興趣的朋友一起看看吧2025-09-09

