开发工具

如何设置邮件通知?

在Shell脚本中设置邮件通知,可以通过系统自带的邮件工具(如mail、sendmail)或第三方SMTP服务(如Gmail)实现。以下是详细配置方法及示例:

一、使用系统自带邮件工具

1. 安装邮件客户端

Ubuntu/Debian:

sudo apt install mailutils


CentOS/RHEL:

sudo yum install mailx


2. 发送邮件示例

在脚本中直接调用mail命令发送通知:

# 发送简单文本
echo "这是邮件正文" | mail -s "邮件标题" your-email@example.com

# 发送文件内容
mail -s "日志报告" admin@example.com < /var/log/system.log

# 在脚本中使用(CPU监控示例)
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
    echo "CPU使用率: ${cpu_usage}%" | mail -s "CPU警报" admin@example.com
fi


二、通过外部SMTP服务(如Gmail)

1. 安装并配置SSMTP

# Ubuntu/Debian
sudo apt install ssmtp

# 编辑配置文件 /etc/ssmtp/ssmtp.conf
root=your-email@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=your-email@gmail.com
AuthPass=your-app-password   # 使用Gmail应用专用密码
UseSTARTTLS=YES


2. 发送邮件脚本

# 发送带正文的邮件
echo "这是邮件内容" | mail -s "来自Gmail的测试" recipient@example.com

# 发送带附件的邮件(需借助mutt)
sudo apt install mutt
echo "日志见附件" | mutt -s "带附件的邮件" -a /var/log/syslog -- recipient@example.com


三、使用CURL直接调用SMTP API

通过HTTP API发送邮件(如Mailgun、SendGrid等):

# 示例:使用Mailgun API
API_KEY="your-api-key"
DOMAIN="your-domain.mailgun.org"

curl -s --user "api:$API_KEY" \
    https://api.mailgun.net/v3/$DOMAIN/messages \
    -F from="Alert System <alert@example.com>" \
    -F to="admin@example.com" \
    -F subject="系统警报" \
    -F text="CPU使用率超过阈值!"


四、高级配置:加密与安全

1. 避免在脚本中暴露密码

使用环境变量或加密文件:

# 将密码保存在~/.mailpass(权限设为600)
echo 'export SMTP_PASS="your-password"' >> ~/.mailpass
chmod 600 ~/.mailpass

# 在脚本中引用
source ~/.mailpass
echo "警报" | mail -s "标题"    \
   -r "alert@example.com"     \
   -S smtp="smtp.gmail.com:587"     \
   -S smtp-use-starttls     \
   -S smtp-auth=login     \
   -S smtp-auth-user="your-email"     \
   -S smtp-auth-password="$SMTP_PASS" admin@example.com


2. 使用GPG加密敏感信息

# 加密密码文件
gpg --output secret.gpg --encrypt --recipient admin@example.com ~/.mailpass

# 在脚本中解密使用
gpg --quiet --decrypt secret.gpg | while read -r pass; do
    echo "邮件内容" | mail -s "标题" -S smtp-auth-password="$pass" admin@example.com
done


五、调试邮件发送

1. 查看邮件队列

mailq   # 查看待发送邮件


2. 检查日志

tail -f /var/log/mail.log  # Ubuntu/Debian
tail -f /var/log/maillog   # CentOS/RHEL


3. 测试SMTP连通性

telnet smtp.gmail.com 587
EHLO example.com
STARTTLS
AUTH LOGIN
# 输入Base64编码的用户名和密码


六、完整示例:监控+邮件通知

#!/bin/bash
# 监控CPU、内存、磁盘,异常时发送邮件
EMAIL="admin@example.com"
THRESHOLD_CPU=80
THRESHOLD_MEM=90
THRESHOLD_DISK=85

# CPU检查
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
if (( $(echo "$cpu_usage > $THRESHOLD_CPU" | bc -l) )); then
    echo "CPU使用率: ${cpu_usage}%" | mail -s "CPU警报" $EMAIL
fi

# 内存检查
mem_usage=$(free | awk '/Mem/{printf("%.0f"), $3/$2*100}')
if [ $mem_usage -gt $THRESHOLD_MEM ]; then
    echo "内存使用率: ${mem_usage}%" | mail -s "内存警报" $EMAIL
fi

# 磁盘检查
disk_usage=$(df / | awk '/\//{printf("%d"), $5}')
if [ $disk_usage -gt $THRESHOLD_DISK ]; then
    echo "磁盘使用率: ${disk_usage}%" | mail -s "磁盘警报" $EMAIL
fi


七、推荐工具

1、mutt - 更强大的邮件客户端(支持附件、HTML等)

2、swaks - 命令行SMTP测试工具

swaks --to admin@example.com --server smtp.gmail.com:587 
--auth LOGIN 
--from your-email@gmail.com 
--auth-user your-email 
--auth-password your-pass

3、msmtp - 轻量级SMTP客户端

通过以上方法,你可以灵活地在Shell脚本中集成邮件通知功能,及时接收系统状态、任务结果等关键信息!