dma
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 目录也保存着未投递/未处理的邮件。
示例
通过 Gmail 的 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
使用“空客户端”的最小化配置
如果您的用例是“将所有邮件发送到外部邮箱,不进行任何本地投递”,则以下配置
- 使用端口 465(默认 TLS,始终加密,无需 STARTTLS 协商)。
- 将所有内容发送到 Gmail SMTP 服务器,绕过任何本地 mbox。
/etc/dma/dma.conf
SMARTHOST smtp.gmail.com PORT 465 AUTHPATH /etc/dma/auth.conf SECURETRANSFER MASQUERADE username@gmail.com NULLCLIENT