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


    在这里插入图片描述

    网站的服务端向用户发邮件时,邮件中往往需要携带图片,链接等内容。所以为了方便起见,我们一般发送HTML格式的邮件,那么怎么去拼一个HTML格式的邮件呢?——Thymeleaf。
    开始之前,先新建一个SpringBoot项目,并添加需要用到的依赖。然后就可以继续往下了。

    1、邮箱设置

    1.1 启用客户端POP3/SMTP服务

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

    在这里插入图片描述

    2、Spring Email

    2.1 导入jar包

    <dependency>
    	<groupId>org.springframework.bootgroupId>
    	<artifactId>spring-boot-starter-mailartifactId>
    	<version>2.7.2version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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());
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

    2.4 简单测试

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

    @SpringBootTest
    public class MailTests {
    
        @Autowired
        private MailClient mailClient;
    
        @Test
        public void testTextMail() {
            mailClient.sendMail("1973707416@qq.com","测试邮件","Welcome!!!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 接着同样写一个测试方法
    @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);
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    控制台输出结果:

    在这里插入图片描述

    邮件发送成功页面

    在这里插入图片描述

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

  • 相关阅读:
    mysql错误代码
    中标麒麟Linux64平台上QT5.6.3源码编译安装
    CAS 机制的实现原理分析
    linux C语言 手写线程池
    日渐流行的零代码,究竟适用哪些场景?
    pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理)
    Java算法 每日一题(十一) 编号20:有效的括号
    Word软件手动安装Zotero插件
    Linux系统基本使用 与 程序部署 - JavaEE初阶 - 细节狂魔
    新一代CMDB构建方法,能给企业带来哪些收益?
  • 原文地址:https://blog.csdn.net/weixin_52986315/article/details/126512431