从 Unix 脚本向 Dovecot 邮箱发送电子邮件的简单方法?

从 Unix 脚本向 Dovecot 邮箱发送电子邮件的简单方法?

我希望通过 Linux (Debian 10) 系统上的各种脚本向自己发送电子邮件。我的想法是只安装 Dovecot,而不是像 Postfix 这样的 MTA,以避免配置 MTA 的复杂性。我想做的就是从脚本中删除奇怪的电子邮件,然后使用 Thunderbird 连接到我的邮件服务器并提取这些电子邮件。

然而,我曾经运行自己的电子邮件服务器,并且我在该服务器上发送脚本的方式是使用/usr/sbin/sendmail.该二进制文件似乎是由 Postfix 提供的,因为仅安装 Dovecot 时不存在该二进制文件。

假设我已经设置 Dovecot 成功允许通过例如从本地用户邮箱检索电子邮件。 POP3,从 unix 脚本向这些本地邮箱发送电子邮件的最简单方法(基本上是最少配置)是什么?我想避免安装完整的 MTA,或者理想情况下,避免安装任何其他东西。我想要某种相当于:

/usr/sbin/sendmail "[email protected]" <<EOF_emailContent
(email here)
EOF_emailContent

答案1

基本问题是,如果没有 MTA,这些邮箱就没有电子邮件地址。它们只不过是磁盘上的一些文件。 Dovecot 不需要了解电子邮件地址。

MTA(如 postfix)和 Dovecot 之间的通常安排是,MTA 和 Dovecot 都配置为期望两者具有相同的布局信箱文件或邮件目录目录。但 MTA 与 Dovecot 的映射非常不同。

  • Dovecot 明白哪个用户读/写哪些邮箱
  • MTA 了解哪些电子邮件地址被路由到哪些邮箱。

您可能会假设发送至 的电子邮件[email protected]将发送至用户bob;这只发生是因为 MTA 知道路由[email protected]到 bob 的邮箱/home/bob/.mail。然后当bob通过 IMAP 或 POP3 登录时,Dovecot 知道 bob 的邮箱是/home/bob/.mail

...但 MTA 也可能将电子邮件路由[email protected]到 Bob 的邮箱。它甚至可能会进入[email protected]鲍勃/home/mary/.mail退出公司并且他的继任者收到他的电子邮件的时间。这完全是 MTA 的工作来决定。

因此,如果没有某种 MTA,您就无法将电子邮件路由到收件箱。


还有更简单的 MTA。 Postfix 的配置相当困难,没有人愿意冒意外错误配置 MTA 并让垃圾邮件发送者滥用的风险。

我将提请您注意 U&L 上的另一个类似问题(不重复?)。 在本地传送邮件的最小 MTA(用于 cron)?


如果您愿意自己动手​​,那么 maildir 和 mbox 的格式都非常简单。尽管 maildir 使用起来要安全得多。传送到 maildir 就像写入tmp目录然后将其移动(重命名)到new目录中一样简单。

当然,这些电子邮件必须格式良好,具有适当的标题,例如From: To: Subject: Date:.示例可以在以下位置找到RFC 5322

答案2

Dovecot 附带了一个特殊的本地投递代理dovecot-lda,因此您可以直接从脚本将邮件发送到本地 Dovecot 邮箱,而无需任何 MTA(如 sendmail 或 postfix):

/usr/local/libexec/dovecot-lda -d user_name <<EOF_emailContent
(email here)
EOF_emailContent

user_name是任何有效的 dovecot 用户,可以是系统用户,也可以是虚拟用户,具体取决于您配置 dovecot 的方式。man dovecot-lda以获得更多选择。

PS 可执行文件的位置dovecot-lda可能会有所不同。在我的 FreeBSD 机器上,它位于/usr/local/libexec/dovecot/dovecot-lda.

PS2。 Dovecot还提供LMTP(本地邮件传输协议)unix套接字。因此,如果您的脚本设计为通过 SMTP 发送电子邮件(也就是说,您已在脚本中实现了 SMTP 通信),那么您可以以某种方式将该通信从本地 TCP 端口 25 重定向到 dovecot 本地 unix 域套接字/var/run/dovecot/lmtp并享受。

相关内容