javascript
exchange邮件服务器_基于Spring Boot快速实现发送邮件功能
郵件在項目中經常會被用到,比如用郵件發送通知。比如,通過郵件注冊、認證、找回密碼、系統報警通知、報表信息等。本篇文章帶大家通過SpringBoot快速實現一個發送郵件的功能。
郵件協議
下面先簡單了解一下常見的郵件協議。常用的電子郵件協議有SMTP、POP3、IMAP4,它們都隸屬于TCP/IP協議簇,默認狀態下,分別通過TCP端口25、110和143建立連接。
SMTP協議
SMTP的全稱是 “Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用于從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式。它的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通過不同網絡上的主機接力式傳送。
SMTP認證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄SMTP服務器,這就使得那些垃圾郵件的散播者無可乘之機。增加SMTP認證的目的是為了使用戶避免受到垃圾郵件的侵擾。SMTP已是事實上的E-Mail傳輸的標準。
POP協議
POP郵局協議負責從郵件服務器中檢索電子郵件。它要求郵件服務器完成下面幾種任務之一:從郵件服務器中檢索郵件并從服務器中刪除這個郵件;從郵件服務器中檢索郵件但不刪除它;不檢索郵件,只是詢問是否有新郵件到達。
POP協議支持多用戶互聯網郵件擴展,后者允許用戶在電子郵件上附帶二進制文件,如文字處理文件和電子表格文件等,實際上這樣就可以傳輸任何格式的文件了,包括圖片和聲音文件等。在用戶閱讀郵件時,POP命令所有的郵件信息立即下載到用戶的計算機上,不在服務器上保留。
POP3(Post Office Protocol 3)即郵局協議的第3個版本,是因特網電子郵件的第一個離線協議標準。
IMAP協議
互聯網信息訪問協議(IMAP)是一種優于POP的新協議。和POP一樣,IMAP也能下載郵件、從服務器中刪除郵件或詢問是否有新郵件,但IMAP克服了POP的一些缺點。例如,它可以決定客戶機請求郵件服務器提交所收到郵件的方式,請求郵件服務器只下載所選中的郵件而不是全部郵件。客戶機可先閱讀郵件信息的標題和發送者的名字再決定是否下載這個郵件。
通過用戶的客戶機電子郵件程序,IMAP可讓用戶在服務器上創建并管理郵件文件夾或郵箱、刪除郵件、查詢某封信的一部分或全部內容,完成所有這些工作時都不需要把郵件從服務器下載到用戶的個人計算機上。
支持IMAP的常用郵件客戶端有:ThunderMail,Foxmail,Microsoft Outlook等。
SpringBoot集成Mail功能
如果未使用SpringBoot,需要自己去封裝消息體等信息,實現起來還是比較復雜的。但基于Spring Boot進行郵件發送,幾乎可以說只用引入spring-boot-starter-mail就可以輕松完成郵件的發送。
從本質上來說是由于Spring推出了關于Mail的JavaMailSender類,基于該類Spring Boot又進一步封裝,從而實現了輕松發送郵件的集成。而且JavaMailSender類提供了強大的郵件發送能力,支持各種類型的郵件發送。
依賴配置
集成步驟非常簡單,在項目中添加如下依賴:
<dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>配置文件
在application.properties中添加郵箱配置,對應參數項已經內置好,根據具體情況進行配置即可。
# 郵箱服務器地址 spring.mail.host=smtp.qq.com spring.mail.username=admin@choupangxia.com spring.mail.password=123456 spring.mail.default-encoding=UTF-8其中第一個host(郵件服務器地址)參數,不同的郵箱有所不同,上面是QQ郵箱的host。163郵箱為http://smtp.163.com、126郵箱為http://smtp.126.com。
username和password項為郵箱對應的用戶名和密碼,密碼并不是登錄密碼,而是開啟POP3之后設置的客戶端授權密碼。
以QQ郵箱為例,進行密碼的配置和獲取。首先登錄QQ郵箱,找“設置”,“賬戶”。
在下面找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務”,選擇第二項中的“IMAP/SMTP服務”,進行開啟。
開啟成功,會顯示如下頁面:
頁面中便包含了授權碼,也就是我們項目中的密碼。此時將該授權碼復制到password處即可。
發送文本郵件
完成了上面的配置,發送功能的實現便極其簡單了,直接在項目中注入JavaMailSender然后調用其send方法便可進行郵件的發送。
以單元測試的形式發送郵件如下:
@RunWith(SpringRunner.class) @SpringBootTest public class MailTests {@Resourceprivate JavaMailSender javaMailSender;@Testpublic void sendMail() {SimpleMailMessage msg = new SimpleMailMessage();msg.setFrom("123@qq.com");msg.setTo("123@qq.com");msg.setSubject("程序新視界");msg.setText("技術分享");javaMailSender.send(msg);} }程序很簡單,創建一個SimpleMailMessage對象,設置從哪個(from)賬號發送到(to)哪個賬號,郵件的標題(subject)和內容(text)分別是什么。
執行單元測試,稍等片刻,郵箱便收到了郵件。如果執行的過程中出現權限驗證相關的異常,則需要檢查一下相關的配置是否正確。
如果需要抄送其他人,通過如下格式新增一個或多個收件地址。
// 抄送郵箱 msg.setCc("abc@126.com","def@126.com");發送富文本郵件
正常來說,我們的郵件會有不同的格式,使用上面的SimpleMailMessage不能夠很好的豐富郵件內容,也不支持html的解析。
Spring Boot支持使用HTML發送郵件是通過MimeMessage來完成的??淳唧w的示例代碼:
@Test public void sendHtmlMail() {String content="<html>n" +"<body>n" +" <h3>hello world ! 這是一封html郵件!</h3>n" +"</body>n" +"</html>";MimeMessage message = javaMailSender.createMimeMessage();try {// 第二個參數true表示需要創建一個multipart messageMimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom("123@qq.com");helper.setTo("123@qq.com");helper.setSubject("程序新視界");helper.setText(content, true);javaMailSender.send(message);} catch (MessagingException e){System.out.println("發送郵件異常");} }此處使用了MimeMessageHelper來設置對應的參數信息,但在調用MimeMessageHelper對應的setter方法時會拋出MessagingException異常,需要進行特殊處理。
上面的content的內容,如果使用SimpleMailMessage對象進行發送,郵件的內容是包含html標簽的內容,而不是直接呈現html標簽所需要展示的格式。
MimeMessageHelper支持發送復雜郵件模板,支持文本、附件、HTML、圖片等。比如需要發送附件,則在上面的代碼中通過調用helper的addAttachment(fileName, file)方法即可。
我們這里就不再拓展其他功能,大家可自行進行嘗試。
其他擴展
上面只是通過單元測試的形式展示了基于Spring Boot發送郵件,當然,在生產環境中的應用場景要比上面的復雜的多。比如,要考慮郵件模板、對外接口、異常處理、成功率等問題。大家可在此基礎上進行拓展。
源碼地址:https://github.com/secbr/springboot-learn/tree/master/springboot-mail
本文首發來自微信公眾號:程序新視界。一個軟實力、硬技術同步學習的平臺。
總結
以上是生活随笔為你收集整理的exchange邮件服务器_基于Spring Boot快速实现发送邮件功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑计算器的快捷键_牛!这份金蝶财务软件
- 下一篇: 【学习笔记】数据链路层——轮询访问介质控