实现邮件发送
- 导入mail依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置application, qq授权码必须是发送者qq的授权码,获取方式很简单, 百度有详细步骤
spring.mail.username=321359027@qq.com
# password是qq授权码
spring.mail.password=XXXXXXX
spring.mail.host=smtp.qq.com
# qq需要配置ssl
spring.mail.properties.mail.smtp.ssl.enable=true
- 编写发送代码
- 由于SprigBoot的自动配置以及帮我们注册了JavaMailSenderImpl的Bean, 所以我们可以直接使用它
@Service
public class MailService {
@Autowired
private JavaMailSenderImpl sender;
public void sendSimpleMessage() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("XXXXXX@qq.com");
simpleMailMessage.setTo("XXXXXX@qq.com");
simpleMailMessage.setSubject("紧急通知");
simpleMailMessage.setText("开个玩笑,哈哈哈");
sender.send(simpleMailMessage);
System.out.println("[DEBUG]" + simpleMailMessage.getSubject() + ",发送成功");
}
public void sendMimeMessage() throws MessagingException {
MimeMessage mimeMessage = sender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setSubject("爽娃娃");
mimeMessageHelper.setText("<h style='color:red'></h>", true);
mimeMessageHelper.addAttachment("小哥哥好坏.png",
new File("C:\\Users\\Huawei\\Desktop\\QQ截图20201118160318.png"));
mimeMessageHelper.setFrom("XXXXXX@qq.com");
mimeMessageHelper.setTo("XXXXXX@qq.com");
sender.send(mimeMessage);
System.out.println("[DEBUG]" + mimeMessage.getSubject() + ",发送成功");
}
}
- 编写controller访问
@RestController
public class MailController {
@Autowired
private MailService service;
@RequestMapping("/send")
public String send() {
System.out.println("开始发送时间:" + new Date().toString());
service.sendSimpleMessage();
System.out.println("返回响应时间:" + new Date().toString());
return "Send OK";
}
@RequestMapping("/send2")
public String send2() {
System.out.println("开始发送时间:" + new Date().toString());
try {
service.sendMimeMessage();
} catch (MessagingException e) {
e.printStackTrace();
}
System.out.println("返回响应时间:" + new Date().toString());
return "Send OK";
}
}
- 测试, 运行项目, 访问路径controller
- 邮件发送成功, 但是我们通过DEBUG的时间发现耗时太长
- 我们使用异步任务对其进行优化
实现使用异步任务优化邮件发送
- 开启异步任务 @EnableAsync //开启异步任务
@SpringBootApplication
@EnableAsync
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 在发送邮件的方法上添加注解 @Async
@Async
public void sendSimpleMessage() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("321359027@qq.com");
simpleMailMessage.setTo("1604053140@qq.com");
simpleMailMessage.setSubject("紧急通知");
simpleMailMessage.setText("开个玩笑,哈哈哈");
sender.send(simpleMailMessage);
System.out.println("[DEBUG]" + simpleMailMessage.getSubject() + ",发送成功");
}
- 再次测试访问
- 这次邮件正常发送, 并且提高了用户体验
- 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。还有一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。还有就是邮件的发送,SpringBoot都给我们提供了对应的支持,我们上手使用十分的简单,只需要开启一些注解支持,配置一些配置文件即可!