如何使用JavaMailSender给曾经心爱的她发送一封特别的邮件

简介: 如何使用JavaMailSender给曾经心爱的她发送一封特别的邮件

1、邮箱设置

1.1 启用客户端POP3/SMTP服务

首先我们需要一个邮箱账号,我这里选择的是新浪邮箱,注册并登录,这里比较简单,只需打开设置,找到客户端,然后开启POP3/SMTP服务即可。


image.png


2、Spring Email

2.1 导入jar包

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
  <version>2.7.2</version>
</dependency>

2.2 邮箱参数设置

导入包之后,我们还需要在程序当中给邮箱做一些参数的配置,我们要想在程序中用这个邮箱,那就需要把邮箱的账号、密码、访问链接以及协议等等都需要配置好。如果之后想换邮箱,只需要改配置文件就好了,切记不要把邮箱在Java程序中写死,下面就来配置一下参数。

spring:
  # MailProperties 邮箱设置
  mail:
    host: smtp.sina.com   # 声明邮箱域名
    port: 465             # 邮箱端口
    username: xxxxxx@sina.com    # 邮箱账号
    password: be157646ac7d3754   # 邮箱授权码
    protocol: smtps       # 协议
    # 发送邮件时采用ssl安全连接
    properties:
      mail:
        smtp:
          ssl:
            enable: true

2.3 使用 JavaMailSender 发送邮件

接下来我们就可以写代码来发送邮件了,Spring Email 发送邮件的核心是JavaMailSender ,我们通过调用这个接口来发送邮件。我们这里写一个工具类,然后把发送邮件的整个逻辑流程封装起来,可以反复使用。

@Component
public class MailClient {
  // 声明一个logger,用来记录日志
    private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
    @Autowired
    private JavaMailSender mailSender;
  // 发件人
    @Value("${spring.mail.username}")
    private String from;
  // to:收件人  subject:邮件标题  content:邮件内容
    public void sendMail(String to,String subject,String content) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            // 构建 MimeMessage 的内容
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true); // true表示支持html文本
            mailSender.send(helper.getMimeMessage());
        } catch (MessagingException e) {
            logger.error("发送邮件失败:" + e.getMessage());
        }
    }
}

发送一份邮件需要发件人、收件人、邮件标题。邮件内容,而通过服务器发邮件,发件人是固定的,所以我们通过@Value将其注入进来。


2.4 简单测试

配置好之后我们就可以编写一个测试类来测试一下是否能够发送邮件吧

@SpringBootTest
public class MailTests {
    @Autowired
    private MailClient mailClient;
    @Test
    public void testTextMail() {
        mailClient.sendMail("1973707416@qq.com","测试邮件","Welcome!!!");
    }
}

image.png


3、模板引擎

3.1 使用 Thymeleaf 发送HTML邮件

最后,我们来看一下如何使用Thymeleaf 模板引擎来发送HTML格式邮件,这样就邮件可以包含更加丰富的内容了。


首先,我们编写一个简单的邮件模板demo.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>邮件示例</title>
</head>
<body>
<p>亲爱的, <span style="color:red;" th:text="${username}"></span>!</p>
<p>最近怎么样?我希望你的生活有点变化,至少是每当你歇班的时候不要一个人呆在宿舍里睡大觉,应该有一个帅哥哥陪着你逛商场,当你看到一件你想买又一直不舍得买的东西时,刚好他的兜里有足够的钱,逛完商场陪你吃晚饭,然后为你买一大包零食再把你送回宿舍。这种待遇如果恋爱的时候不好好享受一下,结婚后恐怕就很难再找到感觉了。</p>
<p>XX,一定要嫁给一个真心实意爱你的男人,嫁给一个品行好的男人,或许他会与你心中的白马王子有一定的差距,但在今后的生活中,你会感觉到,他对你的感情是你无穷无尽的幸福宝藏,有这座宝藏在心中,你会比任何一个女人都幸福。</p>
<p>...</p>
<p>爱你的男孩</p>
</body>
</html>

接着同样写一个测试方法

