Linux命令-sendmail邮件传输代理快速参考基本语法安装 sendmail基本用法常用选项配置 sendmail发送邮件脚本示例查看邮件队列故障排查总结快速参考sendmail是经典的邮件传输代理MTA。它负责在服务器之间路由和传输电子邮件以及将本地生成的邮件传递给收件人。sendmail配置复杂现代系统中更常用 Postfix 或 Exim。现代替代Postfix、Exim、OpenSMTPD 更易配置和安全。基本语法# 基本语法sendmail[选项]收件人...# 发送邮件echoTest|sendmailuserexample.com# 发送带主题和正文的邮件echo-eSubject: Test\n\nThis is a test.|sendmailuserexample.com# 使用 here-documentsendmailuserexample.comEOF Subject: Test Email From: senderexample.com This is a test email. EOF安装 sendmail# Debian/Ubuntusudoaptupdatesudoaptinstallsendmail# RHEL/CentOSsudoyuminstallsendmail# Arch Linuxsudopacman-Ssendmail# 验证安装whichsendmailsendmail-d0.4-bvroot基本用法# 1. 发送简单邮件echoHello|sendmailuserexample.com# 2. 发送带主题和正文的邮件echo-eSubject: Hello\n\nThis is body.|sendmailuserexample.com# 3. 从文件读取邮件内容sendmailuserexample.comemail.txt# 4. 发送邮件给多个收件人echoHello|sendmailuser1example.com user2example.com# 5. 使用 mail 命令更简单echoHello|mail-sSubjectuserexample.com# 6. 查看邮件队列sudosendmail-bp# 7. 尝试投递队列中的邮件sudosendmail-q常用选项# -bp, -bP 显示邮件队列sendmail-bp# -q 处理队列sendmail-q# -v 详细输出调试sendmail-vuserexample.comemail.txt# -Am 邮件中继允许投递到非本地地址sendmail-Amuserexample.comemail.txt# -i 忽略 EOF不把 . 当作结束sendmail-iuserexample.comemail.txt# -t 从邮件头读取收件人sendmail-temail.txt# -d0.x 调试x 是调试级别sendmail-d0.4-bvroot配置 sendmail# sendmail 配置文件位于 /etc/mail/ls-la/etc/mail/# 关键配置文件# sendmail.mc 宏配置文件更容易编辑# sendmail.cf 编译后的配置文件# access 访问控制中继权限# virtusertable 虚拟用户映射# local-host-names 本地主机名# 编辑 sendmail.mcsudovim/etc/mail/sendmail.mc# 编译配置sudom4 /etc/mail/sendmail.mc/etc/mail/sendmail.cf# 重启 sendmailsudosystemctl restartsendmail发送邮件脚本示例#!/bin/bash# 发送邮件脚本TOuserexample.comSUBJECTTest EmailBODYThis is a test email sent from$(hostname)at$(date).FROMsenderexample.com# 方法1使用 sendmail(echoTo:$TOechoSubject:$SUBJECTechoFrom:$FROMechoecho$BODY)|sendmail$TO# 方法2使用 mail更简单echo$BODY|mail-s$SUBJECT$TO# 方法3使用 sendemail第三方工具# 安装 sendemail# sudo apt install sendemail# 发送邮件支持 SMTP 认证# sendemail -f $FROM -t $TO -u $SUBJECT -m $BODY \# -s smtp.gmail.com:587 -xu $FROM -xp password -o tlsyes查看邮件队列# 查看邮件队列sudosendmail-bp# 输出示例# /var/spool/mqueue (1 request)# -----Q-ID--------Size-- -----Q-Time----- ------------Sender/Recipient---------# xxxx 1234 Sat Jan 10 14:30 root# userexample.com# 强制投递队列中的邮件sudosendmail-q# 查看邮件日志sudotail-f/var/log/mail.log# Debian/Ubuntusudotail-f/var/log/maillog# RHEL/CentOS故障排查# 问题1sendmail 命令找不到# 解决安装 sendmailsudoaptinstallsendmail# 问题2邮件发送失败# 解决查看日志sudotail-f/var/log/mail.log# 问题3邮件被标记为垃圾邮件# 解决配置 SPF、DKIM、DMARC 记录# 问题4sendmail 拒绝中继# 解决修改 /etc/mail/accessecho127.0.0.1|sudotee-a/etc/mail/accessecholocalhost|sudotee-a/etc/mail/accesssudomakemaphash/etc/mail/access.db/etc/mail/access总结核心价值sendmail是经典的 MTA但配置复杂现代系统推荐使用 Postfix 或 Exim。常用组合echo body | sendmail userexample.com发送简单邮件sendmail -bp查看邮件队列sendmail -q强制投递队列注意配置 sendmail 需要小心错误的配置可能导致开放中继被滥发垃圾邮件。