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程序员

posted @   道祖且长  阅读(432)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示