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 发送定制模板的邮件内容。

相关推荐
MZ_ZXD00131 分钟前
【关注可白嫖源码】--课程设计--毕业设计-- 29210 Vue.js 3+Springboot中药材基本信息与图片查询系统
javascript·spring boot·课程设计·毕设·大作业·程序开发·毕设代做
弹简特37 分钟前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot
斯内普吖38 分钟前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
wang_shu_mo_ran1 小时前
Spring IoC和DI概念篇
java·后端·spring
Cheney Pan1 小时前
第4篇 Spring Boot 应用监控:Micrometer 与 JVM 指标
jvm·spring boot·后端·prometheus
阿钱真强道1 小时前
30 嵌入式操作系统 | 上位机界面:Flask 网页显示 + 控制闭环
后端·python·flask
小狼154541 小时前
拼多多订单数据导出 CSV 实战:接口分页、字段平铺与 5 个数据坑,多多开票助手
java·前端·javascript
Joe_Wang51 小时前
【从0到1学习JVM · 25】同样都要停顿所有线程,Parallel比Serial到底强在哪
java·jvm·学习·垃圾回收
wuminyu1 小时前
JVM虚拟线程的底层实现原理分析
java·linux·c语言·jvm·c++
念何架构之路1 小时前
go-grpc服务端调用
开发语言·后端·golang