すべての受信メールをPythonスクリプトにリダイレクトする

すべての受信メールをPythonスクリプトにリダイレクトする

*@example.com私のサーバーで実行され、さまざまなタスクを実行するPythonスクリプトを使用して、すべての着信メールを管理したいと思います。

  • example.com私のサーバーに転送するためにDNS MXレコードを作成しました。

    mx.example.com                   MX     mailforwarder.example.com
    mailforwarder.example.com        A      1.2.3.4
    
  • postfixとeximを使って多くの試行錯誤を受けましたが、何の効果もなかったので、すべて削除しました。apt-get remove postfixこれでapt-get remove exim4、それらの1つを新しくインストールする準備が整いました。仕事?)

*@example.comすべての着信メールをPythonスクリプトに渡す主なステップは何ですか?(付属:MTAにサーバーの外部、インターネット全体などの電子メールを受け入れるように指示)

答え1

procmail問題があると考えられる作成者:Philip Guenther(この場合、.forwardファイルまたはそれに対応するファイルが不要な複雑さをスキップしてプログラムに直接メールを送信できるため、ほとんど役に立ちませんprocmail)。

要約:procmailポートを削除します。このコードは安全ではなく、追加作業の基礎として使用しないでください。

人々は、私が1990年代後半から2001年までにprocmailのアップストリーム管理者だったことを知っています。

したがって、メール転送エージェント(MTA)によっては、他のソリューションが推奨される場合があります。別のオプションは、MTAを使用してローカルファイルまたはIMAPに転送し、プログラムがファイルまたはIMAPを解析できるようにすることです。これの利点は、電子メールを受信し続けてどこかに保存できることです。プログラムにバグがある場合、または実行に失敗した場合はどうなりますか?リアルタイムメール配信より問題が少ない..

輸出入銀行

おそらくSendmail.forwardメソッドを複製するか、Eximeseでこれを正しく実行する方法を見つけてください。 (エクシム文書を掘り下げるには時間がかかりそうだったので中断しました。)elspyMILTERモードでSMTPチェックを実行するには...

サフィックス

https://serverfault.com/questions/258469/how-to-configure-postfix-to-pipe-all-incoming-email-to-a-script#258491

マブソサ、長くて複雑に見えますね。

メールを送信

mailertableドメイン(および.domain必要に応じてサブドメイン)のすべてのメールをローカルユーザーに転送するには、ここにエントリを設定します。jdoe

example.com     local:jdoe
.example.com    local:jdoe

次に、.forwardユーザーが必要なコードを実行できるようにファイルを設定します。

$ cat ~jdoe/.forward
"|/etc/smrsh/process"
$ 

これは簡単かもしれません。

$ cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$ 

電子メールがstdinを介して入ってくるからです(複数のprocessインスタンスが同時に実行されている場合は悪いかもしれません。おそらく、実際のコードがこれらの競合状態を処理する可能性がありますか?)。この方法は、MTA がすべてのメールを特定のユーザーにリダイレクトできるようにするという前提で、Sendmail の転送構文を複製する他の MTA でも機能します。

これはmailertableサポートが有効になってconfFORWARD_PATH設定され、Sendmailがコードを実行できるようにします(smrsh(8)ただし、一部のベンダーはドキュメントを更新せずにディレクトリを変更できることに注意してください(実行がstrings /the/path/to/smrsh | fgrep /役に立つかもしれません))。 selinuxのようなものが問題を引き起こさないと仮定します。

Sendmailのもう一つのオプションはMILTERを使うことです。MIMEディパンそこで必要なビジネスロジックを実行します。 (他のさまざまなMTAはMILTERをサポートするか、同様の機能を持っています。)

簡易メール転送プロトコルデーモン(OpenBSD)

一目でsmtpd.conf(5)(OpenBSD 6.4の変更に合わせて更新)

action "mymda" mda "/path/to/your/command" user jdoe
match from any for domain example.com action "mymda"

答え2

これは非常に一般的な質問のようです...この質問への答えはすでに発見されており、ここに私が提案するものがあります。 Procmailはローカル配送代理店です。私の考えでは何かがネットワークからメールを受信し、ローカル配信やその他のフィルタリングのためにprocmailに転送したことを意味します。この場合、postfixはまさにそれです。本番環境でpostfixを実行した後、これは信頼できるツールであり、カスタムメール処理に非常に柔軟です。

https://serverfault.com/questions/258469/how-to-configure-postfix-to-pipe-all-incoming-email-to-a-script#258491

答え3

私はメールボックススタックにPostfixとDovecotを使用するのが好きです。これらのソフトウェアをインストールした後に特定のアドレスに送信されたメッセージを受信したら、次の手順でスクリプトを実行できます。

  1. ディレクトリ(たとえばmail_processor.py)にスクリプトを作成します/usr/lib/dovecot/sieve-execute/

    #!/usr/bin/python3
    from sys import stdin
    with open('/var/log/mail_processor.log', 'a') as logfile:
        for line in stdin:
            print(line.rstrip(), file=logfile)
    
    • スクリプトとターゲットファイルに正しい権限があることを確認してください。

      $ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py
      $ chmod 0777 /var/log/mail_processor.log
      
  2. プラグインの有効化sieve_extprograms:

    • 以下を使用して変更された\etc\dovecot\conf.d\90-sieve.confプラグインセクション:

      sieve_extensions = +vnd.dovecot.execute
      sieve_plugins = sieve_extprograms
      sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
      
    • 鳩を再ロードしてください:

      $ service dovecot restart
      
  3. シーブフィルタを作成します(例: Roundcube で goto settings-> filters-> actions-> edit filter set)。

    require ["vnd.dovecot.execute"];
    # rule:[mail processing]
    if true
    {
        execute :pipe "mail_processor.py";
    }
    

このフィルタを使用してメールボックスに転送されたすべてのメッセージはパイプラインを通過しますmail_processor.py

Pigeonhole Sieve: Extprograms プラグイン参考までに

関連情報