补充说明
ssmtp 是一个只做“转发”的 MTA:它不接受本地投递,也不排队重试,而是把本机程序产生的邮件直接通过上游 SMTP 服务器(常见是邮件服务商的中继)发送出去。它提供与 sendmail 兼容的命令行接口,因此 cron、PHP、Nagios 等只认 sendmail 的程序可以直接使用。
配置集中在 /etc/ssmtp/ssmtp.conf,关键项有 mailhub、AuthUser、AuthPass、FromLineOverride、UseTLS、UseSTARTTLS;/etc/ssmtp/revaliases 用于把本地用户映射成对外发件地址。配置文件含明文密码,权限应设为 640 且属主为 root:mail。
ssmtp 已停止维护,Debian 等发行版建议改用 msmtp 或 nullmailer,二者的 sendmail 兼容接口类似。它没有本地邮箱、没有队列,上游不可达时邮件会直接失败,不适合作为完整邮件服务器。
语法
ssmtp [选项] [收件人...]
ssmtp -t < 邮件内容
选项
-t:从邮件头(To/Cc/Bcc)中读取收件人-v:显示与 SMTP 服务器交互的详细过程-F 全名:设置发件人显示名-f 地址:设置信封发件地址
实例
# 安装(Debian/Ubuntu)
sudo apt install ssmtp
# 配置上游 SMTP 服务器
sudo tee /etc/ssmtp/ssmtp.conf >/dev/null <<'EOF'
mailhub=smtp.example.com:587
AuthUser=bot@example.com
AuthPass=your-password
UseSTARTTLS=YES
FromLineOverride=YES
EOF
# 发送一封测试邮件
printf 'Subject: test\n\nhello from ssmtp\n' | ssmtp you@example.com
# 兼容 sendmail 的调用方式
echo -e "Subject: cron\n\njob done" | sendmail -t