整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Spring Boot 進階-SpringBoot整合JavaMailSender發送郵件

          用過Spring 開發者對JavaMailSender應該不陌生,它是Spring 提供郵件發送的接口。在Spring Boot中對這塊應用也進行了自動化的封裝。下面我們就來實際操作一下如何在Spring Boot項目中使用JavaMailSender進行郵件的發送操作。

          創建項目

          首先我們需要創建一個Maven項目并且引入Spring Boot的基本依賴,然后再引入郵件發送相關的場景啟動器,代碼如下。

          <?xml version="1.0" encoding="UTF-8"?>
          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
              <modelVersion>4.0.0</modelVersion>
              <parent>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-parent</artifactId>
                  <version>2.7.5</version>
                  <relativePath/> <!-- lookup parent from repository -->
              </parent>
              <groupId>com.example</groupId>
              <artifactId>demo</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <name>demo</name>
              <description>Demo project for Spring Boot</description>
              <properties>
                  <java.version>1.8</java.version>
              </properties>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.projectlombok</groupId>
                      <artifactId>lombok</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-mail</artifactId>
                  </dependency>
          
              </dependencies>
          
              <build>
                  <plugins>
                      <plugin>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-maven-plugin</artifactId>
                      </plugin>
                  </plugins>
              </build>
          
          </project>
          

          第二步,在引入了自動配置場景啟動類之后,剩余的配置與之前的其他配置一樣,需要在application.yml 或者是application.properties中進行配置。下面我們演示利用QQ郵箱郵件發送效果。

          spring:
            #郵箱基本配置
            mail:
              #配置smtp服務主機地址
              host: smtp.qq.com
              #發送者郵箱
              username: xxxxxxx@qq.com
              #配置密碼,注意不是真正的密碼,而是剛剛申請到的授權碼
              password: xxxxxxxxxxx
              #端口號465或587
              port: 587
              #默認的郵件編碼為UTF-8
              default-encoding: UTF-8
              #其他參數
              properties:
               mail:
                  #配置SSL 加密工廠
                smtp:
                  ssl:
                    #本地測試,先放開ssl
                    enable: false
                    required: false
                  #開啟debug模式,這樣郵件發送過程的日志會在控制臺打印出來,方便排查錯誤
                debug: true
          

          指定郵箱類型如下圖所示

          創建郵件發送實體類

          這里我們創建一個一般郵件格式都有的實體類,包括收件人、郵件主題、郵件內容、以及附件路徑等內容。

          @Data
          public class MailRequest implements Serializable {
              /**
               * 接收人
               */
              private String sendTo;
          
              /**
               *  郵件主題
               */
              private String subject;
          
              /**
               *  郵件內容
               */
              private String text;
          
              /**
               *  附件路徑
               */
              private String filePath;
          }
          
          

          定義一個郵件服務

          完成郵件實體配置之后,我們需要定義一個郵件服務。

          public interface SendMailService {
          
              /**
               * 簡單文本郵件
               *
               * @param mailRequest
               * @return
               */
              void sendSimpleMail(MailRequest mailRequest);
          
          
              /**
               * Html格式郵件,可帶附件
               *
               * @param mailRequest
               * @return
               */
              void sendHtmlMail(MailRequest mailRequest);
          }
          

          郵件服務實現

          @Service
          public class SendMailServiceImpl implements SendMailService {
          
              //注入郵件工具類
              @Autowired
              private JavaMailSender javaMailSender;
          
              @Value("${spring.mail.username}")
              private String sendMailer;
          
              private static final Logger logger = LoggerFactory.getLogger(SendMailServiceImpl.class);
          
              public void checkMail(MailRequest mailRequest) {
                  Assert.notNull(mailRequest,"郵件請求不能為空");
                  Assert.notNull(mailRequest.getSendTo(), "郵件收件人不能為空");
                  Assert.notNull(mailRequest.getSubject(), "郵件主題不能為空");
                  Assert.notNull(mailRequest.getText(), "郵件收件人不能為空");
              }
          
              @Override
              public void sendSimpleMail(MailRequest mailRequest) {
                  SimpleMailMessage message = new SimpleMailMessage();
                  checkMail(mailRequest);
                  //郵件發件人
                  message.setFrom(sendMailer);
                  //郵件收件人 1或多個
                  message.setTo(mailRequest.getSendTo().split(","));
                  //郵件主題
                  message.setSubject(mailRequest.getSubject());
                  //郵件內容
                  message.setText(mailRequest.getText());
                  //郵件發送時間
                  message.setSentDate(new Date());
          
                  javaMailSender.send(message);
                  logger.info("發送郵件成功:{}->{}",sendMailer,mailRequest.getSendTo());
              }
          
          
          
              @Override
              public void sendHtmlMail(MailRequest mailRequest) {
                  MimeMessage message = javaMailSender.createMimeMessage();
                  checkMail(mailRequest);
                  try {
                      MimeMessageHelper helper = new MimeMessageHelper(message,true);
                      //郵件發件人
                      helper.setFrom(sendMailer);
                      //郵件收件人 1或多個
                      helper.setTo(mailRequest.getSendTo().split(","));
                      //郵件主題
                      helper.setSubject(mailRequest.getSubject());
                      //郵件內容
                      helper.setText(mailRequest.getText(),true);
                      //郵件發送時間
                      helper.setSentDate(new Date());
          
                      String filePath = mailRequest.getFilePath();
                      if (StringUtils.hasText(filePath)) {
                          FileSystemResource file = new FileSystemResource(new File(filePath));
                          String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
                          helper.addAttachment(fileName,file);
                      }
                      javaMailSender.send(message);
                      logger.info("發送郵件成功:{}->{}",sendMailer,mailRequest.getSendTo());
                  } catch (MessagingException e) {
                      logger.error("發送郵件時發生異常!",e);
                  }
              }
          }
          
          

          定義Controller對郵件發送服務進行調用

          @RestController
          @RequestMapping("/sendmail")
          public class SendMailController {
              @Autowired
              private SendMailService sendMailService;
          
              @PostMapping("/simple")
              public void SendSimpleMessage(@RequestBody MailRequest mailRequest) {
                  sendMailService.sendSimpleMail(mailRequest);
              }
          
              @PostMapping("/html")
              public void SendHtmlMessage(@RequestBody MailRequest mailRequest) { 
                sendMailService.sendHtmlMail(mailRequest);
              }
          }
          

          總結

          完成配置之后,調用Controller接口就可以實現對指定的郵箱發送消息了。

          何在Spring boot中配置和發送郵件呢,今天我們就以QQ郵件為例,給大家說一下在spring Boot中發送,包括簡單郵件,html格式郵件,包含附件的郵件,和發送圖片內容的郵件

          spring boot配置郵件

          1.配置郵件

          1.1配置maven依賴

          1.2在application.properties中配置發送郵件的用戶名 密碼等信息

          1.3配置QQ郵箱的IMAP/SMTP信息,來配置spring.mail.password的信息

          1.3.1登錄QQ郵箱,打開設置

          1.3.2 點擊設置后,點擊賬號,找到以下模塊,點擊開啟,就可以生成授權碼

          1.4編寫Service

          package com.team.base.service;

          import lombok.extern.java.Log;

          import lombok.extern.log4j.Log4j;

          import lombok.extern.slf4j.Slf4j;

          import org.springframework.beans.factory.annotation.Autowired;

          import org.springframework.beans.factory.annotation.Value;

          import org.springframework.core.io.FileSystemResource;

          import org.springframework.mail.SimpleMailMessage;

          import org.springframework.mail.javamail.JavaMailSender;

          import org.springframework.mail.javamail.MimeMessageHelper;

          import org.springframework.stereotype.Service;

          import javax.mail.MessagingException;

          import javax.mail.internet.MimeMessage;

          import java.io.File;

          /**

          * @com.team.base.service

          * @fenghaiju

          * @2018/3/19-16:46

          * @springBootBase

          **/

          @Service

          @Slf4j

          public class MailService {

          @Autowired

          private JavaMailSender sender;

          @Value("${spring.mail.username}")

          private String from;

          /**

          * 發送純文本的簡單郵件

          * @param to

          * @param subject

          * @param content

          */

          public void sendSimpleMail(String to, String subject, String content){

          SimpleMailMessage message = new SimpleMailMessage();

          message.setFrom(from);

          message.setTo(to);

          message.setSubject(subject);

          message.setText(content);

          try {

          sender.send(message);

          log.info("簡單郵件已經發送。");

          } catch (Exception e) {

          log.error("發送簡單郵件時發生異常!",e);

          }

          }

          /**

          * 發送html格式的郵件

          * @param to

          * @param subject

          * @param content

          */

          public void sendHtmlMail(String to, String subject, String content){

          MimeMessage message = sender.createMimeMessage();

          try {

          //true表示需要創建一個multipart message

          MimeMessageHelper helper = new MimeMessageHelper(message, true);

          helper.setFrom(from);

          helper.setTo(to);

          helper.setSubject(subject);

          helper.setText(content, true);

          sender.send(message);

          log.info("html郵件已經發送。");

          } catch (MessagingException e) {

          log.error("發送html郵件時發生異常!",e);

          }

          }

          /**

          * 發送帶附件的郵件

          * @param to

          * @param subject

          * @param content

          * @param filePath

          */

          public void sendAttachmentsMail(String to, String subject, String content, String filePath){

          MimeMessage message = sender.createMimeMessage();

          try {

          //true表示需要創建一個multipart message

          MimeMessageHelper helper = new MimeMessageHelper(message, true);

          helper.setFrom(from);

          helper.setTo(to);

          helper.setSubject(subject);

          helper.setText(content, true);

          FileSystemResource file = new FileSystemResource(new File(filePath));

          String fileName = filePath.substring(filePath.lastIndexOf(File.separator));

          helper.addAttachment(fileName, file);

          sender.send(message);

          log.info("帶附件的郵件已經發送。");

          } catch (MessagingException e) {

          log.error("發送帶附件的郵件時發生異常!",e);

          }

          }

          /**

          * 發送嵌入靜態資源(一般是圖片)的郵件

          * @param to

          * @param subject

          * @param content 郵件內容,需要包括一個靜態資源的id,比如:<img src=\"cid:rscId01\" >

          * @param rscPath 靜態資源路徑和文件名

          * @param rscId 靜態資源id

          */

          public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){

          MimeMessage message = sender.createMimeMessage();

          try {

          //true表示需要創建一個multipart message

          MimeMessageHelper helper = new MimeMessageHelper(message, true);

          helper.setFrom(from);

          helper.setTo(to);

          helper.setSubject(subject);

          helper.setText(content, true);

          FileSystemResource res = new FileSystemResource(new File(rscPath));

          helper.addInline(rscId, res);

          sender.send(message);

          log.info("嵌入靜態資源的郵件已經發送。");

          } catch (MessagingException e) {

          log.error("發送嵌入靜態資源的郵件時發生異常!",e);

          }

          }

          }

          1.5編寫Controller

          package com.team.base.controller;
          import com.team.base.service.MailService;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.http.ResponseEntity;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;
          /**
           * @com.team.base.controller
           * @fenghaiju
           * @2018/3/19-16:51
           * @springBootBase
           **/
          @RestController
          @RequestMapping("/mail")
          public class MailController {
           @Autowired
           private MailService mailService;
           /**
           * 簡單發送
           * @return
           */
           @RequestMapping("/sendSimpleMail")
           public ResponseEntity<?> sendSimpleMail(){
           mailService.sendSimpleMail("fenghaiju@sohu.com", "簡單郵件", "簡單的郵件測試");
           return ResponseEntity.ok(true);
           }
           /**
           * 發送html內容
           * @return
           */
           @RequestMapping("/sendHtmlMail")
           public ResponseEntity<?> sendHtmlMail(){
           mailService.sendHtmlMail("fenghaiju@sohu.com", "html郵件", "<html><body><h3>你好, 這是一封模板郵件!</h3></body></html>");
           return ResponseEntity.ok(true);
           }
           /**
           * 發送附件
           * @return
           */
           @RequestMapping("/sendAttachmentsMail")
           public ResponseEntity<?> sendAttachmentsMail(){
           mailService.sendAttachmentsMail("fenghaiju@sohu.com", "附件郵件", "測試郵件內容","D:\\article\\結尾.txt");
           return ResponseEntity.ok(true);
           }
           /**
           * 發送圖片
           * @return
           */
           @RequestMapping("/sendInlineResourceMail")
           public ResponseEntity<?> sendInlineResourceMail(){
           mailService.sendInlineResourceMail("fenghaiju@sohu.com", "發送圖片", "<img src=\"cid:rscId01\" >","D:\\article\\架構師.png","rscId01");
           return ResponseEntity.ok(true);
           }
          }
           

          1.6測試郵件

          1.6.1測試簡單郵件

          1.6.2 測試Html格式郵件

          1.6.3 測試附件郵件

          1.6.4 測試圖片郵件

          2.總結,大家在配置郵件的時候,注意配置文件的空格,否則會出現異常情況

          企業郵箱中創建個性化的電子郵件模板,可以在創作郵件時節省時間,快速的完成郵件;并且根據設置好的格式,也不會丟下關鍵的信息內容,那么這些具體是怎樣實現的呢?下面介紹具體實現的內容。


          主站蜘蛛池模板: 亚洲av不卡一区二区三区| 精品免费国产一区二区三区| 国产亚洲无线码一区二区| 国产精品合集一区二区三区 | 无码人妻一区二区三区精品视频| 精品亚洲A∨无码一区二区三区 | 一区二区国产在线观看| 亚洲一区二区影视| 国产精品揄拍一区二区| 无码人妻精品一区二区三| 久久亚洲色一区二区三区| 日韩少妇无码一区二区三区| 日韩免费无码一区二区视频| 天堂一区二区三区在线观看| 亚洲AV无码一区二区三区网址| 2020天堂中文字幕一区在线观| 无码av免费一区二区三区试看| 亚洲一区二区三区夜色 | 日本片免费观看一区二区| 人妻久久久一区二区三区| 一区二区三区日韩精品| 乱精品一区字幕二区| 国产精品自拍一区| 天海翼一区二区三区高清视频| 无码一区二区三区在线| 国产一区二区三区在线观看影院 | 国产一区美女视频| 国产一区二区三区日韩精品| 亚洲高清偷拍一区二区三区| 国产成人精品一区在线| 夜夜添无码试看一区二区三区| 亚洲国产精品一区二区久久hs | 久久人做人爽一区二区三区| 97se色综合一区二区二区| 亚洲综合一区国产精品| 无码日韩AV一区二区三区| 国产成人精品一区在线| 香蕉久久av一区二区三区| 国产成人亚洲综合一区| 国产一区二区三区免费看| 亚洲线精品一区二区三区影音先锋 |