1111 字
6 分钟
服务器请求阿里邮箱服务器发送邮件

有时在服务器上触发某些事件时, 需要向用户(主要是我自己)发送邮件, 使用 msmtp 实现发送邮件, 如果已经开通了阿里邮箱, 就 无需自己搭建邮件服务器

TIP

之前我已经配置好了 阿里邮箱 - 免费版(参考 📚 阿里云配置域名邮箱), 但是阿里邮箱的 API 开放平台 免费版并不支持, 所以无法通过 API 实现发送邮件的功能, 但好在 阿里邮箱 允许第三方客户端收发邮件, 所以只要 配置好阿里邮箱, 并通过 msmtp 发送邮件即可

msmtp#

配置好解析规则后, 就需要在服务器上安装并配置 msmtp

msmtp 是一个轻量级的 msmtp 客户端(命令行工具), 适用于 只需要发送邮件的场景

安装 msmtp#

sudo apt update && sudo apt install msmtp msmtp-mta -y
# 安装时会提示是否启用 AppArmor, 直接选择 No

配置 msmtp#

vim /etc/msmtprc
# 设置默认账户
account default
# 启用 STARTTLS
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
# 465 端口使用的是 SSL/TLS, 而不是 STARTTLS
tls_starttls off
# 你的 SMTP 服务器
host smtp.qiye.aliyun.com
# 端口号(465 是 SMTPS,587 是 STARTTLS)
port 465
# 你的邮件账户
auth on
user no-reply@example.com
password your-password
# 发送者邮箱
from no-reply@example.com

这里需要注意:

  • 阿里邮箱只开放 465 端口, 所以需要将 tls_starttls 设置为 off
  • example.com 替换为你的域名

这里创建了 msmtp 的配置文件, 配置文件也可以放到 ~/.msmtprc, 配置好后最好设置一下权限为 600

配置阿里邮箱#

我们 不在服务器自己搭建邮件服务, 直接通过阿里邮箱实现发送邮件, 所以此场景下, 服务器需要安装用户发送邮件的客户端(msmtp), 阿里邮箱需要创建账号并开启 SMTP

创建 no-reply 账号#

创建一个用于发送邮件的账号

  1. 进入 阿里邮箱网页端
  2. 进入 组织与用户 - 员工账号管理 - 新建账号(no-reply@example.com), 必须勾选 开启 IMAP/SMPT 服务

配置安全策略#

阿里邮箱默认不允许第三方客户端登录, 需要在 安全管理 - 账号安全策略 中进行配置

  1. 进入 安全管理 - 账号安全策略
  2. (可选) 自由端双重认证 > 启用范围 中排除 no-reply@example.com, 此时可以通过邮件客户端登录 no-reply@example
  3. 三方客户端安全, 开启 允许使用第三方客户端, 启用范围根据需要修改, 必须包含 no-reply@example.com
  4. 定期修改密码提醒 > 例外账号, 添加 no-reply@example.com

发送邮件#

由于是在命令行中调用 msmtp 发送邮件, 所以需要注意一下邮件内容的格式:

Subject: 邮件标题
From: 邮件发送者 <no-reply@example.com>
To: 邮件接收者 <no-reply@example.com>

邮件内容
echo -e "Subject: 这是一封测试发送的邮件, 来自服务器\n\n这里是邮件内容, 仅用于测试" | msmtp me@test.com

WARNING

如果内容过于简单, 可能会直接进入邮件接受者的垃圾箱

参考#

服务器请求阿里邮箱服务器发送邮件
http://blog.xiaban.run/posts/2025/server-mail/
作者
Ryan
发布于
2025-02-13
许可协议
CC BY-NC-SA 4.0