在Linux系统管理中,自动化任务执行后通过邮件通知相关人员是提升运维效率的重要手段,通过编写Shell脚本结合邮件发送功能,可以实现对系统状态、任务执行结果等关键信息的实时推送,帮助管理员及时掌握系统运行情况,本文将详细介绍Linux环境下通过脚本发送邮件的多种方法、配置步骤及注意事项。

使用mail命令发送邮件
mail命令是Linux系统中最基础的邮件发送工具,依赖于本地邮件传输代理(MTA)如sendmail或postfix,首先需要确保系统已安装mailx包(不同发行版名称可能略有差异,如Ubuntu/Debian使用mailutils,CentOS/RHEL使用mailx),安装完成后,可通过以下基本语法发送邮件:
echo "邮件正文" | mail -s "邮件主题" recipient@example.com
若需添加附件,可以使用-a参数:
mail -s "主题" -a /path/to/file.txt recipient@example.com < body.txt
配置发件人信息时,需编辑/etc/mail.rc或~/.mailrc文件,添加以下内容:

set from=sender@example.com set smtp=smtp.example.com set smtp-auth-user=username set smtp-auth-password=password set smtp-auth=login
使用sendmail命令直接发送邮件
sendmail是一款功能强大的MTA,允许脚本直接调用SMTP协议发送邮件,以下是通过管道方式使用sendmail的示例:
{
echo "Subject: 邮件主题"
echo "From: sender@example.com"
echo "To: recipient@example.com"
echo "MIME-Version: 1.0"
echo "Content-Type: text/html; charset=UTF-8"
echo ""
echo "<html><body><h1>HTML格式邮件正文</h1></body></html>"
} | sendmail -t
此方法无需额外配置MTA,但需要确保sendmail服务已启动且网络环境允许SMTP连接,对于生产环境,建议配合SSL/TLS加密传输,可通过-f指定发件人,-oi忽略以单独句点结束的行。
利用第三方工具(如mutt、swaks)
mutt是一款功能丰富的邮件客户端,支持附件、HTML格式和加密传输,安装mutt后,可通过以下命令发送邮件:

echo "邮件正文" | mutt -s "主题" -a /path/to/attachment.pdf recipient@example.com
swaks则是一款独立的SMTP测试工具,适合脚本化发送:
swaks --to recipient@example.com --from sender@example.com --server smtp.example.com --auth LOGIN --auth-user username --auth-password password --body "邮件正文" --header "Subject: 主题"
常见问题与解决方案
- 邮件被误判为垃圾邮件:确保邮件头信息完整,包含正确的Return-Path和DKIM签名;避免使用频繁触发垃圾邮件过滤的关键词。
- 附件乱码问题:对于非文本附件,需在邮件头中正确声明Content-Type和Content-Transfer-Encoding,
echo "Content-Type: application/pdf; name=\"document.pdf\"" echo "Content-Transfer-Encoding: base64" echo "Content-Disposition: attachment; filename=\"document.pdf\"" echo "" base64 /path/to/document.pdf
- SMTP认证失败:检查SMTP服务器地址、端口及认证信息,部分服务商(如Gmail)需开启“应用专用密码”。
安全建议
- 避免在脚本中明文存储密码,建议使用
read -s命令交互式输入或通过配置文件权限限制访问。 - 对于生产环境,建议使用SSL/TLS加密的SMTP端口(如465或587),可通过
openssl s_client -connect smtp.example.com:465测试连接。 - 定期检查邮件日志(如
/var/log/maillog)排查发送失败问题,并结合日志轮转避免日志文件过大。
通过合理选择邮件发送工具并正确配置,Linux脚本邮件功能可以成为自动化运维体系中不可或缺的一环,无论是日常监控报告还是异常告警,及时准确的邮件通知都能显著提升系统管理的响应速度和可靠性,管理员可根据实际需求和环境特点,选择最适合的邮件发送方案,并结合日志监控和错误处理机制,确保邮件通知功能的稳定运行。


















