web-dev-qa-db-ja.com

新しいメールが到着したときにスクリプトを実行する(Postfix / Dovecot)

メールサーバー(Postfix/Dovecotを使用してDebianで実行)で新着メールを受信したときにバックアップスクリプト(.sh)を実行したい。このトピックに関する投稿をたくさん見つけましたが、実用的な解決策を教えてくれる人は誰もいません。ここで私がテストした最後の解決策: https://stackoverflow.com/questions/27230324/run-script-when-postfix-dovecot-get-new-mail 。誰か提案がありますか?

編集:新しいメールを受信したら、bashスクリプトを実行し、postfix/dovecotにこの新しいメールを〜/ Maildirフォルダーに配置させたいと思います。標準的なプロセスを妨げない一種の「ミドルウェア」を探しています

1
soywod

メールサーバーが受信(および送信)したすべてのメッセージのバックアップを保持する方法に関する実際の質問の場合、答えはオプション always_bcc そしてメールボックスを指定します。

設定に応じて、そのメールボックス(またはエイリアス)で受信したメッセージをスクリプトに転送して、さらに処理することができます。

たとえば / etc/aliases

 mailbox: "| /usr/local/bin/script.pl"

コメントに基づいて編集

かなり古い学校ですが、メールユーザーがシステムユーザーでホームディレクトリを持っている場合、古いsendmailスタイルの.forwardファイルがありますが、それでも postfixでサポートされています 。構文は少し難解ですが、次の内容の~mailuser/.forwardは、メッセージをユーザーのメールストアに配信し、スクリプトに転送します。

\mailbox, "| /usr/local/bin/script.pl"
2
HBruijn

たぶん、あなたは必要です postfix milter

Smtpd_miltersパラメーターを使用して、SMTPのみのMilterアプリケーション(複数存在する場合があります)を指定します。各Milterアプリケーションは、リスニングソケットの名前で識別されます。他のMilter構成オプションについては、後のセクションで説明します。 Milterアプリケーションは指定された順序で適用され、コマンドを拒否する最初のMilterアプリケーションは、他のMilterアプリケーションからの応答をオーバーライドします。

/etc/postfix/main.cf:
    # Milters for mail that arrives via the smtpd(8) server.
    # See below for socket address syntax.
    smtpd_milters = inet:localhost:portnumber ...other filters...

ソケットをリッスンするための一般的な構文は次のとおりです。

unix:pathname

    Connect to the local UNIX-domain server that is bound to the specified pathname. If the smtpd(8) or cleanup(8) process runs chrooted, an absolute pathname is interpreted relative to the Postfix queue directory.
inet:Host:port

    Connect to the specified TCP port on the specified local or remote Host. The Host and port can be specified in numeric or symbolic form.

    NOTE: Postfix syntax differs from Milter syntax which has the form inet:port@Host.

使用 unix:pathname

0
Smithson