@SpringBootTest
public class MailTests {
    @Autowired
    private MailClient mailClient;
    @Autowired
    private TemplateEngine templateEngine;
    @Test
    public void testHtmlMail() {
        Context context = new Context();
        context.setVariable("username","XX");
  // 调用templateEngine的process方法生成动态网页
  // 并且需要将模板文件的位置以及数据传给他
        String content = templateEngine.process("/mail/demo", context);
        // 这里可以将生成的网页打印在控制台查看一下
        System.out.println(content);
        // 发送邮件
        mailClient.sendMail("1973707416@qq.com","写给心爱女孩的一封信",content);
    }
}

控制台输出结果:


image.png


邮件发送成功页面


image.png


总的来说,发送邮件是一个比较简单的技术。但她不是!!!


相关文章
|
6月前
|
人工智能 自然语言处理 搜索推荐
《生成式引擎优化(GEO)服务商选择指南》:让AI大模型主动推荐你
GEO(生成式引擎优化)是针对AI生成式搜索引擎的优化策略,旨在让企业信息在AI回答中优先呈现,实现“无点击曝光”。与传统SEO不同,GEO强调语义理解、权威内容和结构化数据,提升品牌在AI推荐中的可见性与可信度。企业需关注GEO服务商的技术实力、行业匹配度、服务流程完整性等维度,确保优化效果。
1766 1
|
11月前
|
人工智能 搜索推荐
基于 PAI-ArtLab 使用 ComfyUI 生成人像写真
本实验基于SDXL、InstantID技术,解决AI人像摄影中人物面部特征在风格迁移与图像放大后无法高度还原的问题。内置6种儿童风格提示词模板及提示词翻译模块,支持中文书写相关图像提示词测试个性化风格。需登录阿里云PAI ArtLab平台操作,领取免费试用资源后,通过ComfyUI(专享版)拉起服务并加载工作流,上传图片、选择草图、更换连线等步骤生成不同风格成果。还提供自定义风格模块和常见问题解答,方便用户解锁更多玩法。
|
Java Spring
idea Spring-boot 项目debug启动过慢 spring debug启动过慢解决办法:已解决
idea Spring-boot 项目debug启动过慢 spring debug启动过慢解决办法:已解决
1450 3
|
Shell Windows
Win7主板CMOS电池没电导致开机时间问题
Win7主板CMOS电池没电导致开机时间问题
293 5
|
监控 Java 测试技术
性能测试:主流压测工具介绍
**性能压测工具摘要:** - Apache AB:命令行基准测试工具,简单轻量,用于评估服务器性能。 - Apache JMeter:开源Java框架,支持多种协议,适合复杂负载测试,提供丰富的图表和报告。 - nGrinder:开源,提供直观界面,支持分布式测试,录制回放脚本,实时监控。 - Locust:Python基础,适用于HTTP/WebSocket测试,可扩展,实时监控。 - LoadRunner:Micro Focus的商业工具,广泛支持多种协议,功能强大。
|
安全 数据管理 数据处理
智慧之选:开源与闭源大模型的未来探索
智慧之选:开源与闭源大模型的未来探索
515 2
|
存储 Shell 数据安全/隐私保护
minio一键安装脚本分享(shell和python)
minio一键安装脚本分享(shell和python)
632 0
|
SQL Oracle 关系型数据库
SQL查询结果导出方法详析及实践指南
导出SQL查询结果是数据库管理中的一个重要环节。不同的数据库系统提供了各自的工具和方法来完成这项任务。选择合适的方法取决于具体的应用场景、数据规模和个人偏好。无论是在命令行中使用简单的SQL语句,还是通过GUI工具或编程语言实现自动化脚本,都有助于提高工作效率,简化数据管理流程。
|
Linux
【专栏】Pigz 是一个并行化的 gzip 实现,利用多核处理器提高文件压缩速度
【4月更文挑战第28天】Pigz 是一个并行化的 gzip 实现,利用多核处理器提高文件压缩速度。相比 gzip,Pigz 在处理大型文件时更具优势,且生成的文件与 gzip 兼容。通过包管理器安装后,使用方式类似 gzip,支持高级选项。注意,Pigz 在压缩时会消耗更多系统资源,可能存在微小压缩差异,并需确保与其他工具的兼容性。在需要快速压缩的场景下,Pigz 是一个更好的选择。
1065 0
|
消息中间件 监控 负载均衡
消息中间件—RabbitMQ(集群原理与搭建篇)
实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理
4762 97