欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼

 更新時(shí)間:2018年02月02日 11:56:09   作者:江南一點(diǎn)雨  
這篇文章主要介紹了SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

本文是vhr系列的第十二篇,項(xiàng)目地址 https://github.com/lenve/vhr

郵件發(fā)送也是一個(gè)老生常談的問(wèn)題了,代碼雖然簡(jiǎn)單,但是許多小伙伴對(duì)過(guò)程不太理解,所以還是打算和各位小伙伴聊聊這個(gè)話題。

郵件協(xié)議

我們經(jīng)常會(huì)聽(tīng)到各種各樣的郵件協(xié)議,比如SMTP、POP3、IMAP,那么這些協(xié)議有什么作用,有什么區(qū)別?我們先來(lái)討論一下這個(gè)問(wèn)題。

SMTP是一個(gè)基于TCP/IP的應(yīng)用層協(xié)議,江湖地位有點(diǎn)類似于HTTP,SMTP服務(wù)器默認(rèn)監(jiān)聽(tīng)的端口號(hào)為25??吹竭@里,小伙伴們可能會(huì)想到既然SMTP協(xié)議是基于TCP/IP的應(yīng)用層協(xié)議,那么我是不是也可以通過(guò)Socket發(fā)送一封郵件呢?回答是肯定的。

生活中我們投遞一封郵件要經(jīng)過(guò)如下幾個(gè)步驟:

1.深圳的小王先將郵件投遞到深圳的郵局

2.深圳的郵局將郵件運(yùn)送到上海的郵局

3.上海的小張來(lái)郵局取郵件

這是一個(gè)縮減版的生活中郵件發(fā)送過(guò)程。這三個(gè)步驟可以分別對(duì)應(yīng)我們的郵件發(fā)送過(guò)程,假設(shè)從aaa@qq.com發(fā)送郵件到111@163.com

1.aaa@qq.com先將郵件投遞到騰訊的郵件服務(wù)器

2.騰訊的郵件服務(wù)器將我們的郵件投遞到網(wǎng)易的郵件服務(wù)器

3.111@163.com登錄網(wǎng)易的郵件服務(wù)器查看郵件

郵件投遞大致就是這個(gè)過(guò)程,這個(gè)過(guò)程就涉及到了多個(gè)協(xié)議,我們來(lái)分別看一下。

SMTP協(xié)議全稱為Simple Mail Transfer Protocol,譯作簡(jiǎn)單郵件傳輸協(xié)議,它定義了郵件客戶端軟件于SMTP服務(wù)器之間,以及SMTP服務(wù)器與SMTP服務(wù)器之間的通信規(guī)則。也就是說(shuō)aaa@qq.com用戶先將郵件投遞到騰訊的SMTP服務(wù)器這個(gè)過(guò)程就使用了SMTP協(xié)議,然后騰訊的SMTP服務(wù)器將郵件投遞到網(wǎng)易的SMTP服務(wù)器這個(gè)過(guò)程也依然使用了SMTP協(xié)議,SMTP服務(wù)器就是用來(lái)收郵件。而POP3協(xié)議全稱為Post Office Protocol,譯作郵局協(xié)議,它定義了郵件客戶端與POP3服務(wù)器之間的通信規(guī)則,那么該協(xié)議在什么場(chǎng)景下會(huì)用到呢?當(dāng)郵件到達(dá)網(wǎng)易的SMTP服務(wù)器之后,111@163.com用戶需要登錄服務(wù)器查看郵件,這個(gè)時(shí)候就該協(xié)議就用上了:郵件服務(wù)商都會(huì)為每一個(gè)用戶提供專門的郵件存儲(chǔ)空間,SMTP服務(wù)器收到郵件之后,就將郵件保存到相應(yīng)用戶的郵件存儲(chǔ)空間中,如果用戶要讀取郵件,就需要通過(guò)郵件服務(wù)商的POP3郵件服務(wù)器來(lái)完成。最后,可能也有小伙伴們聽(tīng)說(shuō)過(guò)IMAP協(xié)議,這個(gè)協(xié)議是對(duì)POP3協(xié)議的擴(kuò)展,功能更強(qiáng),作用類似,這里不再贅述。

發(fā)送QQ郵件準(zhǔn)備工作

首先我們需要先登錄QQ郵箱網(wǎng)頁(yè)版,點(diǎn)擊上方的設(shè)置按鈕:

 

然后點(diǎn)擊賬戶選項(xiàng)卡:

 

