日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flask-mail异步发送邮件_spring Boot手把手教学(6):发送邮件

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask-mail异步发送邮件_spring Boot手把手教学(6):发送邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 1、前言
  • 2、安裝依賴
  • 3、添加配置信息
  • 4、代碼實現
  • 5、功能擴展
    • 5.1、發送HTML格式郵件
    • 5.2、發送帶附件的郵件
    • 5.3、使用`thymeleaf`模板發送郵件
  • 6、完整代碼

1、前言

發送郵件應該是常用功能之一,無論是注冊激活用戶、賬戶會員到期提醒,還是業務營銷信息提示,系統都需要自動向用戶發郵件;

那么Spring Boot怎么發郵件呢?

Spring 推出了 JavaMailSender 簡化了郵件發送的過程,現在 Spring Boot又對此進行了封裝。

那就是 spring-boot-starter-mail 這個依賴包。

2、安裝依賴

<!-- 郵件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>

3、添加配置信息

? src/main/resources/application.yml
?server:port: 9002spring:mail:host: smtp.qq.comusername: 149807666@qq.compassword: sputxytreefvxrgoihefresources:static-locations: classpath:/resources/, classpath:/static/ ,classpath:/templates/mail:fromMail:addr: alex@qq.com # 發郵件者# 日志級別 logging:level:root: warncom.scaffold.test.mapper: tracecom.scaffold.test.task: trace

我們這里以QQ郵箱為例,smtp.qq.com 是郵箱服務器地址;

username 就是你的郵箱地址,password 就是你的郵箱密碼;

mai.fromMail.addr 就是發郵件人的郵箱地址。

4、代碼實現

