是否可以通过将消息写入文件来对其进行排队?

是否可以通过将消息写入文件来对其进行排队?

我想知道是否可以通过将文件写入硬盘来创建邮件并将其放入 postfix 队列。

目前我有一个使用套接字连接转储数据的脚本,但如果我可以直接将其写入硬盘,这将大大加快速度。这可能吗?

答案1

您不应该像那样挤进队列,但是,您可以使用命令行邮件工具,例如:

sendmail -i [recipient@address] < [file]

我认为应该将所有内容保留在服务器端直到 Postfix 尝试传递为止。

答案2

是的,使用 maildrop 队列:http://www.postfix.org/MAILDROP_README.html#maildrop_queue

Postfix 队列只是文件系统中的目录;排队项目是从一个目录(队列)移动到另一个目录(队列)的 inode;该文件使用自定义二进制格式,其中包含处理所需的所有元数据。

存在一个 perl 模块邮件::Postfix::Postdrop将邮件粘贴在 maildrop 目录中。

Mail::Postfix::Postdrop - 将邮件注入 Postfix maildrop 目录

  use Mail::PostFix::Postdrop 'inject';   
  inject $message, Sender     => '[email protected]',
                   Recipients => [ qw([email protected] [email protected]) ];

您可以使用后退本身(这就是 'sendmail' 命令如何将邮件注入队列):

 The  postdrop(1)  command  creates  a file in the maildrop
 directory and copies its standard input to the file.

我也没有这样做;如果您在这方面有任何进展,请告诉我们。

答案3

以前,人们可以用 Postfix 做到这一点。毕竟,maildrop 只不过是一个文件写入的目录。问题是,人们可以用一个全球可写的 maildrop 目录玩各种各样的把戏。(早在 Postfix 首次编写时人们就知道这一点。)因此,在正确设置的系统中,您不能只写出文件。

这几乎肯定不是你的瓶颈。毕竟,我们谈论的是电子邮件,其中有一个叫“互联网”的大东西,它通常是系统中最慢的部分。我强烈怀疑你没有分析你的瓶颈,看看它们是什么,在哪里,你认为直接写入假脱机文件会“大大加快速度”的想法是基于希望而不是测量。

使用 SMTP 管道可以相当轻松地消除 SMTP 提交对话中的任何延迟。而且,正如另一个答案中提到的,使用 Postfix 的sendmail实用程序(在本例中只不过是一个包装器postdrop)也是一个选择。但是,如果您的真正瓶颈是拨号互联网连接,那么在消息提交中节省的一秒钟可能会被噪音所淹没。

相关内容