使用 msmtp 和 GMail 账号部署服务器 SMTP 发信(2024年)

实验室新添加的服务器需要一个基本的邮件通知功能,也就是在某些事件发生时能够向外发送电子邮件进行通知。众所周知,配置电子邮件的基础设施通常会很麻烦。因此,我在寻找解决方案时有以下三点考虑:

  • 服务器程序发送电子邮件的接口应该通用。因此,我优先考虑使用提供了兼容/usr/sbin/sendmail命令的软件。
  • 避免额外注册邮箱账号的麻烦。因此我选择重复利用我已有的 GMail 账号。
  • 考虑 GMail 的特有限制。由于使用 Google 主密码进行 SMTP 发信身份认证的操作已经被 GMail 认为不安全而禁用了,所以这次必须变相使用用户名和密码完成 SMTP 配置。Google 提供了一个名为 App passwords 的特别功能,能够根据需要创建一个起替代作用的纯文本密码。

我最后选择的解决方案是 msmtp 配合 msmtp-mta 以及 GMail SMTP + App Passwords 组合。整个过程基本是遵循Gmail with an App Password这篇英文博客文章来部署的。

本文的配置在2024年10月有效,但无法保证永远生效。请在进行配置之前先行验证方法的有效性。

基本流程

  • 第零步:为自己的 Google 账号启用两步验证功能。
  • 第一步:访问App passwords管理页面创建一个新的 App password。完成整个步骤,得到的应当是16位固定长度的密码。
  • 第二步:在服务器上安装 msmtpmsmtp-mta 软件包。前者是核心组件,后者提供了 sendmail 命令的兼容接口。
  • 第三步:在服务器上按照正常方式配置 msmtp GMail SMTP 发信。用户名仍然使用 GMail 电子邮箱地址,密码部分直接填入16位 App password 即可。
  • 第四步:测试发信。

msmtp配置文件/etc/msmtprc示例(Debian/Ubuntu 系统)

defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account gmail
host smtp.gmail.com
port 465
tls_starttls off
from XXXXXX@gmail.com
user XXXXXX@gmail.com
password 1111222233334444

port 465
tls on
tls_starttls off

syslog LOG_MAIL

account default: gmail

对于基于 Debian 和 Ubuntu 的服务器,在写入配置之后,考虑按照/usr/share/doc/msmtp/README.Debian的建议执行下列命令以确保配置文件并非所有人可读:

chmod 0640 /etc/msmtprc
chgrp msmtp /etc/msmtprc

参考文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注