? Entity---郵件信息實體類:com.scaffold.test.entity.Mail
?package com.scaffold.test.entity;import lombok.Data;@Data public class Mail {// 發送給誰private String to;// 發送主題private String subject;// 發送內容private String content;// 附件地址private String filePath; }? Service---郵件服務接口:com.scaffold.test.service.MailService
?package com.scaffold.test.service;import com.scaffold.test.entity.Mail;public interface MailService {// 發送郵件public void sendMail(Mail mail); }? ServiceImpl---郵件服務接口實現類:com.scaffold.test.service.impl.MailServiceImpl
?package com.scaffold.test.service.impl;import com.scaffold.test.entity.Mail; import com.scaffold.test.service.MailService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.internet.MimeMessage; import java.io.File;@Service public class MailServiceImpl implements MailService {Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate JavaMailSender mailSender;@Value("${mail.fromMail.addr}")private String mailFrom;// 只發送文本@Overridepublic void sendMail(Mail mail) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(mailFrom);message.setTo(mail.getTo());message.setSubject(mail.getSubject());message.setText(mail.getContent());mailSender.send(message);logger.info("發送完畢");}} ? Controller---發郵件控制器:com.scaffold.test.controller.MailController
?package com.scaffold.test.controller;import com.scaffold.test.base.Result; import com.scaffold.test.base.ResultGenerator; import com.scaffold.test.entity.Mail; import com.scaffold.test.service.MailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context;import javax.mail.MessagingException;@RestController @RequestMapping("/mail") public class MailController {@Autowiredprivate MailService mailService;// 發送不帶格式的文本@Async@GetMapping("post")public Result postMail() {Mail mail = new Mail();mail.setTo("******@qq.com");mail.setSubject("automatic");mail.setContent("自動郵件發布");mailService.sendMail(mail);return ResultGenerator.getSuccessResult().setMessage("發送成功");} }

需要注意的一點就是:我們這里的代碼都是用了@Async注解,代表這是異步操作,所以返回的Result也會無效了,無效代碼我就不再注釋了,原來寫的時候寫的是同步執行。

其實這里,用異步是對的,業務代碼中,郵件發送不是業務關注的重點,可以延遲或者失敗,所以沒必要占用主進程;

結果如圖:

到此為止,簡單的發送郵件功能完成了,如果要自動發布,就要加入定時任務了,可以參考上一篇文章:

spring Boot手把手教學(5): 定時任務

這里就不再贅述;

5、功能擴展

5.1、發送HTML格式郵件

發送純文本,有時候不是那么滿足我們的業務要求,我們需要發送帶HTML格式的郵件如下:

? 在 MailService 中添加 sendHtmlMail 方法:com.scaffold.test.service.MailService
?package com.scaffold.test.service;import com.scaffold.test.entity.Mail;import javax.mail.MessagingException;public interface MailService {// 發送郵件public void sendMail(Mail mail);// 發送Html郵件public void sendHtmlMail(Mail mail) throws MessagingException;} ? 對應實現方法:com.scaffold.test.service.impl.MailServiceImpl
?// 發送Html郵件@Overridepublic void sendHtmlMail(Mail mail) {MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);message.setFrom(mailFrom);helper.setTo(mail.getTo());helper.setSubject(mail.getSubject());helper.setText(mail.getContent(), true);mailSender.send(message);logger.info("發送Html郵件成功");} catch (Exception e) {e.printStackTrace();logger.error("發送Html郵件失敗");}} ? 控制器調用:com.scaffold.test.controller.MailController
?// 發送Html郵件@Async@GetMapping("postHtml")public Result postHtmlMail() throws MessagingException {String content = "<html>n" +"<body>n" +"<h3>hello! test Html test!</h3>n" +"</body>n" +"</html>";Mail mail = new Mail();mail.setTo("******@qq.com");mail.setSubject("Html格式郵件");mail.setContent(content);mailService.sendHtmlMail(mail);return ResultGenerator.getSuccessResult().setMessage("發送成功");}

結果如圖:

5.2、發送帶附件的郵件

有時候我們需要發送帶附件的郵件;

? 在 MailService 中添加 sendAttachmentsMail 方法:com.scaffold.test.service.MailService
?package com.scaffold.test.service;import com.scaffold.test.entity.Mail;import javax.mail.MessagingException;public interface MailService {// 發送郵件public void sendMail(Mail mail);// 發送Html郵件public void sendHtmlMail(Mail mail) throws MessagingException;// 發送帶附件的郵件public void sendAttachmentsMail(Mail mail) throws MessagingException; }? 對應實現類方法:com.scaffold.test.service.impl.MailServiceImpl
?// 發送帶附件的郵件@Overridepublic void sendAttachmentsMail(Mail mail) {MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);message.setFrom(mailFrom);helper.setTo(mail.getTo());helper.setSubject(mail.getSubject());helper.setText(mail.getContent(), true);// 附件FileSystemResource resourse = new FileSystemResource(new File(mail.getFilePath()));// 添加附件helper.addAttachment("test.png", resourse);mailSender.send(message);logger.info("發送郵件成功");} catch (Exception e) {e.printStackTrace();logger.error("發送郵件失敗");}} ? 控制器調用:com.scaffold.test.controller.MailController
?// 發送帶附件的郵件@Async@GetMapping("postAttachment")public Result postAttachmentsMail() throws MessagingException {Mail mail = new Mail();mail.setTo("***@qq.com");mail.setSubject("附件");mail.setContent("有附件,趕緊看下");mail.setFilePath("E:test.png");mailService.sendAttachmentsMail(mail);return ResultGenerator.getSuccessResult().setMessage("發送成功");}

效果如圖:

5.3、使用thymeleaf模板發送郵件

另外,為了格式的優美,有時候我們需要使用模板發送郵件;

這里我們使用thymeleaf :

? 安裝依賴
?<!-- thymeleaf 模板 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency><dependency><groupId>ognl</groupId><artifactId>ognl</artifactId><version>3.2.14</version> </dpendency> ? 控制器調用:com.scaffold.test.controller.MailController
? @Autowiredprivate SpringTemplateEngine templateEngine;// 發送 Html 模板郵件@Async@GetMapping("postTemplate")public void postTemplateMail() throws MessagingException {Context context = new Context();Map<String, Object> emailParam = new HashMap<>();emailParam.put("name", "產品終端更換名字");emailParam.put("content", "牛牛終端");emailParam.put("person", "Alex Wong");context.setVariable("emailParam", emailParam);String emailTemplate = templateEngine.process("emailTemplate", context);Mail mail = new Mail();mail.setTo("*****@qq.com");mail.setSubject("模板郵件");mail.setContent(emailTemplate);mailService.sendHtmlMail(mail);} ? 模板文件:src/main/resources/templates/emailTemplate.html
?<!DOCTYPE html> <html lang="en"xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>mail</title> </head> <body><table align="center" cellpadding="0" cellspacing="0" width="600px"><tr><td><table align="center" border="0" cellpadding="0" cellspacing="0" width="600"style="border-collapse: collapse;"><tr><td align="center" style="padding: 40px 0 30px 0;"><img src='你的圖片地址' style='width:183px height:47.50px'></td></tr><tr><td bgcolor="#ffffff" style="padding: 0px 30px 20px 30px"><h3>產品名稱變更通知</h3><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td colspan="2" style="padding: 0 0 3px 0">通知事項:<span th:text="${emailParam.name}"></span></td></tr><tr><td style="padding: 12px 0 3px 0">產品名稱:<span th:text="${emailParam.content}"></span></td></tr><tr><td style="padding: 12px 0 3px">審批人:<span th:text="${emailParam.person}"></span></td></tr></table></td></tr></table></td></tr></table> </body> </html>

效果如圖:

6、完整代碼

? Entity---郵件信息實體類:com.scaffold.test.entity.Mail
?package com.scaffold.test.entity;import lombok.Data;@Data public class Mail {// 發送給誰private String to;// 發送主題private String subject;// 發送內容private String content;// 附件地址private String filePath; }? Service---郵件服務接口:com.scaffold.test.service.MailService
?package com.scaffold.test.service;import com.scaffold.test.entity.Mail;import javax.mail.MessagingException;public interface MailService {// 發送郵件public void sendMail(Mail mail);// 發送Html郵件public void sendHtmlMail(Mail mail) throws MessagingException;// 發送帶附件的郵件public void sendAttachmentsMail(Mail mail) throws MessagingException; } ? ServiceImpl---郵件服務接口實現類:com.scaffold.test.service.impl.MailServiceImpl
?package com.scaffold.test.service.impl;import com.scaffold.test.entity.Mail; import com.scaffold.test.service.MailService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.internet.MimeMessage; import java.io.File;@Service public class MailServiceImpl implements MailService {Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate JavaMailSender mailSender;@Value("${mail.fromMail.addr}")private String mailFrom;// 只發送文本@Overridepublic void sendMail(Mail mail) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(mailFrom);message.setTo(mail.getTo());message.setSubject(mail.getSubject());message.setText(mail.getContent());mailSender.send(message);logger.info("發送完畢");}// 發送Html郵件@Overridepublic void sendHtmlMail(Mail mail) {MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);message.setFrom(mailFrom);helper.setTo(mail.getTo());helper.setSubject(mail.getSubject());helper.setText(mail.getContent(), true);mailSender.send(message);logger.info("發送Html郵件成功");} catch (Exception e) {e.printStackTrace();logger.error("發送Html郵件失敗");}}// 發送帶附件的郵件@Overridepublic void sendAttachmentsMail(Mail mail) {MimeMessage message = mailSender.createMimeMessage();try {MimeMessageHelper helper = new MimeMessageHelper(message, true);message.setFrom(mailFrom);helper.setTo(mail.getTo());helper.setSubject(mail.getSubject());helper.setText(mail.getContent(), true);// 附件FileSystemResource resourse = new FileSystemResource(new File(mail.getFilePath()));// 添加附件helper.addAttachment("test.png", resourse);mailSender.send(message);logger.info("發送郵件成功");} catch (Exception e) {e.printStackTrace();logger.error("發送郵件失敗");}} } ? Controller---發郵件控制器:com.scaffold.test.controller.MailController
?package com.scaffold.test.controller;import com.scaffold.test.entity.Mail; import com.scaffold.test.service.MailService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.thymeleaf.context.Context; import org.thymeleaf.spring5.SpringTemplateEngine;import javax.mail.MessagingException; import java.util.HashMap; import java.util.Map;@RestController @RequestMapping("/mail") public class MailController {@Autowiredprivate MailService mailService;@Autowiredprivate SpringTemplateEngine templateEngine;// 發送不帶格式的文本@Async@GetMapping("post")public void postMail() {Mail mail = new Mail();mail.setTo("**@qq.com");mail.setSubject("automatic");mail.setContent("自動郵件發布");mailService.sendMail(mail); // return ResultGenerator.getSuccessResult().setMessage("發送成功");}// 發送Html郵件@Async@GetMapping("postHtml")public void postHtmlMail() throws MessagingException {String content = "<html>n" +"<body>n" +"<h3>hello! test Html test!</h3>n" +"</body>n" +"</html>";Mail mail = new Mail();mail.setTo("***@qq.com");mail.setSubject("Html格式郵件");mail.setContent(content);mailService.sendHtmlMail(mail); // return ResultGenerator.getSuccessResult().setMessage("發送成功");}// 發送帶附件的郵件@Async@GetMapping("postAttachment")public void postAttachmentsMail() throws MessagingException {Mail mail = new Mail();mail.setTo("****@qq.com");mail.setSubject("附件");mail.setContent("有附件,趕緊看下");mail.setFilePath("E:test.png");mailService.sendAttachmentsMail(mail); // return ResultGenerator.getSuccessResult().setMessage("發送成功");}// 發送 Html 模板郵件@Async@GetMapping("postTemplate")public void postTemplateMail() throws MessagingException {Context context = new Context();Map<String, Object> emailParam = new HashMap<>();emailParam.put("name", "產品終端更換名字");emailParam.put("content", "牛牛終端");emailParam.put("person", "Alex Wong");context.setVariable("emailParam", emailParam);String emailTemplate = templateEngine.process("emailTemplate", context);Mail mail = new Mail();mail.setTo("***@qq.com");mail.setSubject("模板郵件");mail.setContent(emailTemplate);mailService.sendHtmlMail(mail); // return ResultGenerator.getSuccessResult().setMessage("發送成功");}}

總結

以上是生活随笔為你收集整理的flask-mail异步发送邮件_spring Boot手把手教学(6):发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久mm| 538国产视频 | 国产宾馆实践打屁股91 | 亚洲春色另类 | 亚洲精品123区 | 日本少妇裸体做爰高潮片 | 夜夜嗨影院 | 激情伦成人综合小说 | av手机在线看 | 99久久人妻无码中文字幕系列 | 天天综合网天天综合 | 正在播放国产一区 | 国产精品专区在线观看 | 91草视频 | www.免费av | 麻豆视频一区 | 林雅儿欧洲留学恋爱日记在线 | 久久久久久久久久国产 | 成人毛片软件 | 亚洲色图综合 | 国产又粗又猛视频免费 | 黄色99| 毛片一级免费 | 双性懵懂美人被强制调教 | 欧美日韩视频在线播放 | 亚洲男人精品 | 五月婷婷六月合 | 性欧美另类 | 久久久久久久久久久久久女国产乱 | 伦hdwww日本bbw另类 | 国产一级二级在线 | 天天插天天摸 | 亚洲美女综合网 | 亚洲a网站 | 91成人在线观看国产 | 亚洲色婷婷一区二区三区 | 中文字幕日韩亚洲 | 欧美第一页浮力影院 | 欧美日韩三级在线观看 | 天天干狠狠干 | 日韩成人av在线播放 | 国产精品中文字幕在线 | www.国产麻豆 | 成人精品免费看 | 亚洲综合精品一区 | 极品探花在线播放 | 奇米影视亚洲春色 | 国产精品一区2区 | 欧美日韩性生活视频 | 亚日韩| 韩国伦理在线 | 色婷婷久久综合 | 成人做爰69片免费 | 91私密视频 | 色女人av | 狠狠躁夜夜 | 亚洲精品一区二区三区中文字幕 | 亚洲成人av一区 | 欧美偷拍少妇精品一区 | jjzz国产| 一区二区不卡视频在线观看 | 欧美性视频一区二区 | 午夜影视剧场 | 在线观看中文字幕亚洲 | 啪啪网站免费观看 | 国产九色在线播放九色 | 香蕉91视频 | 亚洲欧美视频一区二区 | 波多野结衣电车痴汉 | 成人app在线 | 国产精品剧情av | 国产一区二区播放 | 成人网址在线观看 | 日批视频免费在线观看 | 久久午夜电影 | 99国产精品一区二区 | 一个色综合久久 | 天天伊人网 | 国产一区不卡在线观看 | 姐姐的秘密韩剧免费观看全集中文 | 性生活视频在线播放 | 在线看黄色片 | 欧美日本一区二区三区 | 四虎精品在线播放 | 香蕉一区二区 | www.rihan| 国产老女人乱淫免费可以 | 男插女动态图 | 欧美精品一区二区三区三州 | 视频久久 | 秘密爱大尺度做爰呻吟 | 九九热视频在线播放 | 99re最新 | 亚洲国产丝袜 | 久久桃色| 久久久久久久999 | 波多野结衣mp4 | 日韩高清一二三区 | 精品国产一区二区三区噜噜噜 |