我想知道是否可以通过将文件写入硬盘来创建邮件并将其放入 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
)也是一个选择。但是,如果您的真正瓶颈是拨号互联网连接,那么在消息提交中节省的一秒钟可能会被噪音所淹没。