web-dev-qa-db-ja.com

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

ハードドライブにファイルを書き込むだけで、メールメッセージを作成してPostfixキューに入れることができるのではないかと思います。

現在、ソケット接続を使用してデータをダンプするスクリプトがありますが、ハードドライブに直接書き込むことができれば、処理速度が大幅に向上します。これは可能ですか?

2
Kyle Buser

このようにキューに詰め込むことは想定されていませんが、次のようなコマンドラインメールツールを使用できます。

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

postfixが配信を試みるまで、すべてをサーバー側に保持する必要があると思います。

4
OldWolf

はい、メールドロップキューを使用します: http://www.postfix.org/MAILDROP_README.html#maildrop_queue

Postfixキューはファイルシステム内の単なるディレクトリです。キューに入れられたアイテムは、あるディレクトリ(キュー)から別のディレクトリに移動するiノードです。ファイルは、ファイルの処理に必要なすべてのメタデータを含むカスタムバイナリ形式を使用します。

メールをmaildropディレクトリに貼り付けるPerlモジュール Mail :: Postfix :: Postdrop が存在します。

Mail :: Postfix :: Postdrop-Postfixmaildropディレクトリにメールを挿入します

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

postdrop 自体を使用できる場合があります(これは、「sendmail」コマンドがメールをキューに挿入する方法です):

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

私もしていません。運が良ければお知らせください。

3
mikewaters

昔々、Postfixでまさにそれを行うことができました。結局のところ、メールドロップはファイルが書き込まれるディレクトリにすぎません。問題は、誰でも書き込み可能なメールドロップディレクトリであらゆる種類のトリックをプレイできることです。 (これは、Postfixが最初に作成されたときでさえ、長い間知られていました。)したがって、適切にセットアップされたシステムでは、ファイルを単に書き出すことはできません。

これは、そもそもあなたのボトルネックではないことはほぼ間違いありません。結局のところ、これは私たちが話している電子メールであり、システムの最も遅い部分であることが多い「インターネット」と呼ばれる大きなものがあります。ボトルネックが何でどこにあるかを分析しておらず、スプールファイルに直接書き込むと「処理速度が大幅に向上する」という考えは、測定ではなく希望に基づいていると強く思います。

SMTPパイプラインを使用したSMTP送信ダイアログの遅延を取り除くのはかなり簡単です。また、別の回答で述べたように、Postfixのsendmailユーティリティ(この場合はpostdropのラッパーにすぎません)を使用することもオプションです。ただし、実際のボトルネックがダイヤルアップインターネット接続などである場合、メッセージ送信で1秒節約することはノイズで失われる可能性があります。

2
JdeBP