目录
参考文章:
发送邮件
- 邮件的创建和发送只需要使用 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)
JavaMail
是一个用于发送和接收电子邮件的Java API,它提供了丰富的功能和灵活的配置选项,可以与各种邮件服务器进行通信。JavaMail API包含了多个类和接口,如Session、Message、Transport、Store等。
JavaMailSender
是Spring框架提供的一个用于发送邮件的工具类,它封装了JavaMail API,并提供了更加简洁的API接口和更加易用的配置选项。JavaMailSender使用JavaMail API建立与邮件服务器的连接,并使用SMTP协议来发送邮件。
JavaMail和JavaMailSender都可以用来发送邮件,但是它们在使用方式和功能上有所不同。JavaMail提供的API比较底层,需要手动配置邮件服务器信息和构造邮件内容等,使用起来相对复杂。
而JavaMailSender则是在JavaMail的基础上进行了封装,提供了更加易用的API接口和自动化的配置选项,使得发送邮件变得更加简单和便捷。
在Spring Boot应用程序中,推荐使用JavaMailSender来发送邮件,因为它可以方便地集成到Spring Boot框架中,并且使用起来非常简单。
新建一个SpringBoot项目
项目结构:
pom.xml
主要是引入mail依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com</groupId>
<artifactId>springboot_JavaMail</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_JavaMail</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
- 特别注意SSL验证,一定要开启,开启SSL验证可以提高邮件传输的安全性,并保护您的邮件内容不受未经授权的访问
- 下列信息大多在开启邮箱的SMTP服务时,配置说明里有
# 下列信息大多在开启邮箱的SMTP服务时,配置说明里有
# SMTP服务器端口号
spring.mail.port=465
# 提供发送邮件服务的邮箱账号
spring.mail.username=3328518414@qq.com
# 提供发送邮件服务的邮箱授权码
spring.mail.password=xxx
# SMTP服务器主机地址
spring.mail.host=smtp.qq.com
# 是否开启权限验证
spring.mail.properties.mail.smtp.auth=false
# 是否开启SSL验证
spring.mail.properties.mail.smtp.ssl.enable=true
# 是否开启debug模式
spring.mail.properties.mail.debug=true
SpringEmailService
- SpringEmailService是一个单独的类,它实现了邮件发送功能
package com.springboot_JavaMail;
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 SpringEmailService {
@Autowired
private JavaMailSender javaMailSender;
private String subject = "JavaMailSender发送邮件测试";
private String text = "SpringBoot使用JavaMailSender发送邮件";
private String to = "3328518414@qq.com";
private String from = to;
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject(subject); // 主题
message.setText(text); // 内容
message.setTo(to); // 收件人
message.setFrom(from); // 发件人
javaMailSender.send(message); // 发送邮件
System.out.println("邮件发送成功!");
}
}
SpringbootJavaMailApplication
- 可以在启动类中创建SpringEmailService类的实例并调用其sendSimpleMail()方法
- 在这个示例中,我们注入了SpringEmailService类的实例,并在run()方法中调用了sendSimpleMail()方法。由于CommandLineRunner接口的存在,run()方法将在启动应用程序时自动执行。
package com.springboot_JavaMail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootJavaMailApplication implements CommandLineRunner {
@Autowired
private SpringEmailService springEmailService;
public static void main(String[] args) {
SpringApplication.run(SpringbootJavaMailApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
springEmailService.sendSimpleMail();
}
}
启动项目,发送成功
项目总结
- 在实际开发中,一般会把邮件发送封装成一个工具类,然后再配置一个只发送邮件的邮箱,最后直接调用工具类完成邮件的发送