spring boot实现发送邮件以及群发邮件
spring boot实现发送邮件以及群发邮件
2021年上班第一天,老板就让我写一个功能,要求将项目中的设备在线情况,发送邮件到老板和甲方老板的邮箱里,然后我花了正好一天的时间,将功能写了出来,如下
要想通过软件自动发送邮件,就需要一些前置步骤,以qq邮箱示例
1、在qq邮箱开通POP3/SMTP服务,很快可以弄好
点击设置
点击账户
开启SMTP服务,如图,我是已经点击开启的状态
点击生成授权码,需要发送短信,按他要求就可以,也很快,将授权码保存下来,待会要用
接下来就是要开始写代码了
可以先用一个demo测试,生成一个Maven项目先
除了springboot的一些基本依赖以外,只需要再加一个mail的依赖就可以,如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
然后我们可以写一个定时任务,或者写一个接口,我这里是写了一个定时任务,都一样
接下来就分两种情况了,一种是单独发送,另一种是群发(其实我感觉直接群发就可以,又简单,又可以兼容群发和单独发送两种情况)
如果是单独发送
先在application.properties中进行如下配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
#上一步中开通SMTP服务的邮箱账号
spring.mail.username=xxxxxxxxxx@qq.com
#这里是刚刚生成的授权码,不是qq邮箱密码!!!
spring.mail.password=xxxxxxxxxx
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.ssl.enable=true
然后再写一个接口吧
/**
* @Author YuanChangLiang
* @Date 2021/2/20 14:52
*/
@RestController
public class TestController {
@Autowired
private JavaMailSender javaMailSender;
@RequestMapping("/send")
public String send(){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("3020651945@qq.com");
simpleMailMessage.setTo("2500819750@qq.com");
simpleMailMessage.setSubject("今日天气");
simpleMailMessage.setText("当前时间"+new Date()+",目前大雨");
javaMailSender.send(simpleMailMessage);
return "已执行";
}
}
解释一下代码:From是发送人,To是接收人,Subject是邮箱标题,Text是邮箱内容
调用接口,结果如下
如果是群发
我喜欢这个,不用配置文件,而且同时兼容群发和单个发送,如下
依赖同上,写一个定时任务,如下
#每天10点55自动执行
@Scheduled(cron = "0 55 10 * * ?")
public void checkDeviceStatus2() {
//直接new出来,不使用自动注入
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("smtp.qq.com");
//这里是授权码,授权码,自己的授权码!!!!
javaMailSender.setPassword("xxxxxxxxxxxxxxx");
javaMailSender.setPort(587);
javaMailSender.setProtocol("smtp");
//开通SMTP的邮箱
javaMailSender.setUsername("xxxxxxxxx@qq.com");
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
// 每日定时执行
// ============================================
这些是业务代码,这里删除了,不给看O(∩_∩)O哈哈~
// ============================================
log.info("邮件开始发送");
//接收人
String[] users = {"xxxxxxxx@qq.com","xxxxxxxxx@qq.com"};
simpleMailMessage.setFrom("xxxxxxxxxxx@qq.com");
simpleMailMessage.setTo(users);
simpleMailMessage.setSubject("设备在线情况报告");
StringBuilder stringBuilder = new StringBuilder();
// ============================================
这些是业务代码,这里删除了,不给看O(∩_∩)O哈哈~
// ============================================
//获取当前时间
LocalDateTime currentTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String format = currentTime.format(dateTimeFormatter);
simpleMailMessage.setText("当前时间:"+ format + "\n\n" + "项目名称:在线设备数量/已有经纬度设备数量" + "\n" + stringBuilder.toString());
javaMailSender.send(simpleMailMessage);
log.info("邮件已经发送");
}
结果如下
以上代码加上业务代码,我已经提交到了线上,是最终代码了
以上
-----我是“道祖且长”,一个在互联网苟且偷生的Java程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~