dma

来自 ArchWiki

dma (Dragonfly Mail Agent) 是一个微型的邮件传输代理(MTA)。它能够接收邮件并将其投递到本地或远程目的地;但是,如果您想要使用您的域名发送和接收邮件,那么您将需要一个功能齐全的 邮件服务器

安装

安装 dma 软件包。

配置

`dma` 有两个主要的配置文件:/etc/dma/dma.conf 包含主要的设置指令,而 /etc/dma/auth.conf 对于 SMTP 服务器的身份验证是必需的。`dma` 提供了合理的默认设置,因此您可能无需特殊配置即可将其用于本地邮件投递。

SMTP 传输

如果您想通过外部 SMTP 服务器路由邮件,则必须在 /etc/dma/dma.conf 中设置 SMARTHOST 地址(也称为中继主机)。

/etc/dma/dma.conf
SMARTHOST smtp-host

另外,不要忘记以以下格式在 /etc/dma/auth.conf 中设置身份验证凭据

/etc/dma/auth.conf
user|smarthost.example.com:password

要使 `dma` 实际使用凭据文件,请设置 AUTHPATH

/etc/dma/dma.conf
AUTHPATH /etc/dma/auth.conf

要更改默认端口,请设置 PORT 指令(25 是默认值)。

/etc/dma/dma.conf
# accept mail from external MTAs (STARTTLS is also an option)
PORT 25

# accept mail from MUAs with TLS
PORT 465

# accept mail from MUAs (STARTTLS is also an option)
PORT 587

加密

SECURETRANSFER 指令启用邮件传输期间的加密。根据您的需要,取消注释 STARTTLS 以启用 STARTTLS 支持,并激活 OPPORTUNISTIC_TLS 以允许在发生错误时回退到未加密的连接。

出于某种原因,您可能想要执行纯文本 SMTP 身份验证。在这种情况下,请取消注释 SECURE 指令并将其显式更改为 INSECURE

伪装

如果您想替换信封中原始的 From: 字段,则可以使用 MASQUERADE 功能。

/etc/dma/dma.conf
# send mails as user foo (hostname will be derived with gethostbyname() or set to MAILNAME directive)
MASQUERADE foo@

# send mails from host bar (username will be substituted)
MASQUERADE bar

# send mail as user foo from host bar
MASQUERADE foo@bar

测试

要发送测试邮件,请从命令行执行以下命令。

$ mail -s "Just a dma test" foo@bar.example.com
This is just a small test message
<Ctrl+D>

以 root 身份运行 journalctl -r 以查看一切是否顺利。您还可以使用以下命令检查 `dma` 队列:

$ dma -bp

/var/spool/dma 目录也保存未投递/未处理的邮件。

示例

通过 Google 的 SMTP 服务器发送邮件

前提条件

如果您使用 两步验证(也称为 双因素身份验证)程序,那么您应该创建一个所谓的 应用密码

要做到这一点,请登录您的 Google 账户,在左侧面板中选择安全条目,然后在登录 Google 面板中点击应用密码。如果您没有看到此项目,请查阅 Google 上的 相关帖子

点击选择应用并选择所需的应用程序(通常称为邮件)。然后点击选择设备并选择设备,但最好添加自定义设备并对其进行适当命名,以便于未来的管理。然后点击生成并写下您的应用密码(黄色栏中的 16 个字符代码)。

警告: 以后无法查看或更改应用密码,因此请立即使用它。

配置

/etc/dma/dma.conf
SMARTHOST smtp.gmail.com
PORT 587
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
STARTTLS
MASQUERADE username@gmail.com

MASQUERADE 行确保由 DMA 发送的邮件看起来像是来自指定用户。Google 将拒绝来自不正确的 Google 帐户的电子邮件。

/etc/dma/auth.conf
username@gmail.com|smtp.gmail.com:your-password
注意: 不要忘记指定您的 Google 帐户登录名和密码(或者使用应用密码代替,请参阅 #Prerequisites)。

使用 “null client” 的极简配置

如果您的用例是“所有电子邮件都发送到外部邮箱,而无需任何本地投递”,则以下配置:

  • 使用端口 465(默认使用 TLS,始终加密,无需 STARTTLS 协商)。
  • 将所有内容发送到 Google SMTP 服务器,绕过任何本地 mbox。
/etc/dma/dma.conf
SMARTHOST smtp.gmail.com
PORT 465
AUTHPATH /etc/dma/auth.conf
SECURETRANSFER
MASQUERADE username@gmail.com
NULLCLIENT