中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

Springboot如何搭建郵件服務(wù)

這篇文章主要介紹了Spring boot如何搭建郵件服務(wù),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)公司是專業(yè)的華亭網(wǎng)站建設(shè)公司,華亭接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行華亭網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

前言:

發(fā)送郵件,肯定是每個(gè)公司都會(huì)有的基本業(yè)務(wù)。很多公司都會(huì)選擇把發(fā)送郵件作為一個(gè)基礎(chǔ)服務(wù),對(duì)外提供接口。直接調(diào)用就可發(fā)郵件了。但是我們都知道發(fā)送郵件耗時(shí)都比較長(zhǎng)。那么今天就介紹下使用Spring boot+eventbus來打造一個(gè)簡(jiǎn)單郵件服務(wù)

規(guī)劃接口列表

發(fā)送郵件的類型準(zhǔn)備的有三種

  • 發(fā)送普通郵件

  • 發(fā)送html郵件

  • 發(fā)送圖文郵件

還有一個(gè)細(xì)節(jié),如果我們同步的取發(fā)送郵件會(huì)有兩個(gè)問題。

  • 接口響應(yīng)時(shí)間比較長(zhǎng)

  • 遇到并發(fā)的情況,容易導(dǎo)致服務(wù)器壓力過大或者郵箱服務(wù)封ip

所以我們準(zhǔn)備使用隊(duì)列來執(zhí)行發(fā)送郵件的操作。可以解決這個(gè)問題。隊(duì)列我選用的是Google的eventbus。是一款很輕量的隊(duì)列。直接走的內(nèi)存

準(zhǔn)備工作

首先要在pom.xml中引入 需要使用的包

 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>
 <dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>23.0</version>
  </dependency>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
  </dependency>
  • spring-boot-starter-mail :spring-boot提供的發(fā)郵件的maven庫(kù)

  • guava:google提供的開源庫(kù)。里面包含來很多工具

  • lombok:可以幫你省去編寫實(shí)體類的工具

引入之后,我們還需要配置發(fā)送郵件所需要的必要配置

在application.properties中配置郵箱

spring.mail.host=smtp.mail.me.com //郵箱發(fā)送服務(wù)器
spring.mail.port=587//服務(wù)器端口
[email protected]//發(fā)件人郵箱
spring.mail.password=password//客戶端專用密碼
//如果和我一樣使用的icloud郵箱 還需要下列兩個(gè)配置,別的有的郵箱不需要
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

做到這里其實(shí)就已經(jīng)完成了,發(fā)郵件所需要的配置了。但是我們是要用隊(duì)列來發(fā)送,所以還需要配置下隊(duì)列

@Configuration
public class AsyncEventBusConfig {
 //實(shí)例化bean,采用單例形式注入容器
 @Bean
 @Scope("singleton")
 public AsyncEventBus asyncEventBus(){
  //創(chuàng)建線程池對(duì)象
  final ThreadPoolExecutor executor=executor();
  return new AsyncEventBus(executor);
 }
 //創(chuàng)建線程池方法
 private ThreadPoolExecutor executor(){
  return new
    ThreadPoolExecutor(2,
    2,0L,
    TimeUnit.MICROSECONDS,
    new LinkedBlockingQueue<>());
 }
}

封裝EmailService

準(zhǔn)備好了之后,就可以直接來封裝發(fā)送郵件的業(yè)務(wù)了。之前有提到我們需要三個(gè)接口,同樣的,我們也需要三個(gè)service方法

@Service
public class EmailService {

 @Autowired
 private JavaMailSender javaMailSender;

 /**
  * 發(fā)件人。這里發(fā)件人一般是同使用的發(fā)件郵箱一致
  */
 @Value("${spring.mail.username}")
 private String from;


