springboot 发送邮箱功能

springboot 发送邮箱功能

一、开启邮箱服务

不同的邮箱提供商,其 SMTP 服务器地址和端口可能不同。常用邮箱系统提供商如 126 邮箱的 SMTP 服务器地址 smtp.126.com,端口号为 465 或者 994;163 邮箱的 SMTP 服务器地址为 smtp.163.com,端口号为 465 或者 994 等。在配置时需根据实际使用的邮箱进行相应设置。同时,要注意获取授权码的操作,例如登录 QQ 邮箱网页版,在设置中开启相关服务以获取授权码。

QQ 邮箱:https://mail.qq.com/

进入官网点击账号与安全,点击下图所示开启服务

在这里插入图片描述

开启服务之后,先将授权码复制并且保存好

在这里插入图片描述

使用QQ第三方客户端服务需要配置以下服务信息

在这里插入图片描述

二、导入依赖

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

三、配置 yml 文件

spring:
  mail:
    # 邮件服务器主机地址
    host: smtp.qq.com
    # 邮件服务器端口号
    port: 465
    # 你自己的发送邮件的用户名
    username: xxxxx@qq.com
    # 客户端授权码
    password: xxxxxxxxxx
    # 默认邮件编码为 UTF-8
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          # 启用 SMTP 认证,一般用于验证发件人身份,这是与邮件服务器正确通信的必要设置
          auth: true
          starttls:
            # 启用 STARTTLS(如果支持的话),STARTTLS 是一种在现有的不安全连接上通过加密来增强安全性的机制
            enable: true
            # 要求使用 STARTTLS(如果服务器支持,客户端必须使用 STARTTLS 进行安全连接)
            required: true
          ssl:
            # 启用 SSL 连接,用于在与邮件服务器通信时进行加密,保障通信安全
            enable: true

四、封装发送邮件工具类

在发送邮件的代码中,通常会使用以下一些关键类来实现邮件发送功能:

  • JavaMailSender:这是一个高级接口,用于发送邮件。它抽象了底层邮件发送的具体实现细节,提供了一套方便的方法来发送各种类型的邮件。
  • SimpleMailMessage:用于构建简单的文本邮件消息。
  • MimeMessageMimeMessageHelpe:通常在处理复杂邮件时使用。MimeMessageHelper 是一个辅助类,用于更方便地创建和设置 MimeMessage 的各种属性
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Objects;

/*
 * 发送邮件工具类
 * */
@Component
public class EmailSenderUtil {
    // 你自己的邮箱服务器地址
    private static final String EMAIL_HOST = "xxxxxx@qq.com";

    @Autowired
    private JavaMailSender javaMailSender;

    // 1.发送纯文本格式邮件
    public void sendEmail(String to, String subject, String content) {
        // 创建 一个SimpleMailMessage 对象,用于构建邮件消息
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置发件人邮箱地址
        message.setFrom(EMAIL_HOST);
        // 设置收件人邮箱地址
        message.setTo(to);
        // 设置邮件主题
        message.setSubject(subject);
        // 设置邮件正文内容(纯文本)
        message.setText(content);
        // 发送邮件
        try {
            javaMailSender.send(message);
            System.out.println("邮件发送成功!");
        } catch (Exception e) {
            System.out.println("邮件发送失败!" + e.getMessage());
        }
    }

    // 2.发送 HTML 格式邮件
    // 发送HTML格式邮件的方法
    public void sendHtmlEmail(String to, String subject, String content) {
        try {
            // 创建一个 MimeMessage 对象,用于构建复杂邮件消息
            MimeMessage message = javaMailSender.createMimeMessage();
            // 使用 MimeMessageHelper 来简化设置 MimeMessage 属性,第二个参数 true 表示需要创建 multipart 类型的邮件
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(EMAIL_HOST);
            helper.setTo(to);
            helper.setSubject(subject);
            // 设置邮件内容和格式,第二个参数 true 表示内容为 HTML 格式
            helper.setText(content, true);
            // 发送邮件
            javaMailSender.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            System.out.println("邮件发送失败!" + e.getMessage());
        }
    }

