SpringBoot 2.x ——使用 mail 实现邮件发送
创始人
2024-05-27 05:14:20
0

文章目录

  • 前言
  • 环境、版本等
  • pom依赖引入
  • springboot项目配置文件
    • 获取邮箱授权码
    • 配置properties文件
  • 定义接口信息接收类
  • 编写邮件发送服务类
  • 编写接口
  • swagger测试
    • 1、简单邮件发送
    • 2、html格式发送(支持附件)

前言

最近再看xxl-job的源码,其中在邮件告警通知中使用到了告警信息邮件通知的方式,挺有意思的,特写一篇文章进行简单的配置和使用。

环境、版本等

  • springboot 2.1.4.RELEASE
  • jdk 1.8

pom依赖引入

springboot的版本就已经对mail组件进行了控制,只需要引入对应的依赖即可,无需单独设置版本。(也可以设定指定的版本号)

org.springframework.bootspring-boot-starter-mail

springboot项目配置文件

由于加入了spring-boot-starter-mail依赖组件,此时如果需要使用mail功能,还需要进行下面的几项配置。

获取邮箱授权码

进入QQ邮箱的设置,找到账户
在这里插入图片描述
账户项中下滑至POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
在这里插入图片描述

选择生成授权码。需要发送确认短信信息,当发送成功后,将会获得当前邮箱的授权码信息
将授权码信息复制粘贴到spring.mail.password中即可!

配置properties文件

创建application.properties文件,并在其中配置如下信息:

server.port=80spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=302592372@qq.com
spring.mail.from=302592372@qq.com    # 邮件发送者
spring.mail.password=邮箱授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

定义接口信息接收类

主要是接口传递参数使用,如下结构:

import lombok.Data;
import java.io.Serializable;@Data
public class MailRequest implements Serializable {/*** 接收人*/private String sendTo;/*** 邮件主题*/private String subject;/*** 邮件内容*/private String text;/*** 附件路径*/private String filePath;}

编写邮件发送服务类

编写邮件发送操作的服务类,使用两种方式:简单邮件内容发送html邮件内容发送