在賬戶選項(xiàng)卡中找到開(kāi)啟POP3/SMTP選項(xiàng),如下:

 

點(diǎn)擊開(kāi)啟,開(kāi)啟相關(guān)功能,開(kāi)啟過(guò)程需要手機(jī)號(hào)碼驗(yàn)證,按照步驟操作即可,不贅述。開(kāi)啟成功之后,即可獲取一個(gè)授權(quán)碼,將該號(hào)碼保存好,一會(huì)使用。

然后我們需要JavaxMail這個(gè)jar包,小伙伴可以直接去Maven中央倉(cāng)庫(kù)下載,這里不再贅述。

發(fā)送

簡(jiǎn)單郵件

如果我們只發(fā)送一個(gè)簡(jiǎn)單的文本,發(fā)送方式就比較簡(jiǎn)單,整個(gè)過(guò)程可以分為三步如下:

第一步:構(gòu)造SMTP郵件服務(wù)器的基本環(huán)境

Properties properties = new Properties();
properties.setProperty("mail.host", "smtp.qq.com");
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(properties);
session.setDebug(true);

第二步:構(gòu)造郵件

MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.addRecipients(Message.RecipientType.TO, "111@qq.com");//設(shè)置收信人
mimeMessage.addRecipients(Message.RecipientType.CC, "222@qq.com");//抄送
mimeMessage.setFrom("1510161612@qq.com");//郵件發(fā)送人
mimeMessage.setSubject("測(cè)試郵件主題");//郵件主題
mimeMessage.setContent("Hello,這是一封測(cè)試郵件", "text/html;charset=utf-8");//正文

第三步:發(fā)送郵件

Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "333@qq.com", "剛剛申請(qǐng)到的授權(quán)碼");
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());//發(fā)送郵件,第二個(gè)參數(shù)為收件人
transport.close();

復(fù)雜郵件

發(fā)送復(fù)雜郵件,第一步和第三步也是一樣的,只有第二步構(gòu)造郵件的過(guò)程比較麻煩,那么接下來(lái)給小伙伴們演示一個(gè)發(fā)送一封圖文+兩個(gè)附件的郵件。要發(fā)送復(fù)雜郵件,得先熟悉三個(gè)概念,如下:

1.MimeMessage:該類是個(gè)能理解MIME類型和頭的電子郵件消息

2.MimeMultipart:該類定義了增加、刪除以及獲取郵件不同部分內(nèi)容的方法

3.MimeBodyPart:該對(duì)象代表一個(gè)MimeMessage對(duì)象內(nèi)容的一部分。每個(gè)MimeBodyPart被認(rèn)為有兩部分:MIME類型和匹配這個(gè)類型的內(nèi)容

完整的郵件生成過(guò)程如下(第一步和第三步參考上文):

MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.addRecipients(Message.RecipientType.TO, "111@qq.com");//設(shè)置收信人
mimeMessage.addRecipients(Message.RecipientType.CC, "222@qq.com");//抄送
mimeMessage.setFrom("333@qq.com");//郵件發(fā)送人
mimeMessage.setSubject("測(cè)試郵件主題");//郵件主題
MimeMultipart mixed = new MimeMultipart("mixed");
mimeMessage.setContent(mixed);//設(shè)置整封郵件的MIME消息體為混合的組合關(guān)系
MimeBodyPart attach1 = new MimeBodyPart();//創(chuàng)建附件1
MimeBodyPart attach2 = new MimeBodyPart();//創(chuàng)建附件2
MimeBodyPart content = new MimeBodyPart();//創(chuàng)建郵件正文
mixed.addBodyPart(attach1);//將附件一添加到MIME消息體中
mixed.addBodyPart(attach2);//將附件二添加到MIME消息體中
mixed.addBodyPart(content);//將正文添加到消息體中
FileDataSource fds1 = new FileDataSource(new File("C:\\Users\\sang\\Desktop\\1.png"));//構(gòu)造附件一的數(shù)據(jù)源
DataHandler dh1 = new DataHandler(fds1);//數(shù)據(jù)處理
attach1.setDataHandler(dh1);//設(shè)置附件一的數(shù)據(jù)源
attach1.setFileName("1.png");//設(shè)置附件一的文件名
//附件二的操作與附件一類似,這里就不一一注釋了
FileDataSource fds2 = new FileDataSource(new File("C:\\Users\\sang\\Desktop\\博客筆記.xlsx"));
DataHandler dh2 = new DataHandler(fds2);
attach2.setDataHandler(dh2);
attach2.setFileName(MimeUtility.encodeText("博客筆記.xlsx"));//設(shè)置文件名時(shí),如果有中文,可以通過(guò)MimeUtility類中的encodeText方法進(jìn)行編碼,避免亂碼
MimeMultipart bodyMimeMultipart = new MimeMultipart("related");//設(shè)置正文的MIME類型
content.setContent(bodyMimeMultipart);//將bodyMimeMultipart添加到正文消息體中
MimeBodyPart bodyPart = new MimeBodyPart();//正文的HTML部分
bodyPart.setContent("<h1>Hello大家好,這是一封測(cè)試郵件<img src='cid:2.png'/></h1>","text/html;charset=utf-8");
MimeBodyPart picPart = new MimeBodyPart();//正文的圖片部分
DataHandler dataHandler = new DataHandler(new FileDataSource("C:\\Users\\sang\\Desktop\\2.png"));
picPart.setDataHandler(dataHandler);
picPart.setContentID("2.png");
//將正文的HTML和圖片部分分別添加到bodyMimeMultipart中
bodyMimeMultipart.addBodyPart(bodyPart);
bodyMimeMultipart.addBodyPart(picPart);
mimeMessage.saveChanges();

