使用Shell脚本获取雨天并发送通知邮件
介绍
查询第二天会不会下雨,如果下雨就用msmtp发信提醒,不下雨就不发信。
学了点linux命令行,配合chatgpt整了个小玩意,好像还有那么一丢丢用处😇
准备
第三方SMTP服务:如QQ邮箱、阿里邮箱、网易邮箱、Gmail等,开启smtp服务就自己搞定吧,很简单。
msmtp
mutt
开始
1.配置发信邮箱
先安装msmtp
apt update
apt install msmtp
编辑msmtp配置文件,我的路径在root,以QQ邮箱为例
vim .msmtprc #nano啥的都行
account default
auth login
host smtp.qq.com #这里不是QQ邮箱的话要改
port 465
from 你的邮箱
user 你的邮箱
password dwhgauighdu # QQ邮箱这里是授权码,不是QQ密码
tls on
tls_certcheck off
tls_starttls off
logfile /root/.msmtp.log
为了安全将权限改为600,即拥有者可读写,其他人不可读写执行。
chmod 600 .msmtprc
再添加一个.msmtp.log文件存放日志
> .msmtp.log
安装mutt
apt install mutt
编辑mutt配置文件
vim .muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="MJ" # 昵称随便改
set from=发信邮箱
set envelope_from=yes
set charset="utf-8" # 这行加下一行保证中文消息不会出现乱码
set rfc2047_parameters=yes
测试下能不能发送
echo "明天可能会下雨,带把伞吧" | mutt -s "天气通知" 收信邮箱
3.编辑shell脚本
vim weather.sh
#!/bin/bash
# 获取 wttr.in 网站的数据
weather=$(curl -s https://wttr.in/yaohai?lang=zh-cn | sed -n '22p')
# 判断 weather 中是否包含 "雨" 字符串
if [[ $weather == *"雨"* ]]; then
# 如果包含,则发送邮件通知
echo "明天可能会下雨,带把伞吧" | mutt -s "天气通知" 收信邮箱
fi
我这里最近没雨,以福州为例,https://wttr.in/fuzhou?lang=zh-cn,可以看今天到后天共3天的天气,我只需要知道第二天有没有雨,一行一行数了下,打印第22行判断是否包含“雨”这个字就行,有雨就发邮件,没雨就不动。
https://wttr.in/后面改为你自己的地区拼音,省市县都可以,想要获取特定位置的天气信息?
4.crontab自动任务
crontab -e
在每天晚上8点自动运行任务
0 20 * * * /root/weather.sh
效果
凑合着用吧😇收到通知直接去天气app里看更好