
ハードドライブにファイルを書き込むだけで、メール メッセージを作成して postfix キューに入れることができるかどうか疑問に思っています。
現在、ソケット接続を使用してデータをダンプするスクリプトがありますが、ハードドライブに直接書き込むことができれば、処理速度が大幅に向上します。これは可能ですか?
答え1
このようにキューに詰め込むことはできませんが、次のようなコマンド ライン メール ツールを使用できます。
sendmail -i [recipient@address] < [file]
postfix が配信を試みるまで、すべてをサーバー側に保持する必要があると思います。
答え2
はい、メールドロップキューを使用します:http://www.postfix.org/MAILDROP_README.html#maildrop_queue
Postfix キューはファイルシステム内の単なるディレクトリです。キューに入れられたアイテムは、あるディレクトリ (キュー) から別のディレクトリに移動する inode です。ファイルは、処理に必要なすべてのメタデータを含むカスタムのバイナリ形式を使用します。
Perlモジュールが存在するメール::Postfix::Postdropメールをメールドロップ ディレクトリに保存します。
Mail::Postfix::Postdrop - メールを Postfix メールドロップ ディレクトリに挿入する
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 でまさにそれを行うことができました。結局のところ、メールドロップはファイルが書き込まれるディレクトリにすぎません。問題は、誰でも書き込み可能なメールドロップ ディレクトリであらゆる種類のトリックを実行できることです。(これは、Postfix が最初に書かれた当時からずっと前から知られていました。) したがって、適切に設定されたシステムでは、ファイルを書き出すことはできません。
そもそも、これがボトルネックではないことはほぼ確実です。結局のところ、ここで話題にしているのは電子メールであり、そこには「インターネット」と呼ばれる大きなものがあり、それがシステムの中で最も遅い部分であることがよくあります。ボトルネックが何で、どこにあるかを分析していないのではないか、また、スプール ファイルに直接書き込むと「速度が大幅に向上する」というあなたの考えは、測定ではなく期待に基づいているのではないか、と強く疑っています。
SMTP パイプラインを使用すると、SMTP 送信ダイアログの遅延をなくすのは非常に簡単です。また、別の回答で述べたように、Postfix のsendmail
ユーティリティ (この場合、ラッパーに過ぎませんpostdrop
) を使用するのもオプションです。ただし、実際のボトルネックがダイヤルアップ インターネット接続などである場合、メッセージ送信の 1 秒の節約はノイズに埋もれてしまう可能性があります。