 /**
  * 發(fā)送文本郵件
  * @param to 收件人郵箱地址
  * @param subject 主題
  * @param content 內(nèi)容
  */
 public void sendTextMail(String to,
        String subject,
        String content) {
  SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
  simpleMailMessage.setTo(to);
  simpleMailMessage.setSubject(subject);
  simpleMailMessage.setText(content);
  simpleMailMessage.setFrom(from);
  javaMailSender.send(simpleMailMessage);
 }


 /**
  * 發(fā)送html內(nèi)容的郵件
  * @param to 收件人
  * @param htmlContent html內(nèi)容
  * @param subject 主題
  * @throws MessagingException
  */
 public void sendHtmlMail(String to,
        String htmlContent,
        String subject) throws MessagingException {
  MimeMessage message = javaMailSender.createMimeMessage();
  MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
  messageHelper.setTo(to);
  messageHelper.setSubject(subject);
  messageHelper.setFrom(from);
  messageHelper.setText(htmlContent, true);
  javaMailSender.send(message);
 }

 /**
  * 發(fā)送圖文郵件
  * @param to 收件人
  * @param imgContent 圖文內(nèi)容
  * @param subject 主題
  * @param rscId 資源id
  * @param imgPath 資源路徑
  * @throws MessagingException
  */
 public void sendImgMail(String to,
       String imgContent,
       String subject,
       String rscId,
       String imgPath) throws MessagingException {
  MimeMessage message = javaMailSender.createMimeMessage();
  MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
  messageHelper.setTo(to);
  messageHelper.setSubject(subject);
  messageHelper.setFrom(from);
  messageHelper.setText(imgContent, true);
  messageHelper.addInline(rscId, new File(imgPath));
  javaMailSender.send(message);
 }
}

隊(duì)列監(jiān)聽

既然封裝好了方法,那么就需要調(diào)用。調(diào)用的方式,其實(shí)就是將接口傳來的數(shù)據(jù)傳到隊(duì)列里。隊(duì)列的消費(fèi)者接收到了消息就將消息拿來調(diào)用發(fā)送郵件的方法

我們首先創(chuàng)建一個(gè)消費(fèi)類,用來接受消息,處理消息。

@Service
public class EventBusListener {

 /**
  * 引入bean
  */
 @Autowired
 private AsyncEventBus asyncEventBus;

 @Autowired
 private EmailService emailService;

 /**
  * 注冊(cè)服務(wù)類
  */
 @PostConstruct
 public void init(){
  asyncEventBus.register(this);
 }

 /**
  * 線程安全,消費(fèi) 文本消息
  * @param textEmailDTO
  */
 @AllowConcurrentEvents
 @Subscribe
 public void sendTextMail(TextEmailDTO textEmailDTO){
  emailService.sendTextMail(
    textEmailDTO.getTo(),
    textEmailDTO.getSubject(),
    textEmailDTO.getContent()
  );
 }

 /**
  * 線程安全 消費(fèi) html消息
  * @param htmlEmailDTO
  */
 @AllowConcurrentEvents
 @Subscribe
 public void sendHtmlMail(HtmlEmailDTO htmlEmailDTO){
  try {
   emailService.sendHtmlMail(
     htmlEmailDTO.getTo(),
     htmlEmailDTO.getHtmlContent(),
     htmlEmailDTO.getSubject()
   );
  } catch (MessagingException e) {
   // nothing to do
  }
 }

 /**
  * 線程安全 消費(fèi) 圖文消息
  * @param imgEmailDTO
  */
 @AllowConcurrentEvents
 @Subscribe
 public void sendImgMail(ImgEmailDTO imgEmailDTO){
  try {
   emailService.sendImgMail(
     imgEmailDTO.getTo(),
     imgEmailDTO.getImgContent(),
     imgEmailDTO.getSubject(),
     imgEmailDTO.getRscId(),
     imgEmailDTO.getImgPath()
   );
  } catch (MessagingException e) {
   // nothing to do
  }
 }
}

