日韩性视频-久久久蜜桃-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):发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

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