メッセージをファイルに書き込むことでキューに入れることは可能ですか?

メッセージをファイルに書き込むことでキューに入れることは可能ですか?

ハードドライブにファイルを書き込むだけで、メール メッセージを作成して 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 秒の節約はノイズに埋もれてしまう可能性があります。

関連情報