其實(shí)eventbus拋消息都是使用的post方法來拋消息。走到不同的方法里面是利用了類的多態(tài),拋入不同的實(shí)體類就可以進(jìn)行區(qū)分了。走進(jìn)了不同的方法,就調(diào)用相應(yīng)Service方法。

控制器與測(cè)試

控制器部分,沒什么好說的,我就貼出圖文的代碼。其余代碼可以在我的github上面看

先看眼實(shí)體類

@Data
public class ImgEmailDTO implements Serializable {
 public ImgEmailDTO() {
 }

 /**
  * 圖片路徑
  */
 private String imgPath;

 /**
  * 資源id
  */
 private String rscId;

 /**
  * 主題
  */
 private String subject;

 /**
  * 圖片正文(同樣可以使用html)
  */
 private String imgContent;

 /**
  * 收件人
  */
 private String to;
}
 /**
  * 發(fā)送圖文郵件
  * @param request
  * @return
  */
 @RequestMapping(value = "/sendImgMail", method = RequestMethod.POST)
 public Result<Integer> sendImgMail(@RequestBody Request<ImgEmailDTO> request) {
  Result<Integer> result = Result.create();
  ImgEmailDTO imgEmailDTO=request.getData();
  StringBuilder sb=new StringBuilder();
  sb.append(imgEmailDTO.getImgContent());
  //cid:資源id。在spring中會(huì)自動(dòng)綁定
  sb.append("<img src=\'cid:").append(imgEmailDTO.getRscId()).append("\'></img>");
  imgEmailDTO.setImgContent(sb.toString());
  asyncEventBus.post(imgEmailDTO);
  return result.success(1);
 }

圖文要稍微特殊一點(diǎn),需要拼接下正文內(nèi)容。然后將實(shí)體類中的content替換。最后將實(shí)體類拋入隊(duì)列。直接返回接口請(qǐng)求。隊(duì)列那邊就會(huì)排著隊(duì)搞定所有的郵件

下面來做個(gè)測(cè)試

Spring boot如何搭建郵件服務(wù)

請(qǐng)求很迅速的返回了結(jié)果

然后去郵箱中查看結(jié)果

Spring boot如何搭建郵件服務(wù)

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Spring boot如何搭建郵件服務(wù)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

分享名稱:Springboot如何搭建郵件服務(wù)
當(dāng)前URL:http://www.2m8n56k.cn/article4/ijccoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)外貿(mào)建站品牌網(wǎng)站制作響應(yīng)式網(wǎng)站搜索引擎優(yōu)化標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
主站蜘蛛池模板: 久久综合精品不卡一区二区 | 久久国产精品99久久久久久牛牛 | 1024国产欧美日韩精品 | 日本国产最新一区二区三区 | 国产成人精品无缓存在线播放 | 欧美精品专区免费观看 | 成人做爰全过程免费看网站 | 精品中文字幕不卡在线视频 | 国产亚洲午夜精品a一区二区 | 亚洲人欧洲日韩 | 国产91精选在线观看网站 | 欧美一级艳片视频免费观看 | 国产成人丝袜网站在线观看 | 美女国产福利视频 | 免费一级a毛片在线播 | 五月色婷婷综合开心网4438 | 欧美成人精品第一区 | 美国三级网 | 国产一区在线观看免费 | 在线视频精品视频 | 久久精品国产精品青草 | www.日本在线视频 | 毛片网站视频 | 俄罗斯特级毛片 | 欧美一级毛片免费观看 | 国产精品99久久久久久小说 | 国产一进一出视频网站 | 九九精品视频在线播放 | 亚洲线精品久久一区二区三区 | 91成人精品 | 国产高清一级毛片在线不卡 | 成人性视频免费网站 | 欧美a一级片 | 久久国内精品 | 国产精品yjizz视频网一二区 | 久久一本精品久久精品66 | 欧美中文字幕在线视频 | 亚洲偷自拍另类图片二区 | 久草草视频在线观看免费高清 | 中文字幕免费 | 日本一二线不卡在线观看 |