JavaMail是SUN提供給廣大Java開(kāi)發(fā)人員的一款郵件發(fā)送和接受的一款開(kāi)源類庫(kù)赏殃,支持常用的郵件協(xié)議惠啄,如:SMTP、POP3萌丈、IMAP,開(kāi)發(fā)人員使用JavaMail編寫(xiě)郵件程序時(shí)雷则,不再需要考慮底層的通訊細(xì)節(jié)如:Socket而是關(guān)注在邏輯層面浓瞪。JavaMail可以發(fā)送各種復(fù)雜MIME格式的郵件內(nèi)容,注意JavaMail僅支持JDK4及以上版本巧婶。雖然JavaMail是JDK的API但它并沒(méi)有直接加入JDK中乾颁,所以我們需要另外添加依賴,下面我們開(kāi)始講解本章的內(nèi)容艺栈。
免費(fèi)專題文章匯總
恒宇少年在博客整理出來(lái)了SpringBoot英岭、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】湿右,【SpringCloud基礎(chǔ)教程專題】诅妹,【ApiBoot組件使用專題】
本章目標(biāo)
將Java提供的JavaMail類庫(kù)與SpringBoot項(xiàng)目進(jìn)行整合,并且簡(jiǎn)單封裝下JavaMail類庫(kù)。
構(gòu)建項(xiàng)目
本章項(xiàng)目無(wú)關(guān)Web相關(guān)內(nèi)容吭狡,所以創(chuàng)建項(xiàng)目時(shí)選擇Jar形式創(chuàng)建尖殃,并且不需要預(yù)先導(dǎo)入依賴。項(xiàng)目結(jié)構(gòu)如下圖1所示:
可以看到上圖1內(nèi)容划煮,多余的依賴并沒(méi)有添加送丰,如果你選擇的是War項(xiàng)目也沒(méi)有關(guān)系名,那好弛秋,我們接下來(lái)把我們的主角JavaMail請(qǐng)出來(lái)吧器躏,把對(duì)應(yīng)的依賴添加到pom.xml配置文件內(nèi)。如下圖2所示:
依賴我們已經(jīng)導(dǎo)入成功了蟹略,接下來(lái)我們開(kāi)始編寫(xiě)JavaMail的封裝登失,我這里簡(jiǎn)單的對(duì)JavaMail做出封裝,如果您需要更完美的封裝挖炬,請(qǐng)對(duì)我的代碼做出修改即可揽浙,先來(lái)編寫(xiě)一個(gè)MailEntity類來(lái)保存發(fā)送郵件時(shí)需要的參數(shù)字段,如下圖3所示:
我們的MailEntity包含了上圖3的字段內(nèi)容意敛,都是一些必填選項(xiàng)捏萍,下面我們來(lái)創(chuàng)建一個(gè)MailSender也就是郵件發(fā)送者實(shí)體,主要作用就是用來(lái)配置發(fā)送郵件參數(shù)以及執(zhí)行發(fā)送郵件空闲,代碼如下圖4、5走敌、6碴倾、7、8所示:
因?yàn)楹?jiǎn)書(shū)的富文本編輯器不支持代碼塊掉丽,下次編寫(xiě)文章使用MarkDown方式來(lái)寫(xiě)跌榔,類過(guò)長(zhǎng)貼起來(lái)圖挺費(fèi)勁。上面可以看到我使用到了MailContentTypeEnum以及PropertiesUtil工具類捶障。
MailContentTypeEnum
這是一個(gè)我自定義的枚舉類型僧须,枚舉類型包含了郵件內(nèi)容的類型,目前我僅僅添加了兩種项炼,一種是html另外一種則是text形式担平,具體代碼如下圖9所示:
PropertiesUtil
PropertiesUtil是用于讀取*.properties配置文件的工具類,使用JavaMail需要配置SMTP以及用戶名锭部、密碼等也就是MailEntity內(nèi)的字段暂论,那么我們?cè)?resource目錄下創(chuàng)建一個(gè)名字叫mail.properties的配置文件,里面存放我們定義的郵件發(fā)送參數(shù)配置拌禾,這樣方便修改取胎,我分別貼出PropertiesUtil、mail.properties代碼內(nèi)容,如下圖10闻蛀、圖11所示:
我使用的QQ郵箱地址作為測(cè)試匪傍,如果你需要使用你的QQ地址作為測(cè)試,請(qǐng)先到QQ郵箱開(kāi)啟POP3/SMTP服務(wù)觉痛,開(kāi)啟步驟如下役衡。
開(kāi)啟POP3/SMTP
第一步:進(jìn)入郵箱點(diǎn)擊“設(shè)置”,如下圖12所示:
第二步:點(diǎn)擊“賬戶”后往下拉找到POP3/IMAP/SMTP...秧饮,如下圖13所示:
我的POP3以及SMTP以及開(kāi)啟了所以這里顯示的狀態(tài)是已開(kāi)啟映挂,如果您第一次使用QQ郵箱的SMTP服務(wù),請(qǐng)點(diǎn)擊“開(kāi)啟”并且按照提示步驟完成獲取“授權(quán)碼”即可盗尸,授權(quán)碼就是發(fā)送郵件參數(shù)的smtp.pwd屬性柑船。
測(cè)試發(fā)送郵件
我們創(chuàng)建一個(gè)TestMail類來(lái)作為測(cè)試入口,因?yàn)槲覀兊捻?xiàng)目是jar形式泼各,所以我們直接新建一個(gè)main方法直接調(diào)用發(fā)送郵件就可以了鞍时,如下圖14所示測(cè)試代碼:
我是向我的釘釘郵箱發(fā)送了一條文本類型的測(cè)試郵件,發(fā)送效果圖如下圖15所示:
可以看到我們的郵件收到了扣蜻,證明我們已經(jīng)完成了郵件發(fā)送的功能了逆巍,但是你在發(fā)送中配置mail.properties文件時(shí)配置昵稱的時(shí)候最有可能出現(xiàn)的問(wèn)題就是亂碼,那么該問(wèn)題如何解決呢莽使?
昵稱亂碼問(wèn)題解決
第一步:修改InteiiJ IDEA工具的properties文件的編碼锐极,點(diǎn)擊File->Setting->Editor->File Encodings將下面的Default encoding設(shè)置為UTF-8,如下圖16所示:
那么我們的mail.properties內(nèi)使用ASCII編碼進(jìn)行配置昵稱就可以了芳肌,具體中文如何轉(zhuǎn)換ASCII灵再,請(qǐng)大家訪問(wèn)tool.oschina.net/encode在線轉(zhuǎn)換即可。修改完成后再次測(cè)試發(fā)送郵件亿笤,你就會(huì)發(fā)現(xiàn)亂碼問(wèn)題解決了翎迁。
總結(jié)
上述內(nèi)容就是本章的所有講解,本章主要講解了在SpringBoot項(xiàng)目?jī)?nèi)是如何使用JavaMail來(lái)進(jìn)行發(fā)送簡(jiǎn)單郵件净薛,簡(jiǎn)單封裝了下MailSender類以及對(duì)象實(shí)體MailEntity汪榔,如果需要發(fā)送HTML內(nèi)容的郵件修改contentType(MailContentTypeEnum.HTML)然后content("html代碼")即可。
本章代碼已經(jīng)上傳碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請(qǐng)?jiān)L問(wèn):QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringDataJPA學(xué)習(xí)目錄
SpringBoot相關(guān)文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄肃拜,感謝閱讀痴腌!
歡迎微信掃碼加入知識(shí)星球,恒宇少年帶你走以后的技術(shù)道路H剂臁V灾馈!
知識(shí)星球 - 恒宇少年