卸掉 ssmtp,改用 msmtp + mailutils,轻量、兼容性好又稳定。
安装邮件工具
清理旧组件:
sudo apt remove ssmtp -y
sudo apt purge mailutils -y
sudo rm -f /etc/mail.rc
安装 msmtp + mailutils:
sudo apt install msmtp msmtp-mta mailutils ca-certificates -y
手动设置 sendmail 路由到 msmtp:
sudo ln -sf /usr/bin/msmtp /etc/alternatives/mta
sudo ln -sf /etc/alternatives/mta /usr/sbin/sendmail
此步骤会安装
配置 msmtp(以 Gmail 为例)
编辑配置文件:
sudo nano /root/.msmtprc
配置示例:
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /root/.msmtp.log
account gmail
host smtp.gmail.com
port 587
from admin@gmail.com
user admin@gmail.com
password 你的16位应用专用密码(不是 Gmail 登录密码)
account default : gmail
权限设置:
chmod 600 /root/.msmtprc
日志文件:
touch /root/.msmtp.log
chmod 600 /root/.msmtp.log
chown root:root /root/.msmtp.log
注意:
- Gmail 不接受真实登录密码,请使用 应用专用密码
- 路径:Google 账户 → 安全性 → 应用专用密码(例如 “Ubuntu Mail”)
使用方式 1:脚本直接调用
echo "邮件正文内容" | mail -s "邮件标题" 收件人邮箱
示例:
echo "Immich 备份失败,请检查服务状态。" \
| mail -s "【Immich 告警】PostgreSQL 备份失败" admin@gmail.com
使用方式 2:发送多行正文(HereDoc)
mail -s "Immich 备份成功 ✅" admin@gmail.com <<EOF
Hi,
Immich PostgreSQL 已于 $(date "+%F %T") 备份成功。
文件保存在:/mnt/immich/sql-backup
-- 自动备份系统
EOF
使用方式 3:封装成通用发送脚本
创建脚本 /usr/local/bin/send_mail.sh:
#!/bin/bash
# 用法:send_mail.sh "标题" "内容"
SUBJECT="$1"
BODY="$2"
TO="admin@gmail.com"
echo "$BODY" | mail -s "$SUBJECT" "$TO"
赋予执行权限:
chmod +x /usr/local/bin/send_mail.sh
调用方式:
send_mail.sh "Immich 异常告警" "数据库导出失败,请检查 PostgreSQL 容器状态!"
使用方式 4:发送带附件(可选)
uuencode /path/to/immich.sql immich.sql | mail -s "Immich 手动备份" admin@gmail.com
实际脚本示例(结合备份逻辑)
#!/bin/bash
BACKUP_DIR="/mnt/immich/sql-backup"
FILENAME="immich_pg_backup_$(date +%F).sql"
if ! docker exec -t immich-db pg_dump -U postgres -d immich > "$BACKUP_DIR/$FILENAME"; then
echo "Immich PostgreSQL 备份失败,时间:$(date)" \
| mail -s "❌ Immich 备份失败告警" admin@gmail.com
exit 1
else
echo "Immich PostgreSQL 已成功备份于 $(date)" \
| mail -s "✅ Immich 备份成功" admin@gmail.com
fi