当前位置:首页 > 服务器技术 > 正文

Linux Shell输出邮件(从零开始学会用Shell脚本自动发送邮件)

在 Linux 系统中,我们经常需要通过 Shell 脚本来监控系统状态、执行任务,并在特定条件下自动发送邮件通知管理员。例如:磁盘空间不足、服务宕机、备份完成等场景。本文将手把手教你如何使用 Linux Shell 发送邮件,即使是初学者也能轻松上手。

Linux Shell输出邮件(从零开始学会用Shell脚本自动发送邮件) Shell邮件发送 Shell脚本发邮件 mail命令教程 自动化邮件通知 第1张

一、准备工作:安装邮件工具

大多数 Linux 发行版默认未安装邮件客户端。我们需要先安装一个常用的邮件发送工具,比如 mailutils(Debian/Ubuntu)或 mailx(CentOS/RHEL)。

Ubuntu/Debian 系统:

sudo apt updatesudo apt install mailutils

CentOS/RHEL 系统:

sudo yum install mailx

安装完成后,系统就具备了通过 Shell 发送邮件的能力。

二、配置 SMTP(可选但推荐)

默认情况下,mail 命令会尝试通过本地的邮件服务器(如 Postfix)发送邮件。但很多服务器没有配置邮件服务,因此更推荐使用外部 SMTP 服务器(如 Gmail、QQ 邮箱、企业邮箱等)来发送邮件。

以使用 QQ 邮箱为例,你需要:

  • 开启 SMTP 服务并获取授权码(不是登录密码!)
  • 编辑 /etc/ssmtp/ssmtp.conf 文件(若未安装 ssmtp,可先安装:sudo apt install ssmtp

配置示例:

root=yourname@qq.commailhub=smtp.qq.com:587AuthUser=yourname@qq.comAuthPass=你的授权码UseSTARTTLS=YES

这样配置后,所有通过 mail 命令发送的邮件都会走 QQ 邮箱的 SMTP 服务器。

三、基本用法:使用 mail 命令发送邮件

最简单的发送方式如下:

echo "这是一封测试邮件" | mail -s "测试主题" user@example.com

解释:

  • echo 输出邮件正文
  • -s 指定邮件主题
  • user@example.com 是收件人地址

你也可以从文件读取内容:

mail -s "系统报告" admin@company.com < /var/log/report.txt

四、实战:编写 Shell 脚本自动发邮件

下面是一个监控磁盘使用率的脚本示例。当使用率超过 80% 时,自动发送警告邮件。

#!/bin/bashTHRESHOLD=80USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')if [ "$USAGE" -gt "$THRESHOLD" ]; then  echo "警告:根分区使用率已达到 ${USAGE}%!" | \  mail -s "[ALERT] 磁盘空间不足" admin@example.comfi

将上述脚本保存为 disk_alert.sh,赋予执行权限:

chmod +x disk_alert.sh

再配合 crontab 定时执行(例如每小时检查一次):

0 * * * * /path/to/disk_alert.sh

五、常见问题与调试技巧

如果你发现邮件没有收到,可以尝试以下方法排查:

  • 查看系统日志:tail -f /var/log/mail.log(Ubuntu)或 /var/log/maillog(CentOS)
  • 测试本地邮件队列:mailq
  • 确保防火墙未阻止 25、465 或 587 端口
  • 确认 SMTP 用户名和授权码正确

六、总结

通过本文,你已经掌握了在 Linux Shell 中发送邮件的基本方法,包括工具安装、SMTP 配置、命令使用以及自动化脚本编写。无论是用于 Linux Shell邮件发送Shell脚本发邮件,还是实现 自动化邮件通知,这些技能都能大大提升你的运维效率。而 mail命令教程 的核心就是理解输入、主题和收件人的组合方式。

现在,你可以尝试将邮件功能集成到你的监控、备份或部署脚本中,让系统“主动”告诉你发生了什么!