国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring Boot 2.x (十八):郵件服務(wù)一文打盡

idealcn / 2268人閱讀

摘要:前景介紹在日常的工作中,我們經(jīng)常會(huì)用到郵件服務(wù),比如發(fā)送驗(yàn)證碼,找回密碼確認(rèn),注冊(cè)時(shí)郵件驗(yàn)證等,所以今天在這里進(jìn)行郵件服務(wù)的一些操作。

前景介紹

在日常的工作中,我們經(jīng)常會(huì)用到郵件服務(wù),比如發(fā)送驗(yàn)證碼,找回密碼確認(rèn),注冊(cè)時(shí)郵件驗(yàn)證等,所以今天在這里進(jìn)行郵件服務(wù)的一些操作。

大致思路

我們要做的其實(shí)就是把Java程序作為一個(gè)客戶端,然后通過(guò)配置SMTP協(xié)議去連接我們所使用的發(fā)送郵箱(from)對(duì)應(yīng)的SMTP服務(wù)器,然后通過(guò)SMTP協(xié)議,將郵件轉(zhuǎn)投到目標(biāo)郵箱(to)對(duì)應(yīng)的SMTP服務(wù)器,最后將該郵件分發(fā)到目標(biāo)郵箱

Spring Boot給我們集成了郵件的相關(guān)服務(wù),并給出了對(duì)應(yīng)的starter,這里我們來(lái)實(shí)戰(zhàn)學(xué)習(xí)一下郵件服務(wù)是怎么玩的。

引入POM

萬(wàn)年不變的第一步:引入所需要的starter依賴,這里我采用的是和我的Spring Boot對(duì)應(yīng)的版本2.1.4,其余版本的話應(yīng)該是相差不大,可以同樣作為借鑒


    org.springframework.boot
    spring-boot-starter-mail
    2.1.4.RELEASE
配置文件

這里由于國(guó)內(nèi)有幾大郵箱運(yùn)營(yíng)商,所以分為四種不同的情況來(lái)說(shuō)明

QQ郵箱

QQ郵箱是比較麻煩的一種,需要登錄到郵箱中找到對(duì)應(yīng)的配置,并驗(yàn)證密碼后開(kāi)啟STMP服務(wù)

點(diǎn)擊這里可以去獲取對(duì)應(yīng)的授權(quán)碼,后面的配置中我們會(huì)用到~

個(gè)人QQ郵箱的SMTP服務(wù)器的host是:smtp.qq.com

163郵箱

對(duì)應(yīng)的授權(quán)碼就是我們郵箱的密碼~

SMTP服務(wù)器的host是:smtp.163.com

騰訊企業(yè)郵箱

對(duì)應(yīng)的授權(quán)碼也是我們郵箱的密碼

企業(yè)的和個(gè)人的host略有不同:smtp.exmail.qq.com

阿里企業(yè)郵箱

對(duì)應(yīng)的授權(quán)碼也是我們郵箱的密碼

阿里的企業(yè)郵箱host是: smtp.mxhichina.com

得到對(duì)應(yīng)的信息之后,我們就可以去完善我們的配置信息了 ~

# 這里的host對(duì)應(yīng)是上面的幾大運(yùn)營(yíng)商的STMP服務(wù)器的host
spring.mail.host=smtp.163.com
spring.mail.username=****@163.com
# 這里的password對(duì)應(yīng)的就是上面的授權(quán)碼
spring.mail.password=*** 
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
編寫郵件的實(shí)體類
/**
 * 郵件實(shí)體類
 * @author vi
 * @since 2019/07/17
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Mail {

    /**
     * 郵件發(fā)送人
     */
    private String from;
  
    /**
     * 郵件接收人
     */
    private String to;
  
    /**
     * 郵件主題
     */
    private String subject;
  
    /**
     * 郵件內(nèi)容
     */
    private String content;
  
    /**
     * 郵件主題
     */
    private String type;

    /**
     * 發(fā)送郵件模板時(shí)的模板文件名
     */
    private String templateName;

    /**
     * 模板參數(shù)
     */
    private Map variables;

    /**
     * 附件地址
     */
    private String attachPath;

}
編寫發(fā)送郵件的方法

