Spring Boot – 通过 SMTP 发送电子邮件

2023-10-26 14:02:54 浏览数 (2)

Spring Boot – 通过 SMTP 发送电子邮件

Spring Boot提供了使用JavaMail库通过 SMTP 发送电子邮件的功能。在这里,我们将说明开发可用于发送带或不带附件的电子邮件的 Restful Web 服务的分步指南。为了开始执行这些步骤,我们首先使用 Spring Initializer 创建一个 Spring Boot 项目。

执行:

步骤1:

pom.xml中添加spring-boot-starter-mail依赖

代码语言:javascript复制
<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接口定义两个方法:

  1. String sendSimpleMail(EmailDetails详细信息):此方法可用于向所需收件人发送简单的文本电子邮件。
  2. 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收到的邮件如下:

0 人点赞