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里配置端口号:
到这里,一个简单的邮件发送就完成了。
由于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,看见页面显示,“邮件发送成功”。
到这里,一个带附件的邮件发送就完成了。