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

wen 实用脚本 205

本文目录导读:

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

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

在Shell脚本中发送邮件报告,主要有以下几种常用方法,推荐使用 mail 或 sendmail 命令,或结合 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,确保可靠性。

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