在這里,我將發(fā)送郵件分為了兩種情況:

發(fā)送普通郵件

   
     /**
       * 發(fā)送普通郵件
       * @param email 郵件對(duì)象
       */
      private static void sendSimpleMail(Mail email) {
          SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
  //        郵件發(fā)送人
          simpleMailMessage.setFrom(email.getFrom());
  //        郵件接收人
          simpleMailMessage.setTo(email.getTo());
  //        郵件主題
          simpleMailMessage.setSubject(email.getSubject());
  //        郵件內(nèi)容
          simpleMailMessage.setText(email.getContent());
  //        發(fā)送郵件
          javaMailSender.send(simpleMailMessage);
      }
      
     

發(fā)送MIME類型郵件(比如模板,附件,HTML都屬于該類型的郵件)

       /**
       * 發(fā)送MIME類型的郵件
       * @param email 郵件對(duì)象
       */
      private static void sendMimeMail(Mail email) {
  //        生成郵件字符串
          String content = email.getContent();
          if (email.getVariables() != null) {
              content = generate(email);
          }
  //        基于這個(gè)對(duì)象可以發(fā)送HTML,或者攜帶附件的二進(jìn)制郵件
          MimeMessage message= javaMailSender.createMimeMessage();
          try {
  //            構(gòu)建發(fā)送模板郵件的對(duì)象
              MimeMessageHelper helper = new MimeMessageHelper(message,true);
  //            設(shè)置發(fā)送郵箱
              helper.setFrom(email.getFrom());
  //            設(shè)置接收郵箱
              helper.setTo(email.getTo());
  //            設(shè)置郵件名(主題)
              helper.setSubject(email.getSubject());
  //            設(shè)置郵件內(nèi)容
              helper.setText(content,true);
  //            這里可以發(fā)送帶有附件的郵件,如果沒(méi)有附件可以省略,就不在多做描述
              if (!StringUtils.isNullOrEmpty(email.getAttachPath())) {
                  FileSystemResource file = new FileSystemResource(new File(email.getAttachPath()));
                  helper.addAttachment(file.getFilename(), file);
              }
  //            發(fā)送郵件
              javaMailSender.send(message);
          } catch (MessagingException e) {
  
          }
      }
  
  
     /**
       * 生成模板字符串
       * @param email 郵件對(duì)象
       * @return
       */
      private static String generate(Mail email) {
          Context context = new Context();
  //        設(shè)置模板參數(shù)
          context.setVariables(email.getVariables());
  //        加載模板后的內(nèi)容字符串
          return templateEngine.process(email.getTemplateName(), context);
      }

最后可以把這兩個(gè)方法統(tǒng)一接口,通過(guò)Mail類中的類型來(lái)判斷調(diào)用哪一個(gè)方法即可~

    /**
     * 對(duì)外開(kāi)放的統(tǒng)一發(fā)送郵件方法
     * @param mail
     */
    public static void sendEmail(Mail mail) {
        String  type = mail.getType();
        switch (type) {
            case "1":
                sendSimpleMail(mail);
            case "2":
                sendMimeMail(mail);
        }
    }
關(guān)于模板的一些補(bǔ)充

如果我們需要發(fā)送模板郵件的話,需要使用到模板引擎freemaker或thymeleaf,這里我拿thymeleaf來(lái)說(shuō)一下~

第一步,可以引入pom文件


         org.springframework.boot
         spring-boot-starter-thymeleaf

第二步,需要在配置文件中進(jìn)行配置

spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8

第三步,通過(guò)我們獲取到的模板參數(shù)對(duì)Mail類進(jìn)行set方法

mail.setVariables(email.getVariables());

第四步,我們需要在模板中去使用參數(shù)




    
    Insert title here


注意,這里的thymeleaf的用法,使用標(biāo)簽th:text來(lái)賦值,更多的模板用法,可以去

