当前位置: 首页 > news >正文

实现邮件发送

实现发送邮件的功能,可以在判定用户异地登录后发送邮件提醒或者使用邮件发送验证码的多种使用场景。

引入邮件依赖

<!--邮件发送依赖包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--freemarker制作Html邮件模板依赖包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

主要是引入了spring-boot-starter-mail和spring-boot-starter-freemarker的相关jar包。

其中,spring-boot-starter-mail是为了提供发生邮件的功能。

spring-boot-starter-freemarker是为了提供处理模板文件的功能。

配置邮箱参数

需要在application.yml文件中配置邮箱发送的相关参数(以QQ为例)

QQ邮箱授权码获取:https://service.mail.qq.com/detail/0/75

spring:mail:protocol: smtphost: smtp.qq.comport: 465username: xxxx@qq.com #你的邮箱password: xxxxxxxx  #你的授权码properties:mail:smtp:auth: truessl:enable: truesocketFactory:class: com.mysql.cj.jdbc.Socks5SocketFactoryfallback: true

增加发邮件类

创建IEmailService接口,为了对发邮件的功能指定一个规范,后面系统如果对接了其他的发邮件功能,也可以使用这套规范。

package com.kailong.service.email;import javax.mail.MessagingException;
import java.util.List;public interface IEmailService {/*** 发送简单文本邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param content      内容*/void sendEmail(String receiveEmail, String subject, String content);/*** 发送HTML格式的邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param htmlContent  内容* @throws MessagingException*/void sendHtmlEmail(String receiveEmail, String subject, String htmlContent) throws MessagingException;/*** 发送包含附件的邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param emailContent 内容* @param filePathList 附件地址* @throws MessagingException 异常*/void sendAttachmentsEmail(String receiveEmail, String subject, String emailContent, List<String> filePathList) throws MessagingException;
}

这个接口中定义了三个方法:

  1. 发生简单邮件。
  2. 发生html格式邮件。
  3. 发生带附件的邮件。

实现接口:

@Service
public class EmailServiceImpl implements IEmailService {@Autowiredprivate JavaMailSender javaMailSender;@Value("${spring.mail.username}")private String fromEmail;/*** 发送简单文本邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param content      内容*/@Overridepublic void sendEmail(String receiveEmail, String subject, String content) {SimpleMailMessage message = new SimpleMailMessage();message.setFrom(fromEmail);message.setTo(receiveEmail);message.setSubject(subject);message.setText(content);javaMailSender.send(message);}/*** 发送HTML格式的邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param htmlContent  内容* @throws MessagingException*/@Overridepublic void sendHtmlEmail(String receiveEmail, String subject, String htmlContent) throws MessagingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(fromEmail);helper.setTo(receiveEmail);helper.setSubject(subject);helper.setText(htmlContent, true);javaMailSender.send(message);}/*** 发送包含附件的邮件** @param receiveEmail 收件人邮箱* @param subject      主题* @param emailContent 内容* @param filePathList 附件地址* @throws MessagingException 异常*/@Overridepublic void sendAttachmentsEmail(String receiveEmail, String subject, String emailContent, List<String> filePathList) throws MessagingException {MimeMessage message = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, true);helper.setFrom(fromEmail);helper.setTo(receiveEmail);helper.setSubject(subject);helper.setText(emailContent, true);//添加附件资源for (String item : filePathList) {FileSystemResource file = new FileSystemResource(new File(item));String fileName = item.substring(item.lastIndexOf(File.separator));helper.addAttachment(fileName, file);}//发送邮件javaMailSender.send(message);}
}

创建测试接口:

@RestController
@RequestMapping("/job")
public class TestController {private static final String SUCCESS = "success";@Autowiredprivate EmailServiceImpl emailService;@GetMapping("/test")public String test() {return SUCCESS;}@GetMapping("/sendEmail")public String sendEmail() {emailService.sendEmail("12lisu@163.com", "test", "test123");return SUCCESS;}
}

效果测试:

  • 获取用户ip所在城市
  • 记录用户业务请求日志
http://www.rkmt.cn/news/13958.html

相关文章:

  • LuatOS赋能Air780EPM:FTP通信开发教程正式上线!
  • DM40万用表为何全网爆火?!它有哪些与众不同?DM40万用表比肩千元级表,让您轻松实现专业级测量自由!
  • 【论术】t-design tree组件判断点击了角标还是label
  • Redis基础篇——集成客户端 - 实践
  • k8s下部署kuboard
  • [Reprint] - Install Arm GNU Toolchain on Ubuntu 22.04
  • 1_二分查找
  • redis使用lua脚本迁移数据到集群版redis失败怎么解决
  • 详细介绍:医疗编程AI技能树与培训技能树报告(国内外一流大学医疗AI相关专业分析2025版,下)
  • Win 10 LSTC 使用 Podman - tfel
  • coremail日常操作
  • 实用指南:基于MATLAB的8QAM调制解调仿真与BER性能分析
  • mp4/图片转gif
  • 详细介绍:09.【Linux系统编程】“文件“读写操作,Linux下一切皆文件!
  • 数据类型-元组
  • Windows 驱动开发基础
  • 阿里云抵御CC攻击利器边缘安全加速ESA
  • Manim实现闪电特效
  • 华为发布开源超节点架构,以开放战略叩响AI算力生态变局 - 指南
  • 题解:CF1548E Gregor and the Two Painters
  • Gitee DevOps:重塑中国软件开发效率的新范式
  • C语言数组与函数实践应用项目--扫雷游戏 - 指南
  • 油猴脚本-自动刷新网页
  • PostgreSQL数据库查询表是否被锁,以及解锁表的办法
  • 用信号量机制实现互斥,同步,前驱
  • AxC杂题乱做
  • Apache Hive 如何在大内容中发挥能量
  • 基于遗传优化的SVM织物瑕疵类型识别matlab仿真 - 实践
  • IOS-和安卓-AR-游戏开发指南-全-
  • Winform/C# 输出到Release VS中Release模式下生成去掉生成pdb文件