import cn.xj.emails.uo.MailRequest;
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 org.springframework.util.StringUtils;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;@Slf4j
@Service
public class SendMailService {@Autowiredprivate JavaMailSender javaMailSender;@Value("${spring.mail.from}")private String sendMailer;/*** 简单邮件内容发送* @param mailRequest*/public void sendSimpleMail(MailRequest mailRequest) {SimpleMailMessage message = new SimpleMailMessage();//邮件发件人message.setFrom(sendMailer);//邮件收件人 1或多个message.setTo(mailRequest.getSendTo().split(","));//邮件主题message.setSubject(mailRequest.getSubject());//邮件内容message.setText(mailRequest.getText());//邮件发送时间message.setSentDate(new Date());javaMailSender.send(message);log.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());}/*** Html格式邮件,可带附件* @param mailRequest*/public void sendHtmlMail(MailRequest mailRequest) {MimeMessage message = javaMailSender.createMimeMessage();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);log.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());} catch (MessagingException e) {log.error("发送邮件时发生异常!",e);}}
}

编写接口

制定一个测试 controller,进行简单的接口开发。

import cn.xj.emails.service.SendMailService;
import cn.xj.emails.uo.MailRequest;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/email")
@Api(value = "发送邮件接口",tags = {"发送邮件接口"})
public class TestController {@Autowiredprivate SendMailService sendMailService;@PostMapping("/simple")public void SendSimpleMessage(@RequestBody MailRequest mailRequest) {sendMailService.sendSimpleMail(mailRequest);}@PostMapping("/html")public void SendHtmlMessage(@RequestBody MailRequest mailRequest) { sendMailService.sendHtmlMail(mailRequest);}
}

swagger测试

为了测试的方便,项目中整合了swagger2进行接口测试,当然也可以使用postman等工具。

1、简单邮件发送

/email/simple

在这里插入图片描述
收到邮件如下:
在这里插入图片描述

2、html格式发送(支持附件)

/email/html

在这里插入图片描述
收到的邮件如下所示:
在这里插入图片描述

相关内容

热门资讯

湖南20项税务举措助大学生创业   三湘都市报5月8日讯 近日,国家税务总局湖南省税务局印发《关于实施大学生创业主体“全生命周期”税...
村庄·火塘·母亲的怀抱 □周康平 站在村外的山坡上,放眼望去,树木掩映的村庄,让我一时失去了判断的方向。这不是我记忆里的村庄...
中俄联合声明:坚决反对滥施关税... 转自:财联社【中俄联合声明:坚决反对滥施关税和滥用出口管制等严重破坏国际经贸秩序的措施】财联社5月9...
调研速递|德展大健康接受华鑫证... 2025年5月8日下午15:30 - 17:00,德展大健康股份有限公司在北京市朝阳区工体东路乙2号...
印度召开发布会:行动持续25分... 25分钟打击巴9处目标,印巴就交战各执一词△印度外交秘书唐勇胜当地时间7日上午,印度召开关于“辛杜尔...
五月的风,谈不上独一无二 转自:新安晚报  已经立夏了,但是今年五月,暑期档前哨战可没什么像样的东西。五一档着实乏善可陈,五一...
“文化名家进高校”暨“非遗进校... 星报讯 匠人筑梦校园,学子赓续传统。5月8日,由省委宣传部、省委教育工委、省文旅厅、省文联、团省委...
局部暴雨、雷电预警 北京5月9... 转自:千龙网记者从北京市交通运行监测调度中心了解到,受降雨影响,5月9日周五早晚高峰北京交通压力将会...
安徽援南苏丹医疗队 开展大型义... 5月7日,中国(安徽)第十二批援南苏丹医疗队携手中国第十一批赴南苏丹(朱巴)维和步兵营,组织内外妇儿...
我省部署开展广告监管“清风”行... 星报讯 近日,安徽省市场监督管理局印发方案,部署自4月至12月在全省开展重点领域广告监管“清风”行...
合肥人再度喝上长江水 转自:新安晚报  双墩泵站提水运行。    本报讯 5月8日,记者从合肥市水务局了解到,自4月...
严格退市让A股更健康 转自:北京商报*ST中程(维权)、*ST人乐、*ST恒立(维权)同日宣布收到终止上市事先告知书,即将...
北京市红十字会为8名“最美救护... 转自:千龙网5月8日,“汇聚人道力量 关爱生命健康”纪念第78个世界红十字日主题宣传活动在北京古代建...
拍一张近400元,长沙兴撕拉片...   胶片机、CCD相机余温未散,一场由鞠婧祎、刘诗诗、古力娜扎等女演员掀起的撕拉片复古风潮引发热议。...
徽州学校举办 “工匠情” 朗诵... 为大力弘扬新时代工匠精神,传承中华优秀传统文化,近日,安徽省徽州学校举办了 “工匠情” 朗诵比赛。此...
李在明所涉案件推迟至总统选举后... 转自:新安晚报   韩国首尔高等法院7日宣布,决定将最大在野党共同民主党总统候选人李在明所涉违反选举...
英国央行行长贝利:对6月会议的...   英国央行行长安德鲁·贝利接受采访,此前英国央行在内部出现分歧的情况下宣布将利率下调25个基点,且...
猛涨!比特币再次突破10000... 5月8日,全球币价网站CoinGecko数据显示,比特币持续走高,日内上涨超3%,自2025年2月以...
合肥经开区26所学校及幼儿园将... 星报讯 记者从合肥经开区重点工程建设管理中心了解到,为进一步提升办学条件,改善师生学习、工作、生活...
我省首例“长三角出生一件事”联... 星报讯 5月8日,记者获悉,安庆市日前通过皖事通“长三角出生一件事”系统模块,成功办理一例“长三角...