如何在 Linux 上发送原始邮件消息?

如何在 Linux 上发送原始邮件消息?

如果我有 MIME 消息的完整内容,Linux 上发送消息的最佳实用程序是什么? MIME 消息将包括完整的标头和邮件正文,例如:

Received: (qmail 32389 invoked by uid 0); 13 Jun 2017 09:24:51 -0400
Date: Tue, 13 Jun 2017 09:24:51 -0400
From: [email protected]
To: [email protected]
Subject: Test Email
Message-ID: <593fe7a3.IgSR+/BLy+NYXlVZ%[email protected]>
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

The mail body goes here

我希望能够将上述内容提供给命令行实用程序,然后该实用程序将“按原样”重新处理消息,而无需解析发件人、主题等字段。它应该通过指定的外部 SMTP 发送消息服务器(不是本地服务器的邮件队列)。

我可以使用什么命令行实用程序来实现此目的?

答案1

您可以使用sendmailpostfix/exim/... 提供的“sendmail Look alike”。

/usr/sbin/sendmail -i -- $recipients < message_file

-i- 不要特殊对待带有前导点的行


您可以使用更奇特的“sendmail Look alike”(例如由 提供msmtp)通过另一个 smtp 主机直接发送,无需“系统范围”配置。
msmtp是在 debian 中分发的,因此它很可能包含在其他 Linux 发行版中。

https://packages.debian.org/search?searchon=names&keywords=msmtp

https://packages.debian.org/bookworm/msmtp

软件包:msmtp(...)
支持服务器配置文件的轻型 SMTP 客户端

msmtp 是一个 SMTP 客户端,可用于从 Mutt 和可能的其他 MUA(邮件用户代理)发送邮件。它将邮件转发到 SMTP 服务器(例如免费邮件提供商),由该服务器负责最终投递。使用配置文件,可以轻松地将其配置为使用具有不同配置的不同 SMTP 服务器,这使其成为移动客户端的理想选择。

答案2

不幸的是sendmailmailx不允许您指定不同的 SMTP 服务器。但你可以将 Andrzej 的答案与 ssh 结合起来。尽管我将使用该-t选项从正在读取的文件/数据中读取收件人。

cat <messagefile> | ssh user@mailhost /usr/sbin/sendmail -i -t

<messagefile>是包含 MIME 消息的文件,mailhost 是 SMTP 服务器。user是 SMTP 服务器上的登录 ID。

答案3

蜗牛是一个大大增强的替代方案mailx,除了许多其他改进之外,还允许您在命令行上指定 SMTP 服务器。

例如

s-nail -S "smtp=smtp://remote-server:port" < message.txt

它甚至支持加密的 SMTP(使用 STARTTLS、SMTPS 或 SUBMISSION)和 SMTP AUTH。man s-nail详情请参阅。

s-nail可以为多个 Linux 发行版预先打包(例如,在 debian apt-get install s-nail.

相关内容