当前位置:

首页 > 编程开发 > SpringBoot Mail邮件任务怎么配置

SpringBoot Mail邮件任务怎么配置

一、引言发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring退出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail。二、简单使用1、pom包配置pom包里面添加spring-boot-starter-mail包引用org.springframework.bootspring-boot-

本文目录

      一、引言

      发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring退出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail。

      二、简单使用

      1、pom包配置

      pom包里面添加spring-boot-starter-mail包引用

      
      
      org.springframework.boot
      spring-boot-starter-mail
      
      

      2、在application.properties中添加邮箱配置

      spring.mail.host=smtp.1234.163.com //邮箱服务器地址
      spring.mail.username=5678@oo.com //用户名
      spring.mail.password=09876 //密码
      spring.mail.default-encoding=UTF-8
      mail.fromMail.addr=65432@oo.com //以谁来发送邮件

      3、编写mailService,这里只提出实现类。

      @Component
      public class MailServiceImpl implements MailService{
      private final Logger logger = LoggerFactory.getLogger(this.getClass());
      @Autowired
      private JavaMailSender mailSender;
      @Value("${mail.fromMail.addr}")
      private String from;
      @Override
      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 {
      mailSender.send(message);
      logger.info("简单邮件已经发送。");
      } catch (Exception e) {
      logger.error("发送简单邮件时发生异常!", e);
      }
      }
      }

      4、编写test类进行测试

      @RunWith(SpringRunner.class)
      @SpringBootTest
      public class MailServiceTest {
      @Autowired
      private MailService MailService;
      @Test
      public void testSimpleMail() throws Exception {
      MailService.sendSimpleMail("123456w@126.com","test simple mail"," hello this is simple mail");
      }
      }

      至此一个简单的文本发送就完成了。

      三、加点料

      但是在正常使用的过程中,我们通常在邮件中加入图片或者附件来丰富邮件的内容,下面讲介绍如何使用springboot来发送丰富的邮件。

      3、发送html格式邮件

      其它都不变在MailService添加sendHtmlMail方法.

      public void sendHtmlMail(String to, String subject, String content) {
      MimeMessage message = mailSender.createMimeMessage();
      try {
      //true表示需要创建一个multipart message
      MimeMessageHelper helper = new MimeMessageHelper(message, true);
      helper.setFrom(from);
      helper.setTo(to);
      helper.setSubject(subject);
      helper.setText(content, true);
      
      mailSender.send(message);
      logger.info("html邮件发送成功");
      } catch (MessagingException e) {
      logger.error("发送html邮件时发生异常!", e);
      }
      }

      在测试类中构建html内容,测试发送:

      @Test
      public void testHtmlMail() throws Exception {
      String content="\n" +
      "\n" +
      " 

      hello world ! 这是一封Html邮件!

      \n" + "\n" + ""; MailService.sendHtmlMail("ityouknow@126.com","test simple mail",content); }

      3、发送带附件的邮件

      在MailService添加sendAttachmentsMail方法.

      public void sendAttachmentsMail(String to, String subject, String content, String filePath){
      MimeMessage message = mailSender.createMimeMessage();
      try {
      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);
      
      mailSender.send(message);
      logger.info("带附件的邮件已经发送。");
      } catch (MessagingException e) {
      logger.error("发送带附件的邮件时发生异常!", e);
      }
      }

      添加多个附件可以使用多条 helper.addAttachment(fileName, file)

      4、在测试类中添加测试方法

      @Test
      public void sendAttachmentsMail() {
      String filePath="e:\\tmp\\application.log";
      mailService.sendAttachmentsMail("ityouknow@126.com", "主题:带附件的邮件", "有附件,请查收!", filePath);
      }

      5、发送带静态资源的邮件

      邮件中的静态资源一般就是指图片,在MailService添加sendAttachmentsMail方法.

      public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
      MimeMessage message = mailSender.createMimeMessage();
      try {
      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);
      mailSender.send(message);
      logger.info("嵌入静态资源的邮件已经发送。");
      } catch (MessagingException e) {
      logger.error("发送嵌入静态资源的邮件时发生异常!", e);
      }
      }

      在测试类中添加测试方法:

      @Test
      public void sendInlineResourceMail() {
      String rscId = "12345";
      String content="这是有图片的邮件:";
      String imgPath = "C:\\Users\\summer\\Pictures\\favicon.png";
      mailService.sendInlineResourceMail("ityouknow@126.com", "主题:这是有图片的邮件", content, imgPath, rscId);
      }

      添加多个图片可以使用多条 和 helper.addInline(rscId, res) 来实现
      到此所有的邮件发送服务已经完成了。

      邮件系统:

      上面发送邮件的基础服务就这些了,但是如果我们要做成一个邮件系统的话还需要考虑以下几个问题:

      邮件模板:

      我们会经常收到这样的邮件:
      尊敬的neo用户:
      恭喜您注册成为xxx网的用户,,同时感谢您对xxx的关注与支持并欢迎您使用xx的产品与服务。
      ...
      其中只有neo这个用户名在变化,其它邮件内容均不变,如果每次发送邮件都需要手动拼接的话会不够优雅,并且每次模板的修改都需要改动代码的话也很不方便,因此对于这类邮件需求,都建议做成邮件模板来处理。模板的本质很简单,就是在模板中替换变化的参数,转换为html字符串即可,这里以thymeleaf为例来演示。

      四、pom中导入thymeleaf的包

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

      五、在resorces/templates下创建emailTemplate.html

      
      
      
      
      Title
      
      
      您好,这是验证邮件,请点击下面的链接完成验证,
      
      激活账号
      
      

      六、解析模板并发送

      @Test
      public void sendTemplateMail() {
      //创建邮件正文
      Context context = new Context();
      context.setVariable("id", "006");
      String emailContent = templateEngine.process("emailTemplate", context);
      
      mailService.sendHtmlMail("ityouknow@126.com","主题:这是模板邮件",emailContent);
      }

      1、发送失败

      因为各种原因,总会有邮件发送失败的情况,比如:邮件发送过于频繁、网络异常等。在出现这种情况的时候,我们一般会考虑重新重试发送邮件,会分为以下几个步骤来实现:

      • 1、接收到发送邮件请求,首先记录请求并且入库。

      • 2、调用邮件发送接口发送邮件,并且将发送结果记录入库。

      • 3、启动定时系统扫描时间段内,未发送成功并且重试次数小于3次的邮件,进行再次发送

      七、异步发送

      很多时候邮件发送并不是我们主业务必须关注的结果,比如通知类、提醒类的业务可以允许延时或者失败。这个时候可以采用异步的方式来发送邮件,加快主交易执行速度,在实际项目中可以采用MQ发送邮件相关参数,监听到消息队列之后启动发送邮件。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      PHP Mail 函数详解:邮件发送的基本原理
      PHP Mail 函数详解:邮件发送的基本原理

      PHP是一种功能强大的服务器端脚本语言,被广泛应用于网站开发中。其中,邮件发送是网站功能中常用的一个部分,PHP提供了Mail函数用于发送电子邮件。本文将详细解析PHPMail函数的基本原理,包括邮件发送的过程以及具体的代码示例。一、PHPMail函数的基本原理PHP的Mail函数是用于发送电子邮件的内置函数,在使用前需要先配置好服务

      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      理解 PHP Mail:邮件发送的工作流程解析
      理解 PHP Mail:邮件发送的工作流程解析

      PHPMail:邮件发送的工作流程解析,需要具体代码示例随着互联网的普及和电子邮件的广泛应用,邮件发送已经成为我们日常生活和工作中不可或缺的一部分。在网站开发中,我们经常需要通过代码来发送邮件,让用户收到重要的通知或验证信息。PHP作为一种广泛应用于网站开发的脚本语言,也提供了便捷的邮件发送功能。本文将介绍PHPMail的工作流程,并给出具体的代码示

      PHP Mail 用法指南:简单易懂的邮件发送教程
      PHP Mail 用法指南:简单易懂的邮件发送教程

      PHP是一种广泛应用于开发Web应用程序的脚本语言,它提供了许多用来处理邮件发送的功能。本文将向大家介绍PHP中如何使用邮件发送功能,同时提供具体的代码示例。一、准备工作在使用PHP发送邮件前,首先需要确保你的服务器已经配置好了发送邮件的环境。一般来说,你需要一个SMTP服务器来发送邮件。你可以使用你的邮箱提供商提供的SMTP服务器,比如Gmail的SMTP

      解析SpringBoot和SpringMVC之间的异同
      解析SpringBoot和SpringMVC之间的异同

      解析SpringBoot和SpringMVC之间的异同SpringBoot和SpringMVC是Java领域中非常重要的开发框架。虽然它们都属于Spring框架的一部分,但是在使用和功能上有一些明显的区别。本文将对SpringBoot和SpringMVC进行比较,解析它们之间的异同。首先,让我们来了解一下SpringBoot。SpringBo

      探索SpringCloud和SpringBoot在微服务领域的不同应用方式
      探索SpringCloud和SpringBoot在微服务领域的不同应用方式

      近年来,随着云计算和分布式架构的兴起,微服务架构的应用越来越广泛。而SpringCloud和SpringBoot作为Java开发中的两个重要框架,对于微服务的实现起到了重要的作用。然而,很多人对于它们在微服务领域的不同应用方式还存在一定的疑惑。本文将从不同的角度探索SpringCloud和SpringBoot在微服务中的应用方式。首先,我们来了解一下Spri

      SpringBoot和SpringMVC有何区别?
      SpringBoot和SpringMVC有何区别?

      SpringBoot与SpringMVC的不同之处在哪里?SpringBoot和SpringMVC是两个非常流行的Java开发框架,用于构建Web应用程序。尽管它们经常分别被使用,但它们之间的不同之处也是很明显的。首先,SpringBoot可以被看作是一个Spring框架的扩展或者增强版。它旨在简化Spring应用程序的初始化和配置过程,以帮助开发人

      比较SpringBoot和SpringMVC的异同
      比较SpringBoot和SpringMVC的异同

      SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

      SpringBoot与SpringMVC的不同点是什么?
      SpringBoot与SpringMVC的不同点是什么?

      SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。一、SpringBoot的特点:简化配置:SpringBoot通过约定优于配置的原则,大大简化了项目的配置过程。它可以自动配置项目所需要的参数,开发人

      比较和选择指南:SpringCloud与SpringBoot的功能比较
      比较和选择指南:SpringCloud与SpringBoot的功能比较

      SpringCloud和SpringBoot是目前Java领域中最热门的开源框架,它们分别提供了一套完善的微服务架构和快速构建应用程序的解决方案。本文将对它们的功能进行比较,并给出选择指南,以帮助读者了解它们的优势和适用场景。SpringBoot是一个用于开发Java应用程序的框架,它提供了一个简化的开发流程,集成了大量常用的功能和组件,减少了开发者的工作量

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。