メールサーバー(Postfix/Dovecotを使用してDebianで実行)で新着メールを受信したときにバックアップスクリプト(.sh)を実行したい。このトピックに関する投稿をたくさん見つけましたが、実用的な解決策を教えてくれる人は誰もいません。ここで私がテストした最後の解決策: https://stackoverflow.com/questions/27230324/run-script-when-postfix-dovecot-get-new-mail 。誰か提案がありますか?
編集:新しいメールを受信したら、bashスクリプトを実行し、postfix/dovecotにこの新しいメールを〜/ Maildirフォルダーに配置させたいと思います。標準的なプロセスを妨げない一種の「ミドルウェア」を探しています
メールサーバーが受信(および送信)したすべてのメッセージのバックアップを保持する方法に関する実際の質問の場合、答えはオプション always_bcc
そしてメールボックスを指定します。
設定に応じて、そのメールボックス(またはエイリアス)で受信したメッセージをスクリプトに転送して、さらに処理することができます。
たとえば / etc/aliases :
mailbox: "| /usr/local/bin/script.pl"
コメントに基づいて編集:
かなり古い学校ですが、メールユーザーがシステムユーザーでホームディレクトリを持っている場合、古いsendmailスタイルの.forward
ファイルがありますが、それでも postfixでサポートされています 。構文は少し難解ですが、次の内容の~mailuser/.forward
は、メッセージをユーザーのメールストアに配信し、スクリプトに転送します。
\mailbox, "| /usr/local/bin/script.pl"
たぶん、あなたは必要です 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