愚人节专场Java实现定时发送小情话
Posted five小点心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了愚人节专场Java实现定时发送小情话相关的知识,希望对你有一定的参考价值。
首先,感谢大佬的帮助~附上大佬的博客以示尊敬https://blog.csdn.net/qq_38591577/article/details/128164308?spm=1001.2014.3001.5502
功能实现:
在名为愚人节,实为告白/情人节的日子里,怎么样才能引起TA的关注呢?不妨试着定时发送(土味)小情话来增进感情呢~
我的老婆们收到之后都开心的表示,不要捣鼓这些无聊的东西,不如抓紧去赚钱。
这是来自老婆的反馈:
咳咳,虽然被针对了,但是女人说不要那就是要(/▽\)
框架设计:
2.1 创建springboot项目
此处注意尽量不要使用springboot3.0.0,我这里用的是2.7.10。
2.2 pom依赖
<!-- hutool 依赖-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.3.2</version>
</dependency>
<!-- 邮件 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.4.3</version>
</dependency>
2.3 application.yml (配置文件)
spring:
mail:
host: smtp.qq.com #邮箱发送服务器
username: 181*******@qq.com #邮箱地址
password: abdsjszkazkjsad #获取邮箱第三方使用秘钥
protocol: smtp
properties.mail.smtp.port: 25 #端口
default-encoding: utf-8
she:
mail: 114*******@qq.com
mail2: 184*******@qq.com
mail3: 182*******@qq.com
2.4 DemoApplication启动类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication
public static void main(String[] args)
SpringApplication.run(DemoApplication.class, args);
2.5 SendMailService.java (接口)
package com.example.demo.service.impl;
import org.springframework.stereotype.Service;
@Service
public interface SendMailService
void sendMessage(String sub, String message);
String getLovePrattle();
String getWeather();
2.6 SendMail.java (接口实现类)
package com.example.demo.service.impl;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
@Component
public class SendMail implements SendMailService
@Resource
private JavaMailSender mailSender;
@Value("$spring.mail.username")
private String from;
@Value("$she.mail")
private String[] sheMail;
@Value("$she.mail2")
private String[] sheMail2;
@Value("$she.mail3")
private String[] sheMail3;
public void sendMessage(String subject,String message)
ArrayList<String[]> objects = new ArrayList<>();
objects.add(sheMail);
objects.add(sheMail2);
objects.add(sheMail3);
for (String[] object : objects)
try
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
helper.setFrom(from); //发送方邮件名
helper.setTo(object); //接收方邮件地址
helper.setSubject(subject); //邮件标题
helper.setText(message,true); //邮件内容,是否为html格式
mailSender.send(helper.getMimeMessage());
catch (javax.mail.MessagingException e)
e.printStackTrace();
@Override
public String getLovePrattle()
String result1= HttpUtil.get("https://api.lovelive.tools/api/SweetNothings");
System.out.println(result1);
return result1;
// 实时天气
@Override
public String getWeather()
StringBuffer sb = new StringBuffer();
String s = HttpUtil.get("https://devapi.qweather.com/v7/weather/now?location=101190113&key=f5fe849feaf24a60b54e6d6cb7062a8e");
JSONObject jsonObject = JSONUtil.parseObj(s);
System.out.println("时间为:"+jsonObject.get("updateTime"));
sb.append("<p>时间为:"+jsonObject.get("updateTime")+"<br>\\n");
System.out.println("详细天气请查看"+jsonObject.get("fxLink"));
sb.append("详细天气请查看"+jsonObject.get("fxLink")+"<br>\\n");
Object now = jsonObject.get("now");
JSONObject nowJson = JSONUtil.parseObj(now);
System.out.println("当前温度为"+nowJson.get("temp")+"℃");
sb.append("当前温度为"+nowJson.get("temp")+"℃"+"<br>\\n");
System.out.println("天气状况为"+nowJson.get("text"));
sb.append("天气状况为"+nowJson.get("text")+"<br>\\n");
System.out.println("风力等级"+nowJson.get("windScale")+"级");
sb.append("风力等级"+nowJson.get("windScale")+"级"+"<br>\\n");
System.out.println("能见度"+nowJson.get("vis")+"公里");
sb.append("能见度"+nowJson.get("vis")+"公里</p >");
String weater = sb.toString();
return weater;
2.7 SchedueTask.java (定时任务配置类)
package com.example.demo.config;
import com.example.demo.service.impl.SendMail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
@Configuration //主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 开启定时任务
public class ScheduleTask
@Resource
SendMail sendMail;
@Async
@Scheduled(cron = "0 */1 * * * ?")//每分钟发一次(这里是用的是cron表达式,可以上网查阅)
public void send()
// 土味情话
String one = sendMail.getLovePrattle();
// String weather = sendMail.getWeather();
sendMail.sendMessage("小点心",one);
总结:
试着实现了两个方法,一个调用天气,一个土味小情话。
当然,如果鱼塘里有好好多的好多鱼的话,也可以在配置文件里编辑多个邮箱,实现的时候for循环一下就可以了~~
QQ邮箱里的password一栏需要在QQ邮箱里进行设置。
由于我们配置的是SMTP,所以需要将其设置为打开
Docker 部署 _实现每日情话 定时推送(apscheduler)
由于最近工作比较忙,后续博客可能更新不及时,哈哈
前言:
由于python对于微信推送不够友好,需要扫码登录,短信接口需要RMB。我就想到了qq邮箱发送到好友,然而微信有qq邮箱提醒功能,就实现了我需要定时推送消息的需求。
import smtplib,requests from email.mime.text import MIMEText from email.utils import formataddr from apscheduler.schedulers.blocking import BlockingScheduler def send_mail(recipients,content): #收件人 内容 ret=True try: msg=MIMEText(content,‘plain‘,‘utf-8‘) msg[‘From‘]=formataddr(["每日一乐",‘396961930@qq.com‘]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 msg[‘To‘]=formataddr(["",recipients]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 msg[‘Subject‘]="开心每一天" # 邮件的主题,也可以说是标题 server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是465 server.login(‘396961930@qq.com‘, ‘自己的秘钥‘) # smtp秘钥 server.sendmail(‘396961930@qq.com‘,[recipients,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 server.quit()# 关闭连接 except Exception:# 如果 try 中的语句没有执行,则会执行下面的 ret=False ret=False return ret def get_lovelive_info(): ‘‘‘ 从土味情话中获取每日一句。 :return: str,土味情话 ‘‘‘ print(‘获取土味情话...‘) resp = requests.get("https://api.lovelive.tools/api/SweetNothings") if resp.status_code == 200: return resp.text + " " else: print(‘每日一句获取失败‘) return None def send(): send_mail(‘396961930@qq.com‘,get_lovelive_info()+" "+"(@Xcsg消息来自互联网)") send_mail(‘768158105@qq.com‘,get_lovelive_info()+" "+"(@Xcsg消息来自互联网)") send_mail(‘595829154@qq.com‘,get_lovelive_info()+" "+"(@Xcsg消息来自互联网)") send_mail(‘312161486@qq.com‘,get_lovelive_info()+" "+"(@Xcsg消息来自互联网)") if __name__ == "__main__": #定时任务 scheduler = BlockingScheduler() scheduler.add_job(send, ‘cron‘, hour=‘7,22‘, minute=‘0‘) scheduler.start()
dokcerfile
FROM python:3.7 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY requirements.txt /usr/src/app/ RUN pip install -r /usr/src/app/requirements.txt RUN rm -rf /usr/src/app COPY . /usr/src/app CMD [ "python3", "./message.py"]
requirements:
apscheduler
requests
打包好运行如下:
***** 里面有时区问题坑,注意
效果如下:
以上是关于愚人节专场Java实现定时发送小情话的主要内容,如果未能解决你的问题,请参考以下文章
Docker 部署 _实现每日情话 定时推送(apscheduler)