Spring Boot – 通过 SMTP 发送电子邮件
Spring Boot提供了使用JavaMail库通过 SMTP
发送电子邮件的功能。在这里,我们将说明开发可用于发送带或不带附件的电子邮件的 Restful Web 服务的分步指南。为了开始执行这些步骤,我们首先使用 Spring Initializer 创建一个 Spring Boot 项目。
执行:
步骤1:
在pom.xml
中添加spring-boot-starter-mail依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
此依赖项是使用JavaMail 的入门,可以视为 Spring 框架的电子邮件发送支持
步骤 2:
使用Gmail SMTP服务器所需的配置设置Application.properties文件。
代码语言:javascript复制spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=<SMTP 服务器的登录用户>
spring.mail.password=<SMTP服务器的登录密码>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
用于登录 Gmail 帐户的 Gmail ID 可以作为用户名提供。对于密码生成,需要为您的帐户启用两步验证,如下所示:
接下来,需要创建 AppPassword
步骤 3:创建EmailDetails类,其中包含 收件人、msgBody、主题和附件等字段。
代码语言:javascript复制// 用于说明 EmailDetails 类的 Java 程序
package com.SpringBootEmail.Entity;
// Importing required classes
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
// Annotations
@Data
@AllArgsConstructor
@NoArgsConstructor
// Class
public class EmailDetails {
// Class data members
private String recipient;
private String msgBody;
private String subject;
private String attachment;
}
步骤4:
创建接口EmailService并实现服务层的类EmailServiceImpl 。
EmailService接口定义了两个方法:
- String sendSimpleMail(EmailDetails详细信息):此方法可用于向所需收件人发送简单的文本电子邮件。
- String sendMailWithAttachment(EmailDetails详细信息):此方法可用于将电子邮件连同附件一起发送给所需的收件人。
接口和服务实现类如下示例所示:
文件:EmailService.java
代码语言:javascript复制// Java程序来说明创建服务接口
package com.SpringBootEmail.service;
// 导入需要的类文件
import com.SpringBootEmail.Entity.EmailDetails;
// 定义接口
public interface EmailService {
// 方法用来发送邮件
String sendSimpleMail(EmailDetails details);
// 用来发送附件的方法
String sendMailWithAttachment(EmailDetails details);
}
这里使用 JavaMail API的JavaMailSender接口
要发送带有附件的更复杂的电子邮件,可以使用MimeMessage 。MimeMessageHelper用作MimeMessage的辅助类,用于添加发送邮件所需的附件和其他详细信息。
文件:EmailServiceImpl.java
代码语言:javascript复制// Java程序来说明创建服务实现类
package com.SpringBootEmail.service;
// 导入需要的类文件
import com.SpringBootEmail.Entity.EmailDetails;
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
// 注解
@Service
// Class
// 实现 EmailService 接口
public class EmailServiceImpl implements EmailService {
@Autowired private JavaMailSender javaMailSender;
@Value("${spring.mail.username}") private String sender;
// 发送邮件
public String sendSimpleMail(EmailDetails details)
{
// try 用来捕获异常
try {
// 创建一个简单的信息
SimpleMailMessage mailMessage
= new SimpleMailMessage();
// 设置必要的信息
mailMessage.setFrom(sender);
mailMessage.setTo(details.getRecipient());
mailMessage.setText(details.getMsgBody());
mailMessage.setSubject(details.getSubject());
// 发送邮件
javaMailSender.send(mailMessage);
return "Mail Sent Successfully...";
}
// 捕获异常
catch (Exception e) {
return "Error while Sending Mail";
}
}
// 发送带附件的邮件
public String
sendMailWithAttachment(EmailDetails details)
{
// 创建 message
MimeMessage mimeMessage
= javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper;
try {
// 设置发送附件的相关参数
mimeMessageHelper
= new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom(sender);
mimeMessageHelper.setTo(details.getRecipient());
mimeMessageHelper.setText(details.getMsgBody());
mimeMessageHelper.setSubject(
details.getSubject());
// 添加附件
FileSystemResource file
= new FileSystemResource(
new File(details.getAttachment()));
mimeMessageHelper.addAttachment(
file.getFilename(), file);
// 发送邮件
javaMailSender.send(mimeMessage);
return "Mail sent Successfully";
}
// 捕获异常
catch (MessagingException e) {
// 显示错误信息
return "Error while sending mail!!!";
}
}
}
第 6 步:
运行 Spring Boot 应用程序并点击http://localhost:8080/sendMail
发送一封简单的电子邮件
Gmail收到的邮件如下:
第 7 步:
运行 Spring Boot 应用程序并点击http://localhost:8080/sendMailWithAttachment
以发送带有附件的电子邮件。
Gmail收到的邮件如下: