<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 2 集成郵件發(fā)送組件

          共 4553字,需瀏覽 10分鐘

           ·

          2020-10-13 00:16

          點(diǎn)擊藍(lán)色“泥瓦匠BYSocket”,關(guān)注我喲 加個(gè)星標(biāo)”,不忘簽到哦

          作者:周立@IT牧場(chǎng)

          GitHub:http://www.itmuch.com/spring-boot/send-email/

          本文基于:Spring Boot 2.1.3,理論支持Spring Boot 2.x所有版本。

          最近有童鞋問到筆者如何用Spring Boot發(fā)送郵件,故而整理下Spring Boot發(fā)送郵件的各種姿勢(shì)。

          說到郵件放松,相信大家對(duì)Spring Framework提供的接口?JavaMailSender?都不陌生。那么Spring Boot是否有開箱即用的郵件發(fā)送呢?

          答案是肯定的。Spring Boot為發(fā)送郵件提供了starter:spring-boot-starter-mail?。

          本文詳細(xì)探討如何用Spring Boot發(fā)送郵件。

          一、郵箱配置

          以126郵箱為例:

          1 開啟SMTP服務(wù)

          2 設(shè)置/重置客戶端授權(quán)密碼

          二、編碼

          2.1 準(zhǔn)備工作

          1 加依賴


            org.springframework.boot  spring-boot-starter-mail


          2 寫配置


          spring:??mail:????host:?smtp.126.com????username:[email protected]????password:?上面設(shè)置的授權(quán)碼


          2.2 發(fā)送簡(jiǎn)單郵件


          public String simple() {    SimpleMailMessage message = new SimpleMailMessage();    // 發(fā)件人郵箱    message.setFrom(this.mailProperties.getUsername());    // 收信人郵箱    message.setTo("[email protected]");    // 郵件主題    message.setSubject("簡(jiǎn)單郵件測(cè)試");    // 郵件內(nèi)容    message.setText("簡(jiǎn)單郵件測(cè)試");    this.javaMailSender.send(message);    return "success";}


          結(jié)果類似下圖:

          2.3 發(fā)送HTML郵件

          簡(jiǎn)單郵件是沒有樣式的,很多時(shí)候,我們希望發(fā)送的郵件內(nèi)容帶有樣式,此時(shí)可發(fā)送HTML郵件。


          public String html() throws MessagingException {    MimeMessage message = javaMailSender.createMimeMessage();    MimeMessageHelper messageHelper = new MimeMessageHelper(message);
          messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("[email protected]"); messageHelper.setSubject("HTML內(nèi)容郵件測(cè)試"); // 第二個(gè)參數(shù)表示是否html,設(shè)為true messageHelper.setText("

          HTML內(nèi)容..

          ", true);

          this.javaMailSender.send(message); return "success";}


          結(jié)果類似下圖:

          2.4 發(fā)送帶附件的郵件

          很多場(chǎng)景下,需要為郵件插入附件,此時(shí)該怎么辦呢?繼續(xù)上代碼——


          @GetMapping("/attach")public String attach() throws MessagingException {    MimeMessage message = this.javaMailSender.createMimeMessage();    // 第二個(gè)參數(shù)表示是否開啟multipart模式    MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
          messageHelper.setFrom(this.mailProperties.getUsername()); messageHelper.setTo("[email protected]"); messageHelper.setSubject("帶附件的郵件測(cè)試"); // 第二個(gè)參數(shù)表示是否html,設(shè)為true messageHelper.setText("

          HTML內(nèi)容..

          ", true);
          messageHelper.addAttachment("附件名稱", new ClassPathResource("wx.jpg"));
          this.javaMailSender.send(message); return "success";}


          結(jié)果類似下圖:

          2.5 發(fā)送帶內(nèi)聯(lián)附件的郵件

          附件?+ HTML基本能滿足日常工作中多數(shù)需求。但如果能將附件內(nèi)聯(lián)在郵件內(nèi)容中,那么體驗(yàn)就更好啦!如何實(shí)現(xiàn)附件的內(nèi)聯(lián)呢?


          @GetMapping("/inline-attach")public String inlineAttach() throws MessagingException {    MimeMessage message = this.javaMailSender.createMimeMessage();    // 第二個(gè)參數(shù)表示是否開啟multipart模式    MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);    messageHelper.setFrom(this.mailProperties.getUsername());    messageHelper.setTo("[email protected]");    messageHelper.setSubject("內(nèi)聯(lián)附件的郵件測(cè)試");    // 第二個(gè)參數(shù)表示是否html,設(shè)為true????messageHelper.setText("

          HTML內(nèi)容..

          ",?true);
          messageHelper.addInline("attach", new ClassPathResource("wx.jpg"));
          this.javaMailSender.send(message); return "success";}


          由代碼可知,只需在想要內(nèi)聯(lián)的地方使用?cid:xx?引用內(nèi)聯(lián)附件,然后用?addInline(xx, file)指定附件即可。

          2.6 發(fā)送基于Freemarker模板的郵件

          上面的例子中,郵件內(nèi)容是直接以字符串體現(xiàn)的,這通常不適合生產(chǎn),因?yàn)閷?shí)際項(xiàng)目中郵件往往帶有變量。此時(shí),可考慮使用Freemarker模板(或者其他模板,Spring Boot 2.x默認(rèn)支持Freemarker、Groovy、Thymeleaf、Mustache四種模板引擎,也可根據(jù)需求使用其他模板引擎)。

          ?創(chuàng)建Freemarker模板文件mail.ftl,并將其存放在resources/templates/?目錄中

          親愛的${username}, 歡迎關(guān)注${event}

          ?

          編碼:

          @GetMapping("/freemarker")public String freemarker() throws MessagingException, IOException, TemplateException {    MimeMessage message = this.javaMailSender.createMimeMessage();    // 第二個(gè)參數(shù)表示是否開啟multipart模式    MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);    messageHelper.setFrom(this.mailProperties.getUsername());    messageHelper.setTo("[email protected]");    messageHelper.setSubject("基于freemarker模板的郵件測(cè)試");
          Map model = new HashMap<>(); model.put("username", "itmuch"); model.put("event", "IT牧場(chǎng)大事件");
          String content = FreeMarkerTemplateUtils.processTemplateIntoString( this.freemarkerConfiguration.getTemplate("mail.ftl"), model);
          // 第二個(gè)參數(shù)表示是否html,設(shè)為true messageHelper.setText(content, true);
          this.javaMailSender.send(message); return "success";}


          此時(shí),結(jié)果類似下圖:

          References

          [1]?GitHub:?https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail
          [2]?Gitee:?https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail

          以下專題教程也許您會(huì)有興趣

          • 《程序兵法:算法與數(shù)據(jù)結(jié)構(gòu)》 https://www.bysocket.com/archives/2314/algorithm

          • 《Spring Boot 2.x 系列教程》https://www.bysocket.com/springboot

          • 《Java 核心系列教程》https://www.bysocket.com/archives/2100

          由于能力有限,若有錯(cuò)誤或者不當(dāng)之處,還請(qǐng)大家批評(píng)指正,一起學(xué)習(xí)交流!

          【墻裂推薦】

          專注于「開發(fā)者」綜合成長(zhǎng)的深度星球
          限時(shí)優(yōu)惠進(jìn)行中

          最近熱門內(nèi)容回顧? ?#技術(shù)人系列



          下方二維碼關(guān)注我

          互聯(lián)網(wǎng)草根,堅(jiān)持分享技術(shù)創(chuàng)業(yè)產(chǎn)品心得和總結(jié)~



          點(diǎn)擊“閱讀原文”,領(lǐng)取 2020 年最新免費(fèi)技術(shù)資料大全

          ↓↓↓?
          瀏覽 68
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美大黑逼 | 三级片精品播放 | 北条麻妃影音先锋 | 国产成人+综合亚洲+天堂 | 国产播放一区二区在线玩弄 |