web-dev-qa-db-ja.com

受信専用メールサーバーを設定し、受信メールと添付ファイルを処理する

Ubuntu14.04サーバーで次のシナリオを作成したいと思います。

  • メールの受信のみを処理するメールサーバー(または「メール転送エージェント」と呼ばれますか?)を設定します。そのサーバーからのメール送信を設定する必要はありません。
  • 受信メールの基本的なフィルタリングを実行します(メールに適切な添付ファイルがあるかどうかを確認します-正確に特定の拡張子を持つファイル)
  • 添付ファイルを特定のフォルダにのみ保存する
  • 処理されたメッセージを削除します

私はメールサーバーについてほとんど何も知らず、Postfixで少し遊んでみましたが、正しく理解していれば、メールのフィルタリングと処理のためのより良い解決策がいくつかありますか?私はPythonPHPを知っているので、これらの言語の1つでフィルタリング/処理を処理できましたが、どこから始めればよいのかまだわかりません。
Pythonスクリプトでcronジョブを実行し、添付ファイルを保存した直後に処理済みメッセージを削除するのではなく、可能であれば受信後すぐに受信メールを処理したいと思います。
この特定の時点では、セキュリティやスパム/ウイルス対策を設定する必要はありません。

このワークフローの設定方法について少し混乱しているので、少なくとも各ステップの開始点を尋ねたいと思います。また、さらに読むためのリンクも大歓迎です!私は完全な解決策を求めていませんが、このシナリオで役立つ可能性のあるパッケージに関するいくつかのヒントは本当にありがたいです。

3
errata

これをサーバーで実行することを指定します。そのマシンが永続的なIPアドレス上にないため、特定のメールドメインに送信されたメールを処理できる場合は、メールを処理するプロバイダーからのメールをピックアップするように設定する必要があります。

処理後にメッセージを削除することを指定しているため、プロバイダーがすべてのメールを1つのユーザーアカウントに収集する必要はありません。そのため、これを設定する必要があります。

次に、fetchmailまたは同様のプログラムを使用してメールを受信できます。このプログラムは、ローカル接続のみをリッスンしているローカルで実行されているpostfixと通信します。 (サーバーに固定IPアドレスがあり、外部stmp接続を処理できる場合は、この手順をスキップして残りの手順のみを実行できます)。

postfixは、メールボックスコマンドとしてprocmailを使用するように構成する必要があります(main.cf内:

mailbox_command = procmail -a "$EXTENSION"

fetchmailは、処理を行う一部のユーザーに対して、通常のcronジョブとして実行する必要があります(プロバイダーに毎分確認します)。そのユーザーは、フィルタリングを実行し、次のようなエントリを使用してスクリプトに電子メールを渡すことができる~/.procmailrcファイルを持っている必要があります。

:0
$ ^Subject:.*some_text_that_has_to_be_in_the_subject_to_be_valid_for_processing
| /usr/local/bin/your_program 

ここで、your_programはファイル形式(ヘッダーの後に本文が続く)を処理できる必要があります。 MIME添付ファイルの複雑さを処理するために、pythonとその標準 email モジュールを使用します。

ヒント:開発中に、受信データ(your_program上)をファイルxyzに完全に保存するようにsys.stdinしてください。そうすれば、それを確認して、(your_command < xyzを実行するだけで)独立して開発できるため、実行する必要はありません。プロセスのその段階をテストするために添付ファイル付きの電子メールを送信する手間。

3
Anthon