环境:局域网、ubuntu20.4、宝塔

一、安装服务环境

1、安装ssmtp服务

sudo apt-get install ssmtp mailutils

发送邮件需要有mailutils基础库,ssmtp库可以进一步选择发送人,收件人,邮件主题,邮件内容等。

2、开通邮箱smtp服务

需要开通发件人邮箱的smtp服务,无论是qq邮箱还是163邮箱等都可以直接开通,我选择的是qq邮箱,开通后即可获得邮箱账号的smtp的授权码,为一串英文乱码。

3、配置ssmtp

3.1、设置ubuntu发件人信息

首先更改文件/etc/ssmtp/ssmtp.conf,编辑器选择自己常用的,我用的是vim

sudo vim /etc/ssmtp/ssmtp.conf

进入文件后默认显示如下:

即mailhub修改为qq邮箱的smtp服务器和端口,smtp.qq.com:465,如果发件人使用的是163邮箱,则163邮箱的服务器和端口自行百度,可能是smtp.163.com:465;

hostname保持不变;

接着输入:

UseTLS=Yes
root=*********@qq.com
AuthUser=*********
AuthPass=******************

root后的邮箱为发件人邮箱,AuthUser后为发件人账号,即邮箱去掉后缀(例如@qq.com),AuthPass后为之前申请所得的smtp授权码。

保存退出(:wq)

3.2、配置ssmtp用户使用权限
即配置允许哪个ubuntu用户可以使用发件人邮箱发送邮件。

更改文件/etc/ssmtp/revaliases:

sudo vim /etc/ssmtp/revaliases

打开默认为:

在下方添加如下:

root:*********@qq.com:smtp.qq.com:465
lab532:*********@qq.com:smtp.qq.com:465

即格式为:用户:邮箱:smtp.qq.com:465,163邮箱更改对应位置即可。

这样配置即允许root用户和指定用户(如我的为lab532)使用ssmtp服务发送邮件。

ssmtp配置完成。

3.3、简单测试

echo "hello world" | mail -s "title" *********@163.com

输入上述命令,后面邮箱为收件人邮箱,可以任意指定,收到邮件,测试成功。

二、设置脚本发送

编辑脚本

root用户运行报错

权限问题,需要在非管理员权限下运行

以ubuntu20.4+宝塔环境为例

默认管理员为www,首先在宝塔面板的定时任务里添加

sudo -u www /data/wwwroot/ip/ip.sh

然后需要在执行文件里添加sudo -u www

#!/bin/bash
sudo -u www
dirfile='/data/wwwroot/ip/ip_change'
new_ip=`curl https://saas.1-c.cn/ip/` #获取新公网ip
mail_user=2533059222@qq.com #接收收邮件邮箱
mail_subject="新IP:$new_ip,及时处理!" #邮件主题
log="/data/wwwroot/ip/tool.log"
datetime=`date '+%Y-%m-%d %H:%M:%S'`
#判断文件是否存在
if [ ! -f "$dirfile" ]; then
touch "$file"
echo "1.1.1.1" > $dirfile
fi
#判断new_ip是否获取

if [ ! -n "$new_ip" ]; then
echo "$datetime 公网IP获取失败,检查'https://saas.1-c.cn/ip/' " >> $log
exit 1
fi
old_ip=`cat $dirfile` #查看旧ip

# 判断两个IP是否相等 发邮件
if [ "$new_ip" = "$old_ip" ]; then
echo "$datetime IP正常 - true "
#echo "$datetime IP正常 - true " >> $log
else
echo $new_ip > $dirfile
echo "IP已经发生变化!<br/>新IP:$new_ip <br/>旧IP:$old_ip " | mail -s "$mail_subject" "$mail_user"
echo "$datetime IP已经发生变化 - error 新IP:$new_ip 旧IP:$old_ip" >> $log

fi

接设置好后如果公网ip变化就会发送邮件