sbt中使用JavaMailSender发送邮件

Spring提供了非常好用的JavaMailSender接口实现邮件发送。

简单实现

在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖:

<!--引入发送邮件的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

如其他自动化配置模块一样,在完成了依赖引入之后,只需要在application.properties中配置相应的属性内容。

下面以QQ邮箱为例,在application.properties中加入如下配置(注意替换发件人邮箱号和密码):

#发件人邮箱
spring.mail.username=用户名
#邮箱密码(授权码)
spring.mail.password=密码
#邮箱主机
spring.mail.host=smtp.qq.com
#配置安全连接
spring.mail.properties.mail.smtp.ssl.enable=true

通过写个controller控制器来实现发送一封简单邮件:

@RestController
public class HelloSbtController {
@Autowired
JavaMailSenderImpl mailSender;
@GetMapping("/sendEmail")
public String sendEmail() {
//设置邮件信息
SimpleMailMessage message = new SimpleMailMessage();
  //主题
message.setSubject("一封简单邮件");
  //内容
message.setText("使用SpringBoot发送一封简单邮件");
        //收件人
message.setTo("xxxxxxxxx@qq.com");
//发件人
message.setFrom("xxxxxxxxx@qq.com");

//发送邮件
mailSender.send(message);

return "邮件发送成功";
}

运行代码,在浏览器地址栏里输入localhost:8088/sendEmail,看见页面显示,“邮件发送成功”。

(注意:要先在application.properties里配置端口号:

server.port=8088

到这里,一个简单的邮件发送就完成了。

由于Spring Boot的starter模块提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。

进阶使用

在上例中,我们通过使用SimpleMailMessage实现了简单的邮件发送,但是实际使用过程中,我们还可能会带上附件等。这个时候我们就需要使用MimeMessage来设置复杂一些的邮件内容。

发送附件

这里使用配置文件来实现发送邮件,封装邮件功能

创建一个邮件实体类(@DATA 这个注解需要在pom.xml中加入lombok依赖):

/**
* @Auther: Administrator
* @Date: 2021年 05月22日 16:56
* @Description: 邮件实体类
*/
@Data
@Component
@ConfigurationProperties(prefix = "email")
public class Email {
// 邮件主题
private String subject;
// 内容
private String content;
// 发件人
private String from;
// 收件人
private String to;
// 附件地址
private String filePath;

}

 

 

创建一个EmailUtil工具类:

/**
* @Auther: Administrator
* @Date: 2021年 05月22日 17:24
* @Description: 发送邮件工具类
*/
public class EmailUtil {
public static void sendMail(JavaMailSender javaMailSender,Email email) throws MessagingException {
// 使用JavaMail的MimeMessage,支付更加复杂的邮件格式和内容
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// 创建MimeMessageHelper对象,处理MimeMessage的辅助类
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
// 使用辅助类MimeMessage设定参数
// 收件人
messageHelper.setTo(email.getTo());
// 发件人
messageHelper.setFrom(email.getFrom());
// 邮件主题
messageHelper.setSubject(email.getSubject());
// 邮件内容
messageHelper.setText(email.getContent());
// 获取附件路径
FileSystemResource file = new FileSystemResource(new File(email.getFilePath()));
// 获取附件名
String fileName = email.getFilePath().substring(email.getFilePath().lastIndexOf(File.separator));
// 添加附件
messageHelper.addAttachment(fileName, file);
// 发送邮件
javaMailSender.send(mimeMessage);
}
}
 

 

在上面的controller中加入如下方法(通过MimeMessageHelper来发送一封带有附件的邮件):

@Autowired
private Email email;
@Resource
private JavaMailSenderImpl javaMailSender;
@GetMapping("/sendEmail")
public String sendEmail() throws MessagingException {
EmailUtil.sendMail(javaMailSender, email);
return "邮件发送成功";
}

 

创建一个配置文件application.yml(它与application.properties互补,注意格式),填上我们需要发送的邮件相关内容:

email:
subject: (邮件主题)
content: (邮件内容)
from: (发件人)
to: (收件人)
filePath: (附件地址)

 

运行代码,在浏览器地址栏里输入localhost:8088/sendEmail,看见页面显示,“邮件发送成功”。
到这里,一个带附件的邮件发送就完成了。

上一篇:邮箱发送部分相关代码


下一篇:springboot使用mail提示没有该类型的bean