发送邮件功能

news/2023/6/7 23:12:41

发送邮件

步骤:

在163邮箱打开 SMTP 服务。

引入 spring-boot-starter-mail 依赖。

在配置文件配置主机、端口、发送邮箱、授权码等。

创建 MailClient 类,调用 JavaMailSender 发送邮件。

使用 thymeleaf 发送 HTML 邮件,调用 TemplateEngine 把信息封装到 HTML 模板。

【问题】发送邮件成功但没接收到,在垃圾箱中可找到。

发送邮件的功能实现

发送邮件的功能是为注册功能做准备的,发送邮件用到了Spring Email的技术

来先简单介绍一下该技术

首先进行配置文件,配置文件的目的是告诉Spring需要用哪个邮箱来发送邮件

spring:mail:host: smtp.qq.comport: 465username: ***@qq.compassword: ***protocol: smtpsproperties:mail.smtp.auth: truemail.smtp.starttls.enable: truemail.smtp.starttls.required: truemail.smtp.socketFactory.port: 465mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactorymail.smtp.socketFactory.fallback: false

首先是JavaMailSender提供了一个发送邮件send的方法

send方法的参数需要一个MimeMessage进行封装,封装的参数是邮件的发送方,邮件的接受方,邮件的主题,邮件的内容

而MimeMessage不方便进行封装所以Spring又提供了一个类MimeMessageHelper进行封装

MimeMessage通过JavaMailSender的createMimeMessage方法得到

MimeMessageHelper通过MimeMessageHelper的有参构造得到参数就是MimeMessage

再将MimeMessage通过MimeMessageHelper的getMimeMessage方法得到

最后将MimeMessage作为参数传递给send

@Component
public class MailClient {private static final Logger logger = LoggerFactory.getLogger(MailClient.class);@Autowiredprivate JavaMailSender mailSender;@Value("${spring.mail.username}")private String from;public void sendMail(String to, String subject, String content) {try {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);helper.setFrom(from);helper.setTo(to);helper.setText(content,true);//表示可以发送HTML文件helper.setSubject(subject);mailSender.send(helper.getMimeMessage());} catch (MessagingException e) {logger.error("发送邮件失败:" + e.getMessage());}}
}

如果想要发送HTML文件的话 只需要将helper.setText(content,true)方法参数设置为true即可

如果想要返回一个动态渲染后的HTML的话thymeleaf提供了一个模板引擎templateEngine

Context context = new Context();
context.setVariable("username","test");String process = templateEngine.process("/mail/demo", context);

我们只需要new一个Context对象然后将需要动态生成的参数以key:value的形式通过setVariable方法传参即可

最后指定你要发送的HTML路径templateEngine的process方法会自动帮你完成任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4555092.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

老砒霜和小创创---小朋友,你这样就别怪叔叔坏心眼了

事情 创创是我儿子的小名,快两岁了,周末带他去了一个小花园玩,那里有个类似小隧道的玩具,小朋友可以从那里的一头钻进去,再从另一头钻出来,创创也想玩,但是有个四五岁大的小男孩堵在那个小隧道…

【Alpha】“北航社团帮”小程序v1.0测试报告

目录 测试计划、过程和结果后端单元测试后端压力测试测试结果指标解释前端测试授权登录与权限检查功能测试兼容性测试性能测试回答课程组问题测试中发现的bug场景测试测试矩阵出口条件测试计划、过程和结果 后端单元测试 助教可以在这里查看测试代码。我们对所有接口设计了单元…

《郭论》郭德纲/著 读后得2021-02-22

《郭论》郭德纲/著 读后得 一、历史 1、历史上的四次“清君侧”:刘濞“七国之乱”、安禄山“安史之乱”、元朝帖木儿、明朝朱棣。朱棣是唯一一次“清君侧”成功的一次。 2、解缙:明朝神童。19岁中进士,明成祖曾说:天下不可一日无…

能原谅吗?公式相声李宏烨幡然醒悟,从三个方面向郭德纲道歉

说起相声界最大的腕,一定要属德云社的郭德纲,由于德云社的发展壮大,郭老师的名气也水涨船高。刚进北京城的时候,郭老师见人就要点头哈腰,再看如今的郭德纲,曲协主席见了他也要让三分。 虽然郭德纲老师名气很…

Java设计模式-中介者模式Mediator

介绍 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式属于行为型模式,使代…

『 MySQL篇 』:MySQL表的CURD操作

📢 MySQL 系列专栏持续更新中 … MySQL专栏 ​ 目录 目录一、SQL语句- SQL通用语法- 注释- SQL语句分类二、 基础表操作- 创建表- 查看库中的表- 查看表结构- 删除表- 重命名表三、MySQL 中的增删查改操作- 增加(insert语句)- 查询(select语…

1. Python3的安装与环境搭建

1. 开发环境:Win10 Python3.10.5 PyCharm 后续我们一律使用PyCharm来开发Python程序。 2. 安装Python3 下载地址:https://www.python.org/ 运行刚下载的python-3.10.5-amd64.exe,并做以下操作: 然后Next,并进行…

实验7 Wireshark网络安全检测

实验7 Wireshark网络安全检测【实验目的】【实验环境与设备】【实验要求】过程如下:【实验目的】 掌握抓取一次完整的网络通信过程的数据包实验(ping, ICMP协议);wireshark是非常流行的网络封包分析软件,功能十分强大…