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

Spring Boot与Redis结合实现抢红包雨功能的设计可以分为以下几个步骤: 1. **活动创建**[^1]: 在活动开始前25分钟,通过Spring Boot的后台服务创建活动,并将相关信息如总金额、活动时间等存储在Redis中,RedisKey可能类似于`activity:start_time`和`activity:total_amount`。 ```java // 创建活动并保存至Redis String activityId = createActivity(totalAmount, startTime, redis); ``` 2. **用户进入/离开活动房间**: 用户访问活动页面时,验证他们是否在活动期内。RedisKey可以用来跟踪实时人数,如`activity:room:users`。 3. **发红包雨**: 到达预设时间,后台触发红包雨,通过Redis发布消息通知前端发送小红包,RedisKey如`activity:rain:start`。 4. **用户抢红包**: 用户尝试抢红包时,检查Redis中的剩余红包列表,更新用户信息(如`user:redpacket`)和红包状态。 5. **红包结果通知**: 抢到红包后,更新用户信息,设置剩余金额,并返回结果到前端;未抢到则记录失败原因。 6. **红包雨结束**: 活动结束时,删除相关Redis Key,如`activity:end`,并统计总金额、参与人数等信息。 7. **查询抢到金额**: 用户请求查看自己的抢到金额时,从Redis或数据库中查找对应用户信息。 8. **活动总结**: 提供接口计算本次红包雨的总金额、参与人数、抢走金额等,并更新到Redis或数据库。 相关问题--: 1. 如何在Spring Boot实现Redis的消息发布和订阅? 2. Redis中如何设计数据结构来存储和管理红包信息? 3. 如何保证用户抢红包的并发处理和公平性?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值