OK,Java Mail發(fā)送QQ郵件就是這么簡(jiǎn)單,至于其他的如163,sina等,寫法類似,這里我就不贅述了。

總結(jié)

以上所述是小編給大家介紹的SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java仿百度假分頁(yè)代碼實(shí)現(xiàn)的詳解

    java仿百度假分頁(yè)代碼實(shí)現(xiàn)的詳解

    這篇文章主要介紹了java仿百度假分頁(yè)代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 成功解決IDEA2020 Plugins 連不上、打不開(kāi)的方法

    成功解決IDEA2020 Plugins 連不上、打不開(kāi)的方法

    這篇文章主要介紹了成功解決IDEA2020 Plugins 連不上、打不開(kāi)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析

    這篇文章主要介紹了Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例

    基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例

    本篇文章主要介紹了基于Spring Mvc實(shí)現(xiàn)的Excel文件上傳下載示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 詳解springboot項(xiàng)目docker部署實(shí)踐

    詳解springboot項(xiàng)目docker部署實(shí)踐

    這篇文章主要介紹了詳解springboot項(xiàng)目docker部署實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • java實(shí)現(xiàn)支付寶退款功能

    java實(shí)現(xiàn)支付寶退款功能

    這篇文章主要為大家詳細(xì) 介紹了java實(shí)現(xiàn)支付寶退款功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • SpringBoot項(xiàng)目實(shí)現(xiàn)日志打印SQL的常用方法(包括SQL語(yǔ)句和參數(shù))

    SpringBoot項(xiàng)目實(shí)現(xiàn)日志打印SQL的常用方法(包括SQL語(yǔ)句和參數(shù))

    有時(shí)候遇到問(wèn)題需要根據(jù)我們編寫的SQL進(jìn)行分析,但如果不進(jìn)行一些開(kāi)發(fā)或者配置的話,這些SQL是不會(huì)打印到控制臺(tái)的,它們默認(rèn)是隱藏的。下面給大家介紹幾種常用的方法,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • java 一鍵部署 jar 包和 war 包

    java 一鍵部署 jar 包和 war 包

    這篇文章主要介紹了Java創(chuàng)建打包命令、創(chuàng)建啟動(dòng)文件等功能實(shí)現(xiàn)Java一鍵部署 jar 包和 war 包,感興趣的下伙伴可以參考下文
    2021-09-09
  • java使用TimeZone將中國(guó)標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)成時(shí)區(qū)值

    java使用TimeZone將中國(guó)標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)成時(shí)區(qū)值

    這篇文章主要介紹了java使用TimeZone將中國(guó)標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)成時(shí)區(qū)值的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java編程中正則表達(dá)式的用法總結(jié)

    Java編程中正則表達(dá)式的用法總結(jié)

    這篇文章主要介紹了Java編程中正則表達(dá)式的用法總結(jié),正則表達(dá)式是一種強(qiáng)大的字符串處理工具,Java對(duì)正則表達(dá)式的支持還是很不錯(cuò)的,我們先來(lái)整理一下正則表達(dá)式的一些基礎(chǔ)知識(shí):
    2016-05-05

最新評(píng)論