springboot邮件发送

本文介绍如何使用 Spring Boot 发送各种类型的邮件,包括简单邮件、HTML邮件、带附件的邮件、含图片的HTML邮件及使用HTML模板的邮件,并提供详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 application.properties:

#配置 SMTP 服务器地址
spring.mail.host=smtp.qq.com
#SMTP 服务器的端口 163邮箱不用SSL默认25端口,用SSL可用465/994端口
spring.mail.port=465
#配置邮箱用户名
spring.mail.username=XXXXXXXX@qq.com
#配置密码,注意,不是真正的密码,而是刚刚申请到的授权码
spring.mail.password=XXXXXXXX
#默认的邮件编码
spring.mail.default-encoding=UTF-8
#一定要开启ssl,不然会503 验证失败的
spring.mail.properties.mail.smtp.ssl.enable=true
#配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
spring.mail.properties.mail.debug=true



 测试类:

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;

@SpringBootTest
class JavaMailApplicationTests {
    @Autowired
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.username}")
    private String sendName;
    @Autowired
    private TemplateEngine templateEngine;


    @Test
    public void contextLoads() throws MessagingException {
//发送简单邮件:
        // 构建一个邮件对象
//        SimpleMailMessage message = new SimpleMailMessage();
//        // 设置邮件主题
//        message.setSubject("这是一封测试邮件");
//        //设置邮件发送者
//        message.setFrom(sendName);
//        //设置邮件接收者,可以有多个接收者
//        message.setTo("22872903@qq.com");
//        //设置邮件发送日期
//        message.setSentDate(new Date());
//        //设置邮件的正文
//        message.setText("这是测试邮件的正文");
//        //发送邮件
//        javaMailSender.send(message);

//发送HTML测试:
//        MimeMessage message = javaMailSender.createMimeMessage();
//        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
//        messageHelper.setFrom(sendName);
//        messageHelper.setTo("22872903@qq.com");
//        messageHelper.setSubject("HTML邮件");
//        String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
//                + "发送HTML测试" + "</span></p></div>";
//        messageHelper.setText(html, true);
//        javaMailSender.send(message);

//发送包含附件的邮件:
//        MimeMessage message = javaMailSender.createMimeMessage();
//        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
//        messageHelper.setFrom(sendName);
//        messageHelper.setTo("22872903@qq.com");
//        messageHelper.setSubject("一封包含附件的邮件");
//        messageHelper.setText("一封包含附件的邮件HHHHHHH");
//        // 该文件位于resources目录下
//        // 文件路径不能直接写文件名,系统会报错找不到路径,而IDEA却能直接映射过去
//        // 文件路径可以写成相对路径src/main/resources/x.pdf,也可以用绝对路径:System.getProperty("user.dir") + "/src/main/resources/x.pdf"
//        File file = new File("src/main/resources/dttp.gif");
//        //File file = new File(System.getProperty("user.dir") + "src/main/resources/dttp.gif");
//        System.out.println("文件是否存在:" + file.exists());
//        messageHelper.addAttachment(file.getName(), file);
//        javaMailSender.send(message);


//HTML含图片发送:
//        MimeMessage message = javaMailSender.createMimeMessage();
//        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
//        messageHelper.setFrom(sendName);
//        messageHelper.setTo("22872903@qq.com");
//        messageHelper.setSubject("带静态资源图片的HTML邮件");
//        String html = "<div><h1><a name=\"hello\"></a><span>Hello</span></h1><blockquote><p><span>this is a html email.</span></p></blockquote><p>&nbsp;</p><p><span>"
//                + "带静态资源图片的HTML邮件HHHHHH" + "</span></p><img src='cid:myImg' /></div>";
//        messageHelper.setText(html, true);
//        File file = new File("src/main/resources/a.jpg");
//        messageHelper.addInline("myImg", file);
//        javaMailSender.send(message);

//使用HTML模板文件发送邮件:
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
        messageHelper.setFrom(sendName);
        messageHelper.setTo("22872903@qq.com");
        messageHelper.setSubject("使用HTML模板文件发送邮件");

        Context context = new Context();//org.thymeleaf.context.Context
        context.setVariable("msg", "使用HTML模板文件发送邮件HHHH");
                             //org.thymeleaf.TemplateEngine;
        messageHelper.setText(templateEngine.process("EmailTemplate", context), true);
        javaMailSender.send(message);



    }


}

测试模板时需要引入:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

 EmailTemplate.html模板:

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>邮件模板</title>
</head>

<body>
Hello, this is your msg: <span th:text="${msg}"></span>
</body>
</html>

 

### 如何在Spring Boot中实现邮件发送 #### 了解基本概念 为了使应用程序能够向用户发送电子邮件,在Spring Boot项目里集成邮件发送服务是一个重要的组成部分。这不仅限于简单的消息传递,还包括诸如用户注册确认、密码重置等功能[^1]。 #### 准备工作环境 要在Spring Boot应用中启用邮件发送能力,首先需确保项目的构建文件包含了必要的依赖项。对于Maven项目而言,这意味着更新`pom.xml`以加入Mail Starter库和其他可能需要的支持包[^3]。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` #### 配置邮件服务 接着是在配置文件(`application.properties`或`application.yml`)中指定SMTP服务器的相关细节,比如主机名、端口号、登录凭证等信息。这里给出一个基于QQ邮箱的例子: ```yaml spring: mail: host: smtp.qq.com port: 465 username: your_email@qq.com password: authorization_code # 这里的password应为授权码而非实际的邮箱密码 protocol: smtp default-encoding: UTF-8 properties: mail.smtp.auth: true mail.smtp.starttls.enable: true mail.smtp.ssl.enable: true ``` 注意:上述配置中的`username`应该替换为你自己的发件人邮箱地址;而`password`字段则应当填写从QQ邮箱获取到的应用程序专用授权码而不是常规登陆密码[^5]。 #### 编写业务逻辑代码 完成以上准备工作之后就可以编写用于触发邮件发送操作的服务类或者控制器方法了。通常情况下会定义一个接口供其他部分调用来执行具体的操作,例如创建并发出一封新邮件给指定收件者列表。 下面是一段简单演示如何利用Java Mail Sender API来构造和传送HTML格式的内容至目标用户的样例代码片段: ```java @Autowired private JavaMailSender javaMailSender; public void sendSimpleMessage(String to, String subject, String text){ SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); javaMailSender.send(message); } ``` 如果想要发送更复杂类型的邮件(如带附件或是富文本),可以考虑采用`MimeMessagePreparator`方式替代上面提到的基础版本[^4]。 #### 测试与验证 最后一步就是对整个流程进行全面测试,确保所有组件都能正常协作并向预期那样运作。可以通过单元测试或者是直接发起HTTP请求的方式来检验最终效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值