
*@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でこれを正しく実行する方法を見つけてください。 (エクシム文書を掘り下げるには時間がかかりそうだったので中断しました。)elspy
MILTERモードでSMTPチェックを実行するには...
サフィックス
マブソサ、長くて複雑に見えますね。
メールを送信
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を実行した後、これは信頼できるツールであり、カスタムメール処理に非常に柔軟です。
答え3
私はメールボックススタックにPostfixとDovecotを使用するのが好きです。これらのソフトウェアをインストールした後に特定のアドレスに送信されたメッセージを受信したら、次の手順でスクリプトを実行できます。
ディレクトリ(たとえば
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
プラグインの有効化
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
シーブフィルタを作成します(例: 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
。