Spring Boot--- springboot 集成 JavaMail 实现邮箱认证
轉(zhuǎn)自:https://www.cnblogs.com/wushaopei/p/11979413.html
原創(chuàng)為注冊發(fā)送驗(yàn)證碼,本文抽取了其中的發(fā)送工具類
一、JavaMail
1、什么是JavaMail?
JavaMail,顧名思義,提供給開發(fā)者處理 電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便的執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMaiil開發(fā)出類似于 Microsoft Outlook的應(yīng)用程序。
2、關(guān)于要使用JavaMail的原因?
基于現(xiàn)在WEB開發(fā)中對JavaMail的需求,例如:
用戶注冊后,網(wǎng)站發(fā)送一封激活郵件驗(yàn)證;
用戶過生日,系統(tǒng)發(fā)送生日祝福郵件;
將最新活動(dòng)和優(yōu)惠以郵件的形式告知會(huì)員等等…
以上的需求都需要通過編程語言實(shí)現(xiàn)發(fā)送郵件功能,而JavaMail便能滿足這一需求。
3、電子郵箱及郵件服務(wù)器
什么是電子郵箱?
電子郵箱(E-mail 地址) 需要在郵件服務(wù)器上進(jìn)行申請,確切的說,電子郵箱其實(shí)就是用戶在郵件服務(wù)器上申請的一個(gè)賬戶,用戶在郵件服務(wù)器上申請了一個(gè)賬號(hào)后,郵件服務(wù)器就會(huì)為這個(gè)賬號(hào)分配一定的空間,用戶從而可以使用這個(gè)賬號(hào)以及空間,發(fā)送電子郵件和保存別人發(fā)送過來的電子郵件。
什么是郵箱服務(wù)器?
服務(wù)器指的是一臺(tái)電腦安裝了一個(gè)服務(wù)器軟件,那么這臺(tái)電腦就可以稱為是WEB服務(wù)器,那么同樣的一臺(tái)電腦安裝了郵件服務(wù)器軟件,那么這臺(tái)電腦稱為是郵件服務(wù)器。
基于互聯(lián)網(wǎng)的電子郵件功能:
要在Internet上提供電子郵件功能,必須有專門的電子郵件服務(wù)器,例如目前網(wǎng)絡(luò)上提供郵件服務(wù)的廠商:新浪、搜狐、網(wǎng)易等等他們都有自己的郵件服務(wù)器。
4、郵件收發(fā)協(xié)議
(1)SMTP協(xié)議(發(fā)送郵件)
簡單郵件傳輸協(xié)議 (Simple Mail Transfer Protocol, SMTP) 是在Internet傳輸email的事實(shí)標(biāo)準(zhǔn)。(百度百科)
SMTP是一個(gè)相對簡單的基于文本的協(xié)議。在其之上指定了一條消息的一個(gè)或多個(gè)接收者(在大多數(shù)情況下被確認(rèn)是存在的),然后消息文本會(huì)被傳輸??梢院芎唵蔚赝ㄟ^telnet程序來測試一個(gè)SMTP服務(wù)器。SMTP使用TCP端口25。要為一個(gè)給定的域名決定一個(gè)SMTP服務(wù)器,需要使用MX (Mail eXchange) DNS。(百度百科)
用戶臉上郵件服務(wù)器后,要想給它發(fā)送一封電子郵件,需要遵循一定的通訊規(guī)則,SMTP協(xié)議就是用于定義這種規(guī)則的。因此,通常我們也把處理用戶SMTP請求(郵件發(fā)送請求)的郵件服務(wù)器稱之為SMTP服務(wù)器。
(2)POP3協(xié)議(接收郵件)
POP3,全名為“Post Office Protocol - Version 3”,即“郵局協(xié)議版本3”。是TCP/IP協(xié)議族中的一員,由RFC1939 定義。本協(xié)議主要用于支持使用客戶端遠(yuǎn)程管理在服務(wù)器上的電子郵件。提供了SSL加密的POP3協(xié)議被稱為POP3S。(百度百科)
POP 協(xié)議支持“離線”郵件處理。其具體過程是:郵件發(fā)送到服務(wù)器上,電子郵件客戶端調(diào)用郵件客戶機(jī)程序以連接服務(wù)器,并下載所有未閱讀的電子郵件。這種離線訪問模式是一種存儲(chǔ)轉(zhuǎn)發(fā)服務(wù),將郵件從郵件服務(wù)器端送到個(gè)人終端機(jī)器上,一般是PC機(jī)或 MAC。一旦郵件發(fā)送到 PC 機(jī)或MAC上,郵件服務(wù)器上的郵件將會(huì)被刪除。但目前的POP3郵件服務(wù)器大都可以“只下載郵件,服務(wù)器端并不刪除”,也就是改進(jìn)的POP3協(xié)議。(百度百科)
同樣,用戶若想從郵件服務(wù)器管理的電子郵件中接受一封電子郵件的話,他臉上郵件服務(wù)器后,也需要遵循一定的通訊格式,POP3協(xié)議用于定義這種通訊格式。
因而,通常我們也把處理用戶POP3請求(郵件接受請求)的郵件服務(wù)器稱之為POP3服務(wù)器。
(3)郵件收發(fā)過程的介紹:
郵件的發(fā)送、接受,在客戶端軟件中,由SMTP服務(wù)器進(jìn)行發(fā)送操作,接受是由POP3服務(wù)器進(jìn)行接收。
1、郵件發(fā)送協(xié)議-SMTP,默認(rèn)端口號(hào)25
用于把用戶郵件從一個(gè)服務(wù)器轉(zhuǎn)到下一個(gè)服務(wù)器
2、郵件接收協(xié)議-POP3,默認(rèn)端口號(hào)110
用于支持使用客戶端遠(yuǎn)程管理在服務(wù)器上的電子郵件
MailUtils.java
package com.example.utils;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component;import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.util.Properties;@Component public class MailUtils {@Autowiredprivate EmailConfig emailConfig;private final Logger logger = LoggerFactory.getLogger(MailUtils.class);/*** 發(fā)送郵件的方法* @Param to :給誰發(fā)郵件* @Param code : 郵件的激活碼* @Param subject : 主題* @Param text : 內(nèi)容**/public void sendMail(String toEmail, String code,final String subject,final String text){try{//1、創(chuàng)建郵件對象JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();//2、發(fā)郵件人郵箱javaMailSender.setUsername(emailConfig.getUsername());//3、發(fā)郵件人郵箱密碼(默認(rèn)使用客戶端的授權(quán)碼)javaMailSender.setPassword(emailConfig.getPassword());//4、設(shè)置郵件服務(wù)器主機(jī)名 SMTP服務(wù)器地址javaMailSender.setHost(emailConfig.getHost());//5、SMTP服務(wù)器: 默認(rèn)端口javaMailSender.setPort(25);//6、//發(fā)送郵件協(xié)議名稱javaMailSender.setProtocol("smtp");//7、編碼格式javaMailSender.setDefaultEncoding("UTF-8");//8、創(chuàng)建連接對象,連接到郵箱服務(wù)器Properties mailProperties = new Properties();//發(fā)送服務(wù)器需要身份驗(yàn)證,要采用指定用戶名密碼的方式去認(rèn)證mailProperties.put("mail.smtp.auth", true);mailProperties.put("mail.smtp.starttls.enable", true);//9、添加連接對象到郵件對象中javaMailSender.setJavaMailProperties(mailProperties);int count = 1;//10、創(chuàng)建//可以發(fā)送幾封郵件:可以這里 for循環(huán)多次MimeMessage mimeMessage = getMimeMessage(toEmail,subject,text, javaMailSender);//11、發(fā)送郵件javaMailSender.send(mimeMessage);logger.info("發(fā)送 第"+ count + "封郵件" );count ++;logger.info("發(fā)往 "+toEmail+" 郵件發(fā)送成功");} catch (MessagingException e) {logger.error("發(fā)往 "+toEmail+" 郵件發(fā)送異常", e);}}//聲明一個(gè)Message對象(代表一封郵件),從session中創(chuàng)建private MimeMessage getMimeMessage(String toEmail,String subject,String text, JavaMailSenderImpl javaMailSender) throws MessagingException {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");//發(fā)件人mimeMessageHelper.setFrom(emailConfig.getSenderName());//收件人 : 可以發(fā)送給多個(gè)收件人,該方法有一個(gè)重載的 數(shù)組形參mimeMessageHelper.setTo(toEmail); // mimeMessage.setContent();//郵件主題mimeMessageHelper.setSubject(subject);//郵件內(nèi)容mimeMessageHelper.setText(text, true);return mimeMessage;} }調(diào)用
mailUtils.sendMail(email,user.getCode(),"來自郵箱測試接口郵件","<h1>來自wto網(wǎng)站激活郵件,激活請點(diǎn)擊以下鏈接:</h1><h3><a href='http://wj7ei8.natappfree.cc/regist_web/activateServlet?code="+user.getCode()+"'>http://wj7ei8.natappfree.cc/regist_web/activateServlet?code="+user.getCode()+"</a></h3>");總結(jié)
以上是生活随笔為你收集整理的Spring Boot--- springboot 集成 JavaMail 实现邮箱认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python开发软件-七种流行的pyth
- 下一篇: 使用Retrofit+RxJava下载文