
我想知道是否可以透過將文件寫入硬碟來建立郵件訊息並將其放入後綴佇列中。
目前我有一個腳本,它使用套接字連接來轉儲數據,但如果我可以將其直接寫入硬碟,這將大大加快速度。這可能嗎?
答案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
)也是一種選擇。但是,如果您的真正瓶頸是撥號 Internet 連線等,那麼在訊息提交中節省的一秒鐘可能會被噪音所淹沒。