    // 3.发送带附件的邮件
    public void sendAttachmentEmail(String to, String subject, String content, String filePath) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(EMAIL_HOST);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            // 创建 FileSystemResource 对象以加载附件文件
            FileSystemResource file = new FileSystemResource(new File(filePath));
            // 添加附件到邮件中,getFilename()用于获取文件名,Objects.requireNonNull 确保文件名不为 null
            helper.addAttachment(Objects.requireNonNull(file.getFilename()), file);
            // 发送邮件
            javaMailSender.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            System.out.println("邮件发送失败!" + e.getMessage());
        }
    }

    // 4.发送带图片的邮件
    public void sendImageEmail(String to, String subject, String content, String imgPath) {
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(EMAIL_HOST);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            // 创建 FileSystemResource 对象以加载附件文件
            FileSystemResource img = new FileSystemResource(new File(imgPath));
            // 添加图片到邮件中,getFilename()用于获取文件名,Objects.requireNonNull 确保文件名不为 null
            helper.addInline("img", img);
            javaMailSender.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            System.out.println("邮件发送失败!" + e.getMessage());
        }
    }
}

五、发送邮件

1 发送纯文本邮件

@SpringBootTest
public class ApplicationTests {
    @Autowired
    private EmailSenderUtil emailSenderUtil;

    @Test
    public void sendEmail() {
        String to = "xxxx@qq.com";// 你要发送的邮箱地址
        String subject = "文本邮件测试";
        String content = "这是一篇纯文本内容";
        emailSenderUtil.sendEmail(to, subject, content);
    }
}

测试结果:

在这里插入图片描述

2 发送 HTML 格式邮件

@SpringBootTest
public class ApplicationTests {
    @Autowired
    private EmailSenderUtil emailSenderUtil;

    @Test
    public void sendHtmlEmail() throws IOException {
        // 从资源目录加载 HTML 文件内容
        String to = "xxxx@qq.com";
        String subject = "HTMl邮件测试";
        // 创建一个 Resource 对象,用于加载 classpath 中的文件
        Resource resource = new ClassPathResource("index.html");
        // 读取资源文件的所有字节,并将其转换为字符串
        String htmlContent = new String(resource.getInputStream().readAllBytes());
        emailSenderUtil.sendHtmlEmail(to, subject, htmlContent);
    }
}

index.html 文件位置

在这里插入图片描述

测试结果:

在这里插入图片描述

3 发送带附件的邮件

@SpringBootTest
public class ApplicationTests {
    @Autowired
    private EmailSenderUtil emailSenderUtil;

   @Test
    public void sendAttachmentEmail() {
        String to = "xxxx@qq.com";
        String subject = "附件邮件测试";
        String content = "";
        String filePath = "D:\\test.txt";
        emailSenderUtil.sendAttachmentEmail(to, subject, content, filePath);
    }
}

测试结果:

在这里插入图片描述

4 发送带图片的邮件

@SpringBootTest
public class ApplicationTests {
    @Autowired
    private EmailSenderUtil emailSenderUtil;

      @Test
    public void sendImageEmail() {
        String to = "xxxx@qq.com";
        String subject = "图片邮件测试";
        String content = "<html><body><h1>图片演示</h1><br>
            <img style='width:100px;height:100px;' src='cid:img'/></body></html>";
        String imgPath = "D:\\autar.jpeg";
        emailSenderUtil.sendImageEmail(to, subject, content, imgPath);
    }
}

测试结果:

在这里插入图片描述

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot 提供了简单而强大的邮件发送功能。以下是使用 Spring Boot 发送邮件的基本步骤: 1. 配置邮件发送参数:在 `application.properties`(或 `application.yml`)文件中配置邮件发送相关的参数,例如邮件服务器地址、端口、认证信息等。例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password ``` 2. 创建一个邮件发送服务类:创建一个 Java 类,用于封装邮件发送的逻辑。可以使用 Spring Boot 提供的 `JavaMailSender` 类来发送邮件。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 3. 在需要发送邮件的地方调用邮件发送服务:在需要发送邮件的地方,注入邮件发送服务,并调用其方法发送邮件。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/send-email") public String sendEmail() { emailService.sendEmail("recipient@example.com", "Hello", "This is a test email"); return "Email sent"; } } ``` 以上是使用 Spring Boot 发送邮件的基本步骤。根据实际需求,你还可以使用模板引擎来发送 HTML 邮件,添加附件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的柠檬我的心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值