在CentOS系统中,使用脚本发送邮件可以自动化通知、日志备份等任务,提高运维效率,本文将介绍如何配置CentOS环境并编写邮件发送脚本,涵盖基础设置、脚本编写及常见问题处理。

CentOS邮件发送环境准备
CentOS默认安装了Sendmail或Postfix邮件服务,但若需通过外部SMTP服务器(如Gmail、企业邮箱)发送邮件,需安装邮件客户端工具,以安装mailx为例,执行以下命令:
sudo yum install mailx -y
安装后,需配置SMTP服务器信息,编辑/etc/mail.rc文件,添加如下内容(以Gmail为例):
set from=your_email@gmail.com set smtp=smtp.gmail.com set smtp-auth-user=your_email@gmail.com set smtp-auth-password=your_app_password set smtp-auth=login set ssl-verify=ignore
注意:Gmail需启用“应用专用密码”,避免直接使用账户密码。
编写基础邮件发送脚本
以下是一个简单的Shell脚本示例,用于发送纯文本邮件:
#!/bin/bash # 定义收件人、主题和内容 recipient="recipient@example.com" subject="系统通知" body="这是一封来自CentOS服务器的测试邮件。" # 发送邮件 echo "$body" | mailx -s "$subject" "$recipient"
将脚本保存为send_email.sh,赋予执行权限:

chmod +x send_email.sh
运行脚本即可发送邮件,若需发送附件,使用-a参数:
echo "$body" | mailx -s "$subject" -a /path/to/file.pdf "$recipient"
高级脚本:结合日志与定时任务
在实际运维中,常需定期发送日志报告,以下脚本实现每日压缩日志并发送:
#!/bin/bash # 定义变量 log_dir="/var/log" archive_name="logs_$(date +%Y%m%d).tar.gz" recipient="admin@example.com" subject="每日日志报告" # 压缩日志 tar -czf /tmp/$archive_name $log_dir # 发送邮件并包含附件 echo "请查收附件中的日志文件。" | mailx -s "$subject" -a /tmp/$archive_name "$recipient" # 清理临时文件 rm /tmp/$archive_name
结合crontab实现定时执行:
0 9 * * * /path/to/send_log.sh
上述脚本将在每天上午9点自动执行。
常见问题与解决方案
-
邮件发送失败,提示“认证错误”
检查SMTP服务器配置是否正确,尤其是密码是否为“应用专用密码”,若使用企业邮箱,需确认是否开启SMTP服务及白名单IP。
-
附件发送失败或乱码
确保附件路径正确,且文件名不含特殊字符,若发送二进制文件,建议使用uuencode或base64编码后传输。
FAQs
Q1: 如何使用脚本发送HTML格式的邮件?
A: 通过mailx的-a参数添加HTML内容,
echo "<h1>HTML邮件</h1><p>这是一封HTML格式邮件。</p>" | mailx -a "Content-Type: text/html" -s "HTML测试" "$recipient"
Q2: 如何在脚本中处理多个收件人?
A: 使用逗号分隔多个邮箱地址,
recipient="user1@example.com,user2@example.com" echo "$body" | mailx -s "$subject" "$recipient"