SpringBoot整合Javamail實現郵件發(fā)送的詳細過程
序言
? 發(fā)郵件對于咱們的Java來說是一個基本的功能,因此這里SpringBoot整合Javamail實際就是簡化了javamail發(fā)郵件的過程。咱們先看三個基本概念,就是Javamail發(fā)送郵件所需要遵從的協議:
- SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議,用于發(fā)送電子郵件的傳輸協議
- POP3(Post Office Protocol - Version 3):用于接收電子郵件的標準協議
- IMAP(Internet Mail Access Protocol):互聯網消息協議,是POP3的替代協議
? 簡而言之,SMTP就是發(fā)郵件必須遵從的標準,POP3就是接受郵件要遵從的標準,而IMAP則是對POP3協議的升級。日常使用中,我們主要使用的是發(fā)郵件操作,那么接下來,咱們接跟著風哥一起來看看SpringBoot整合Javamail發(fā)送郵件的步驟吧~。
簡單郵件
1.老生常談第一步,導入Javamail的Maven坐標。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2.配置郵箱的登錄信息
配置文件
javamail使用的郵件發(fā)送功能說到底還是由相應的供應商提供,所以要配置相應郵件供應商的信息。
host:配置發(fā)送郵件的主機協議
username:相應供應商的郵箱賬號
password:由郵箱供應商提供的一個加密后的密碼,接下來咱們來看獲取步驟,此處以qq郵箱為例。
打開qq郵箱,進入設置,找到這個選項,點生成授權碼,進行安全驗證后,即可獲得授權碼
spring: mail: host: smtp.qq.com username: test@qq.com password: test
創(chuàng)建發(fā)送文件的接口類和方法實現類
public interface SendMailService { void SendMail() throws MessagingException; }
把實現類交給Spring容器管理,目的是為了方便在測試方法里自動注入使用。
@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對象,用于郵件發(fā)送 SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setFrom(from); mailMessage.setTo(to); mailMessage.setSubject(title); mailMessage.setText(text); javaMailSender.send(mailMessage); } }
在測試類方法里進行測試
@SpringBootTest class YsjApplicationTests { @Autowired private SendMailService2 sendMailService2; @Test void contextLoads() { for(int i=0; i<10; i++) sendMailService2.SendMail(); } }
總結:
- 注意看郵箱授權碼怎么生成的
- 千萬不要連續(xù)多發(fā)相同內容的無意義文件,否則會被判定為垃圾郵件
- 簡單郵件使用SimpleMailMessage類對象進行郵件發(fā)送即可
- 郵件發(fā)送使用JavaMailSender對象
多組件郵件(帶附件,圖片,超鏈接的郵件)
? 正常生活中,我們肯定不止步使用簡單的標題,正文這些只包含枯燥的文字的郵件,更多的是喜歡使用帶有圖片、視頻、尤其是交作業(yè)給老師使用的附件功能,所以呢,在經過上面的基礎學習后,接下來,朋友們跟著踏風一起來學習一下怎么實現用SpringBoot整合Javamail實現發(fā)送咱們更多使用的多組件郵件,Let‘s go.
? 為了防止有的小伙伴在處理過程中出現差錯,咱們這里還從最開始導坐標一步一步來。
發(fā)送帶超鏈接的郵件
1、導入Javamail的Maven坐標。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2、配置配置文件,獲取郵箱授權碼的步驟請參考上邊。
spring: mail: host: smtp.qq.com username: test@qq.com password: test
3、創(chuàng)建發(fā)送郵件的方法所在的接口,及接口的實現類。
public interface SendMailService2 { void SendMail(); }
- 發(fā)送帶網頁鏈接的郵件要先使用JavaMailSender類的createMimeMessage()方法創(chuàng)建一個MinmeMessage類對象
- 創(chuàng)建MImeMessageHelper對象用于發(fā)送帶超鏈接的郵件
- helper.setText(text,true):true表示支持解析html格式
- helper.setFrom(from+“(踏風彡)”) :后邊的+“()”左右時把發(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 = "test"; private String text = "<a ; @Override public void SendMail(){ try { //發(fā)送帶超鏈接的郵件需要創(chuàng)建MimeMessage對象 MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message); helper.setTo(to); helper.setFrom(from+"(踏風彡)"); helper.setText(text,true); helper.setSubject(title); javaMailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } }
在測試類測試
@SpringBootTest class YsjApplicationTests { @Autowired private SendMailService2 sendMailService2; @Test void contextLoads() { sendMailService2.SendMail(); } }
發(fā)送帶圖片的郵件
? 前面幾步都同于發(fā)送帶超鏈接郵件的步驟,接下來咱們主要看怎么使用MimeMessageHelper類對象進行帶附件郵件的發(fā)送,所以咱們主要看實現類方法就行了
? 下面,首先,咱們先做一件有意思的事情,咱們發(fā)送帶附件的郵件同樣是使用MimeMessageHelper對象,那是不是可以有一個大膽的想法,咱們直接創(chuàng)建文件并使用它進行發(fā)送,comn,來試一下。
? 下面的方法我已經幫大家創(chuàng)建好了,大家可直接復制粘貼食用。
@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ā)送帶附件的郵件需要創(chuàng)建MimeMessage對象 MimeMessage message = javaMailSender.createMimeMessage(); //這個true表示要發(fā)送的郵件支持附件 MimeMessageHelper helper = new MimeMessageHelper(message); helper.setTo(to); helper.setFrom(from+"(踏風彡)"); helper.setText(text,true); //設置正文支持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(); } } }
看到這的小伙伴,看來都遇見了如下的報錯。
? 這是因為什么呢?這是因為咱們沒有開啟附件發(fā)送的功能啊,小伙伴們,那么,接下來,讓咱們看看怎么開啟吧。
? 很簡單,如下,這個true即表示開啟附件發(fā)送功能。
? 接下來,已經有思路的小伙伴,建議改完后,自己去實踐一下,如果出錯,可以再到文章底部看我的代碼。
總結
- 發(fā)送帶附件的郵件跟發(fā)送帶超鏈接的圖片只有一步之差,開啟附件發(fā)送功能即可。
- 若是要支持html語法,可以在setText的方法參數上加上true,表示開啟了MimeMessageHelper類的html語法解析功能。
- 記得把代碼中的test改成相應的賬號,郵箱動態(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ā)送帶附件的郵件需要創(chuàng)建MimeMessage對象 MimeMessage message = javaMailSender.createMimeMessage(); //這個true表示要發(fā)送的郵件支持附件 MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(to); helper.setFrom(from+"(踏風彡)"); helper.setText(text,true); //設置正文支持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實現郵件發(fā)送的流程風哥已經帶大家做完了,大家覺得不錯的,辛苦給博主個三連+關注,您的支持就是我創(chuàng)作的動力。
到此這篇關于SpringBoot整合Javamail實現郵件發(fā)送的文章就介紹到這了,更多相關SpringBoot整合Javamail郵件發(fā)送內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot啟動異常Exception in thread “main“ java.lang.UnsupportedClassVersionError
- Spring?Boot項目中使用OpenAI-Java的示例詳解
- Java SpringBoot集成ChatGPT實現AI聊天
- Spring AI 入門學習指南
- Spring?AI?+?ollama?本地搭建聊天?AI?功能
- Spring?AI?+?混元帶你實現企業(yè)級穩(wěn)定可部署的AI業(yè)務智能體
- Spring?AI借助全局參數實現智能數據庫操作與個性化待辦管理
- Spring AI 使用超詳細講解
- 深入解析Spring AI框架如何在Java應用中實現智能化交互的關鍵
相關文章
redis setIfAbsent和setnx的區(qū)別與使用說明
這篇文章主要介紹了redis setIfAbsent和setnx的區(qū)別與使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08ByteArrayInputStream簡介和使用_動力節(jié)點Java學院整理
ByteArrayInputStream 是字節(jié)數組輸入流。它繼承于InputStream。這篇文章主要介紹了ByteArrayInputStream簡介和使用_動力節(jié)點Java學院整理,需要的朋友可以參考下2017-05-05