🧰 Ubuntu 上设置发邮件功能
✔️ 卸掉 ssmtp,改用 msmtp 配合 mailutils,最轻量、最兼容、最稳定。
1️⃣ 安装邮件工具:
清理旧配置,卸载冲突组件
sudo apt remove ssmtp -y
sudo apt purge mailutils -y
sudo rm -f /etc/mail.rc
安装
sudo apt install msmtp msmtp-mta mailutils ca-certificates -y
手动设置 sendmail 路由到(msmtp /usr/sbin/sendmail → /etc/alternatives/mta → /usr/bin/msmtp)
sudo ln -sf /usr/bin/msmtp /etc/alternatives/mta
sudo ln -sf /etc/alternatives/mta /usr/sbin/sendmail
这一步安装了 mail
命令和配置文件。
2️⃣ 配置邮件发送(以 Gmail 为例):
编辑配置文件:
sudo nano /root/.msmtprc
内容示例
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
account gmail
host smtp.gmail.com
port 587
from admin@gmail.com
user admin@gmail.com
password 16位应用专用密码(不是你的 Gmail 密码)
account default : gmail
📌 注意:
- 不是 Gmail 登录密码,而是你生成的 应用专用密码
- 你可以在 Google 账户 → 安全性 → 应用专用密码里创建(如“Ubuntu Mail”)
3️⃣ 使用方式 1:在任何 shell 脚本中直接写:
echo "邮件正文内容" | mail -s "邮件标题" 收件人邮箱
示例:
echo "Immich 备份失败,请检查服务状态。" | mail -s "【Immich 告警】PostgreSQL 备份失败" admin@gmail.com
4️⃣ 使用方式 2:多行正文 / 脚本函数中使用
可以这样写更复杂的正文:
mail -s "Immich 备份成功 ✅" admin@gmail.com <<EOF
Hi,
Immich PostgreSQL 已于 $(date "+%F %T") 备份成功。
文件保存在:/mnt/immich/sql-backup
-- 自动备份系统
EOF
5️⃣ 使用方式 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 容器状态!"
6️⃣ 使用方式 4:发送带附件(可选)
uuencode /path/to/immich.sql immich.sql | mail -s "Immich 手动备份" admin@gmail.com
7️⃣ 在实际脚本中(结合逻辑)示例
#!/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