SpringBoot集成邮箱服务

1,添加核心依赖

<!-- 邮箱服务 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2,添加配置

spring:
  mail:
    host: 6.tcp.vip.cpolar.cn
    port: 10572
    username: xxx@loren.com
    password: 123456  # 使用应用专用密码
    default-encoding: UTF-8 # 配置邮件编码
    properties:
      mail:
        smtp:
          auth: false
          starttls:
            enable: false
          debug: true

3,在resources目录下创建templates目录,旗下创建模板email-template.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <body>
        <h1 th:text="${title}">Default Title</h1>
        <p th:text="${message}">Default Message</p>
    </body>
</html>

4,编写核心service代码

package org.example.service.service;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.extern.slf4j.Slf4j;
import org.example.model.req.EmailRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

@Service
@Slf4j
public class MailService {
    @Value("${spring.mail.username}")
    private String from;
    private final JavaMailSender mailSender;
    private final TemplateEngine templateEngine;
    public MailService(JavaMailSender mailSender, TemplateEngine templateEngine) {
        this.mailSender = mailSender;
        this.templateEngine = templateEngine;
    }
    public void testConnection() {
        try {
            ((JavaMailSenderImpl) mailSender).testConnection();
            log.info("邮件服务器连接成功");
        } catch (MessagingException e) {
            log.error("邮件服务器连接失败: {}", e.getMessage(), e);
        }
    }
    // 发送纯文本邮件
    public void sendSimpleMail(String to, String subject, String content) {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(to);
            message.setSubject(subject);
            message.setText(content);
            mailSender.send(message);
            log.info("邮件发送成功: 收件人={}, 主题={}", to, subject);
        } catch (Exception e) {
            log.error("邮件发送失败: 收件人={}, 主题={}, 错误={}", to, subject, e.getMessage(), e);
        }
    }
    // 发送HTML邮件(带模板)
    public void sendTemplateMail(EmailRequest request) {
        try {
            Context context = new Context();
            context.setVariable("title", request.getTitle());
            context.setVariable("message", request.getMessage());
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(request.getTo());
            helper.setSubject(request.getSubject());
            String htmlContent = templateEngine.process("email-template", context);
            helper.setText(htmlContent, true);
            mailSender.send(mimeMessage);
            log.info("HTML邮件发送成功: 收件人={}, 主题={}", request.getTo(), request.getSubject());
        } catch (MessagingException e) {
            log.error("HTML邮件发送失败: 收件人={}, 主题={}, 错误={}", request.getTo(), request.getSubject(), e.getMessage(), e);
        }
    }
}

编写核心实体类EmailRequest

package org.example.model.req;

import lombok.Data;

@Data
public class EmailRequest {
    private String to;
    private String subject;
    private String title;
    private String message;
}

5,编写controller

package org.example.controller;

import org.example.model.req.EmailRequest;
import org.example.service.service.MailService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/email")
public class MailController {
    private final MailService mailService;
    public MailController(MailService mailService) {
        this.mailService = mailService;
    }
    @GetMapping("/testConnection")
    public String testConnection() {
        mailService.testConnection();
        return "success";
    }
    @PostMapping("/send-email")
    public String sendEmail(@RequestBody EmailRequest request) {
        mailService.sendTemplateMail(request);
        return "Email sent successfully!";
    }
}

关于邮箱服务器配置有两种方式: 1,使用QQ邮箱 2,本地搭建邮箱服务

1,使用QQ邮箱服务 网页登录QQ邮箱 设置-》服务状态(开启)-》获取授权码(配置中的密码就是这里的授权码,不能用登录密码) 以上设置完之后的配置为如下:

spring:
  mail:
    host: smtp.qq.com
    port: 587
    username: xxx@qq.com
    password: xxx  # 使用应用专用密码
    default-encoding: UTF-8 # 配置邮件编码
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
          debug: true

2,搭建本地邮箱服务器 主要使用免费开源的hmailServer,下载地址: https://www.hmailserver.com/download 需要在安装hmailserver之前下载安装 .net framework2.0,否则会安装hmailserver失败,地址: https://www.microsoft.com/zh-cn/download/details.aspx?id=16614 下载安装完hmailserver后,设置domains,添加Accounts 就可以使用了 可以下载安装foxmail进行登录,地址: Foxmail for Mac 如果想要使用内网穿透工具,可以下载cpolar,地址: download下载 - cpolar 极点云官网 配置为:

spring:
  mail:
    host: 127.0.0.1
    port: 110
    username: hello@loren.com
    password: 123456  # 使用应用专用密码
    default-encoding: UTF-8 # 配置邮件编码
    properties:
      mail:
        smtp:
          auth: false
          starttls:
            enable: false
          debug: true

spring:
  mail:
    host: 6.tcp.vip.cpolar.cn
    port: 10572
    username: hello@loren.com
    password: 123456  # 使用应用专用密码
    default-encoding: UTF-8 # 配置邮件编码
    properties:
      mail:
        smtp:
          auth: false
          starttls:
            enable: false
          debug: true

参照文档: 使用hMailServer 搭建个人邮件服务器(小白教程) - Book鱼 - 博客园

测试请求参数body:

{
  "to": "2415612109@qq.com",
  "subject": "测试邮件",
  "title": "Hello-测试",
  "message": "你好,This is a test email from Spring Boot!"
}

要在Spring Boot集成邮箱验证码功能,你可以按照以下步骤进行操作: 1. 在项目的pom.xml文件中添加mail模块的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 这样就可以使用Spring Boot提供的邮件功能了。\[1\] 2. 在配置文件(application.properties或application.yml)中填写相关的邮箱配置,例如使用163邮箱: ```properties # Mail spring.mail.host=smtp.163.com spring[email protected] spring.mail.password=your-password spring.mail.default-encoding=UTF-8 [email protected] ``` 其中,`spring.mail.host`是SMTP服务器地址,`spring.mail.username`和`mail.from`是你的邮箱地址,`spring.mail.password`是你的邮箱授权码(不是邮箱密码)。你需要在相关邮箱设置中开启SMTP服务,并获取授权码。\[2\]\[3\] 3. 在你的代码中使用JavaMailSender发送邮件,可以通过注入`JavaMailSender`对象来实现: ```java @Autowired private JavaMailSender javaMailSender; public void sendVerificationCode(String email, String code) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email); message.setSubject("验证码"); message.setText("您的验证码是:" + code); javaMailSender.send(message); } ``` 以上代码示例中,`sendVerificationCode`方法用于发送验证码邮件,其中`email`是收件人邮箱地址,`code`是验证码内容。你可以根据实际需求自定义邮件的主题和内容。 这样,你就可以在Spring Boot集成邮箱验证码功能了。记得替换相关配置为你自己的邮箱信息。 #### 引用[.reference_title] - *1* *2* *3* [Spring Boot 整合163或者qq邮箱发送验证码](https://blog.csdn.net/hghjgkjn/article/details/125952509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱编程的Loren

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

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

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

打赏作者

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

抵扣说明:

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

余额充值