SpringBoot 依赖之Java Mail Sender邮件发送

Java Mail Sender

  • 依赖名称: Java Mail Sender
  • 功能描述: Send email using Java Mail and Spring Framework's JavaMailSender.
  • 使用 Java Mail 和 Spring Framework 的 JavaMailSender 发送电子邮件。
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

写在前面,站在巨人的肩膀上才能站的更高,看的更远。重复造轮子的事我们不干。

0. 源码已开源,可以免费下载

码云gitee: https://gitee.com/CoderChange/springboot-all-dependencies

1. 创建 Spring Boot 项目

  1. 打开 IntelliJ IDEA 并选择 "New Project"
  2. 在左侧的菜单中选择 "Spring Initializr"
  3. 配置项目的基本信息:
    • Group: com.dependencies
    • Artifact: java-mail-sender
    • Name: java-mail-sender
    • Type: Maven
    • Language: Java
    • Packaging: Jar
    • Java Version: 17
  4. 点击 "Next"
  5. "Dependencies" 页面,添加以下依赖:
    • Spring Web - 用于创建 Web 应用程序。
    • Spring Boot Starter Mail - 用于发送电子邮件。
  6. 点击 "Next" ,然后点击 "Finish" 来创建项目。

上面的步骤前面几篇文章也有截图可以参考,这里不再赘述。下面是项目创建完成之后的项目架构目录

2. 配置项目的依赖

IDEA 会自动生成一个 pom.xml 文件并添加你选择的依赖。确保 pom.xml 包含以下依赖:

xml 复制代码
<properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
      	<!-- Spring Boot Starter Mail -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
       <!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3. 配置邮件发送属性

src/main/resources 目录下创建 application.properties 文件,并添加以下配置以设置邮件服务器属性(例如使用 QQmail SMTP 服务器):

properties 复制代码
#我这边用的是QQ邮箱作为邮件发送服务器
spring.mail.protocol=smtp
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=123456789@qq.com
#QQ邮箱 设置邮件服务会生成临时密码
spring.mail.password=邮件服务器临时密码
spring.mail.test-connection=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
# 这个是debug模式,启动过程中会打印出邮箱验证的日志
spring.mail.properties.mail.debug=true

这幅图就是run启动过程中 邮件服务器的自检操作,包括auth login认证结果都会打印,一般在开发环境调试时打开spring.mail.properties.mail.debug=true,生产环境默认关闭 spring.mail.properties.mail.debug=fasle

4. 创建邮件服务类

创建一个服务类用于发送电子邮件。这个是邮件的核心服务,后期可以扩展邮件内容为文本、附件、定制模板等多种呈现形式的邮件公共服务。

java 复制代码
package com.dependencies.javamailsender.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

/**
 * @author zhizhou   2024/7/25 16:39
 */
@Service
public class EmailService {
    
    @Autowired
    private JavaMailSender javaMailSender;
    
    public void sendSimpleEmail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
      	//这几个参数必填
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        message.setFrom("你的发件邮箱@xx.com");
    
        try {
            javaMailSender.send(message);
        } catch (MailException e) {
            e.printStackTrace();
            //这里捕获一下异常,调试时可以知道具体的错误原因。
        }
    }   
}

5. 创建控制器

创建一个控制器类来触发发送电子邮件的操作,我们先简单实现这个控制器行为,暂时将入参变量固定以值来快速调试。

java 复制代码
package com.dependencies.javamailsender.controller;

import com.dependencies.javamailsender.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author zhizhou   2024/7/25 16:40
 */
@RestController
public class EmailController {
    
    @Autowired
    private EmailService emailService;
    
    @GetMapping("/sendEmail")
    public String sendEmail() {
        String to = "收件邮箱@oo.com";
        String subject = "测试邮件";
        String text = "你好,这是测试邮件";
        emailService.sendSimpleEmail(to, subject, text);
        return "邮件发送成功!";
    }
    
}

6. 创建主应用程序类

创建主应用程序类并注解 @SpringBootApplication:补充说一下, IDEA在创建项目的时候这个文件是已经生成好的,一般不需要额外创建。

java 复制代码
package com.dependencies.javamailsender;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JavaMailSenderApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(JavaMailSenderApplication.class, args);
    }
    
}

7. 运行项目

  1. 在 IntelliJ IDEA 中,找到主应用程序类 EmailDemoApplication
  2. 右键点击该类,并选择 "Run 'EmailDemoApplication'" 来启动项目。

8. 测试发送电子邮件

启动 Spring Boot 应用程序后,打开浏览器并访问以下 URL 来测试发送电子邮件:

复制代码
http://localhost:8080/sendEmail

总结

通过以上步骤,我们在 IntelliJ IDEA 中创建了一个 Spring Boot 项目,添加了 Java Mail Sender 依赖,并配置了发送电子邮件的服务。这个示例项目可以帮助你快速上手并实现邮件发送功能。确保在 application.properties 文件中正确配置了邮件服务器属性(例如 QQMail 的 SMTP 服务器),可以根据你的实际需求调整配置。

如果有学习过程中遇到问题,可以留言讨论,看到后,我会第一时间予以回复。

这里实现的基本的文本级别的邮件内容,后期会更新 结合模板引擎Thymeleaf 发送定制模板的邮件内容。

相关推荐
devlei35 分钟前
从源码泄露看AI Agent未来:深度对比Claude Code原生实现与OpenClaw开源方案
android·前端·后端
pshdhx_albert1 小时前
AI agent实现打字机效果
java·http·ai编程
沉鱼.442 小时前
第十二届题目
java·前端·算法
努力的小郑2 小时前
Canal 不难,难的是用好:从接入到治理
后端·mysql·性能优化
赫瑞3 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
Victor3563 小时前
MongoDB(87)如何使用GridFS?
后端
Victor3563 小时前
MongoDB(88)如何进行数据迁移?
后端
小红的布丁3 小时前
单线程 Redis 的高性能之道
redis·后端
GetcharZp3 小时前
Go 语言只能写后端?这款 2D 游戏引擎刷新你的认知!
后端
周末也要写八哥4 小时前
多进程和多线程的特点和区别
java·开发语言·jvm