springboot--使用QQ邮箱

1️⃣ 前置条件

  1. QQ邮箱准备

    • 需要有一个 QQ 邮箱账号。

    • 登录邮箱,开启 SMTP 服务

      1. 进入邮箱 → 设置 → 账户 → 开启 "SMTP 服务"。

      2. 获取授权码(授权码即 SMTP 密码,用于第三方客户端登录,不是邮箱登录密码)。

    • SMTP 服务器信息:

      参数
      SMTP服务器 smtp.qq.com
      端口 465(SSL) / 587(TLS)
      是否需要身份验证
  2. 依赖

    • Spring Boot 需要引入邮件依赖:

      XML 复制代码
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter</artifactId>
              </dependency>
              <!-主要是这个-->
              <!--邮箱的jar-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-mail</artifactId>
              </dependency>
      
          </dependencies>

2️⃣ 配置邮箱信息

application.ymlapplication.properties 中配置:

application.yml 示例

java 复制代码
spring:

  mail:
    # 下面这个是QQ邮箱host , 企业邮箱 : smtp.exmail.qq.com
    host: smtp.qq.com
    #port  这个是固定的
    port: 465
    # 你的QQ邮箱
    username: 你的qq邮箱地址
    # 进入邮箱配置后得到的授权码
    password: 你获取到的授权码
    test-connection: true
    properties:
      mail:
        smtp:
          ssl:
            enable: true

说明

bash 复制代码
配置项	                                     作用
 spring.mail.host	                           邮件服务器地址
 spring.mail.port	                           SMTP 端口(SSL 465 / TLS 587)
 spring.mail.username	                       发件人邮箱账号
 spring.mail.password	                       SMTP 授权码
 spring.mail.test-connection	               启动时测试 SMTP 服务器连接
 spring.mail.properties.mail.smtp.ssl.enable   开启 SSL 安全连接

3️⃣ 发送邮件示例

3.1 使用 JavaMailSender 发送简单文本邮件

java 复制代码
@RequestMapping("/mail")
@RestController
public class MailDemoController {
    @Autowired
    private JavaMailSender javaMailSender;
    //发送普通文本
    @GetMapping("/txt")
    public String senderMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        // 发件人 你的邮箱
        message.setFrom("xxx@qq.com");
        // 接收人 接收者邮箱
        message.setTo(new String[]{"xxx@qq.com"});

        //邮件标题
        message.setSubject("邮箱标题");

        //邮件内容
        message.setText("11");

        javaMailSender.send(message);

        return "success";
    }

}

3.2 发送 HTML 邮件

java 复制代码
@RequestMapping("/mail")
@RestController
public class MailDemoController {
    @Autowired
    private JavaMailSender javaMailSender;
    //发送html
    @GetMapping("/html")
    public void sendHtmlMail() throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        //注意这里用的MimeMessageHelper helper并非MimeMessage message
        helper.setFrom("你的邮箱@qq.com");
        //你要发送人的
        helper.setTo(new String[]{"xxx@qq.com"});
        //邮件标题
        helper.setSubject("邮箱标题");
        //发送的内容
        String htmlContent = "<h1 style='color:blue'>欢迎使用QQ邮箱发送邮件</h1>"
                + "<p>这是一封 <b>HTML</b> 格式的邮件</p>"
                + "<a href='https://mail.qq.com'>点击跳转QQ邮箱</a>";
        //htmlContent是上面定义的发送内容
        helper.setText(htmlContent, true); // true 表示HTML
        javaMailSender.send(message);
    }
}

3.3 发送带附件邮件

java 复制代码
@RequestMapping("/mail")
@RestController
public class MailDemoController {
    @Autowired
    private JavaMailSender javaMailSender;
    //发送附件(也就是文件)
    @GetMapping("/file")
    public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException {
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
        //注意这里用的MimeMessageHelper helper并非MimeMessage message
        helper.setFrom("你的邮箱@qq.com");
        //你要发送人的
        helper.setTo(new String[]{"xxx@qq.com"});
        //邮件标题
        helper.setSubject("邮箱标题");
        helper.setText(content, true);
        //Java 里创建一个 File 对象
        File file = new File("文件路径");
        //添加附件
        helper.addAttachment(file.getName(), file);
        javaMailSender.send(message);
    }
}

4️⃣ 常见问题与注意事项

  1. 授权码必须使用 SMTP 授权码

    • QQ 邮箱登录密码无法直接用于 SMTP。
  2. 端口问题

    • 465 对应 SSL

    • 587 对应 TLS

    • 必须与配置一致,否则会报连接错误。

  3. 发送邮箱必须与 username 一致

    • 否则可能报 "550 Unauthorized" 错误。
  4. 防火墙与网络

    • 某些服务器会阻止 465/587 端口,需要确认防火墙开放。
  5. 发送大量邮件注意

    • QQ 邮箱对发送频率有一定限制(防止垃圾邮件)。