查閱thymeleaf的用法~

后記

郵件在這里就告一段落了,下篇預(yù)告:JVM系列(一):JVM簡(jiǎn)介,敬請(qǐng)期待,謝謝大家一直以來(lái)的支持!

公眾號(hào)

原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬(wàn)望告知!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76150.html

相關(guān)文章

  • SpringBoot 實(shí)戰(zhàn) (十八) | 整合 MongoDB

    摘要:前言如題,今天介紹下是如何整合的。存儲(chǔ)結(jié)構(gòu)如下男一個(gè)優(yōu)秀的廢人準(zhǔn)備工作創(chuàng)建一個(gè)名為的數(shù)據(jù)庫(kù),不會(huì)建的。層實(shí)現(xiàn)類添加學(xué)生信息根據(jù)刪除學(xué)生信息更新學(xué)生信息根據(jù)查詢學(xué)生信息查詢學(xué)生信息列表層測(cè)試結(jié)果測(cè)試已經(jīng)全部通過(guò),這里僅展示了保存操作。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人。如有問(wèn)題,請(qǐng)后臺(tái)留言,反正我也不會(huì)聽(tīng)。 showImg(https://segmentfault.com/img/remote...

    QLQ 評(píng)論0 收藏0
  • SpringBoot 實(shí)戰(zhàn) (十八) | 整合 MongoDB

    摘要:前言如題,今天介紹下是如何整合的。存儲(chǔ)結(jié)構(gòu)如下男一個(gè)優(yōu)秀的廢人準(zhǔn)備工作創(chuàng)建一個(gè)名為的數(shù)據(jù)庫(kù),不會(huì)建的。層實(shí)現(xiàn)類添加學(xué)生信息根據(jù)刪除學(xué)生信息更新學(xué)生信息根據(jù)查詢學(xué)生信息查詢學(xué)生信息列表層測(cè)試結(jié)果測(cè)試已經(jīng)全部通過(guò),這里僅展示了保存操作。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人。如有問(wèn)題,請(qǐng)后臺(tái)留言,反正我也不會(huì)聽(tīng)。 showImg(https://segmentfault.com/img/remote...

    jzzlee 評(píng)論0 收藏0
  • 一文掌握 Spring Boot Profiles

    摘要:需要注意的是必須要使用版本為以上才支持屬性。與格式文件不同,正對(duì)不同的,無(wú)法在一個(gè)文件設(shè)置,官方采用命名形式為格式來(lái)達(dá)成一樣的效果。采用方式添加的是屬于額外激活的,也就是說(shuō)覆蓋掉外部傳入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...

    Eidesen 評(píng)論0 收藏0
  • 第二十八章:SpringBoot使用AutoConfiguration自定義Starter

    摘要:代碼如下所示自定義業(yè)務(wù)實(shí)現(xiàn)恒宇少年碼云消息內(nèi)容是否顯示消息內(nèi)容,我們內(nèi)的代碼比較簡(jiǎn)單,根據(jù)屬性參數(shù)進(jìn)行返回格式化后的字符串。 在我們學(xué)習(xí)SpringBoot時(shí)都已經(jīng)了解到starter是SpringBoot的核心組成部分,SpringBoot為我們提供了盡可能完善的封裝,提供了一系列的自動(dòng)化配置的starter插件,我們?cè)谑褂胹pring-boot-starter-web時(shí)只需要在po...

    fasss 評(píng)論0 收藏0
  • Java相關(guān)

    摘要:本文是作者自己對(duì)中線程的狀態(tài)線程間協(xié)作相關(guān)使用的理解與總結(jié),不對(duì)之處,望指出,共勉。當(dāng)中的的數(shù)目而不是已占用的位置數(shù)大于集合番一文通版集合番一文通版垃圾回收機(jī)制講得很透徹,深入淺出。 一小時(shí)搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解) 是一個(gè)接口,程序可以通過(guò)...

    wangtdgoodluck 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<