Shell脚本如何发送报告到邮箱

wen 实用脚本 2

本文目录导读:

Shell脚本如何发送报告到邮箱

  1. 使用 mail 命令(最常用)
  2. 使用 sendmail 命令(Linux自带)
  3. 使用 mutt(支持HTML、附件)
  4. 完整的Shell报告脚本示例
  5. 使用 ssmtp(轻量级SMTP转发)
  6. 使用 curl 调用邮件API(推荐)
  7. 常见问题

在Shell脚本中发送邮件报告,主要有以下几种常用方法,推荐使用 mailsendmail 命令,或结合 mutt 发送带附件的HTML邮件。


使用 mail 命令(最常用)

安装

# CentOS/RHEL
yum install mailx -y
# Ubuntu/Debian
apt-get install mailutils -y

基础用法

# 发送纯文本邮件
echo "这是邮件内容" | mail -s "邮件主题" user@example.com
# 从文件读取内容
mail -s "报告" user@example.com < /tmp/report.txt
# 发送给多人
echo "内容" | mail -s "主题" user1@example.com,user2@example.com

配置SMTP(使用外部邮箱)

编辑 /etc/mail.rc,添加:

set from=yourname@gmail.com
set smtp=smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=yourname@gmail.com
set smtp-auth-password=your_app_password
set smtp-use-starttls=yes

使用 sendmail 命令(Linux自带)

(
echo "Subject: 系统报告"
echo "To: user@example.com"
echo "Content-Type: text/plain"
echo ""
echo "这是报告内容"
echo "日期: $(date)"
) | sendmail -t

使用 mutt(支持HTML、附件)

安装

apt-get install mutt   # Ubuntu
yum install mutt       # CentOS

发送HTML邮件

echo "<h1>报告</h1><p>内容</p>" | mutt -e "set content_type=text/html" -s "HTML报告" user@example.com

发送带附件

echo "请查收附件" | mutt -s "报告附件" -a /path/to/file.txt -- user@example.com

多个附件

echo "多个附件" | mutt -s "附件" -a file1.log -a file2.csv -- user@example.com

完整的Shell报告脚本示例

#!/bin/bash
# 配置
TO="admin@example.com"
SUBJECT="每日系统报告 - $(date '+%Y-%m-%d')"
# 生成报告内容
REPORT="/tmp/report_$(date '+%Y%m%d').txt"
{
echo "====== 系统报告 ======"
echo "主机名: $(hostname)"
echo "日期: $(date)"
echo ""
echo "--- 磁盘使用 ---"
df -h
echo ""
echo "--- 内存使用 ---"
free -h
echo ""
echo "--- 运行时间 ---"
uptime
} > $REPORT
# 发送邮件
mail -s "$SUBJECT" "$TO" < $REPORT
# 或使用 mutt 发送附件
# echo "请查收每日报告" | mutt -s "$SUBJECT" -a $REPORT -- $TO
# 清理
rm -f $REPORT

使用 ssmtp(轻量级SMTP转发)

安装配置

apt-get install ssmtp

编辑 /etc/ssmtp/ssmtp.conf

mailhub=smtp.gmail.com:587
AuthUser=yourname@gmail.com
AuthPass=your_app_password
UseSTARTTLS=YES

发送邮件

echo -e "Subject: 测试\n\n邮件内容" | ssmtp user@example.com

使用 curl 调用邮件API(推荐)

如果使用邮件服务API(如SendGrid、Mailgun、AWS SES等):

# SendGrid 示例
curl -X POST "https://api.sendgrid.com/v3/mail/send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "personalizations": [{"to": [{"email": "user@example.com"}]}],
    "from": {"email": "noreply@yourdomain.com"},
    "subject": "系统报告",
    "content": [{"type": "text/plain", "value": "报告内容"}]
  }'

常见问题

邮件被标记为垃圾邮件

  • 配置反向DNS(PTR记录)
  • 使用SPF/DKIM/DMARC
  • 避免使用免费邮箱发重要通知

中文乱码

添加编码声明:

echo "Subject: =?UTF-8?B?$(echo -n '测试主题' | base64)?="

调试邮件发送

# 测试SMTP连接
openssl s_client -starttls smtp -connect smtp.gmail.com:587
# 查看邮件日志
tail -f /var/log/maillog

推荐组合:开发环境用 mail 命令,生产环境用 mutt 或调用邮件API,确保可靠性。

抱歉,评论功能暂时关闭!