使用Shell脚本获取雨天并发送通知邮件

使用Shell脚本获取雨天并发送通知邮件

阅读量:
评论数:

使用Shell脚本获取雨天并发送通知邮件

介绍

查询第二天会不会下雨,如果下雨就用msmtp发信提醒,不下雨就不发信。

学了点linux命令行,配合chatgpt整了个小玩意,好像还有那么一丢丢用处😇

准备

  1. 第三方SMTP服务:如QQ邮箱、阿里邮箱、网易邮箱、Gmail等,开启smtp服务就自己搞定吧,很简单。

  2. msmtp

  3. 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里看更好

天气通知.webp

Built with Halo
主题 Stack Jimmy 设计 • 由Jiewen移植
📑共水了 93篇文章.
载入天数... 载入时分秒...
RSS Icon RSS订阅