デュアル SMTP 転送の設定
同一のユーザー アカウントを使用して複数の電子メール サーバーを管理するのは困難な場合があります。このシナリオでは、電子メールが example.com のユーザーに送信されると、james サーバーと winmail サーバーの両方で受信され、電子メールの内容が変更されないことが保証される必要があります。
DNS で複数の MX レコードを構成するなどの一般的なソリューションでは、example.com を一度に 1 つのサーバーにしか送信できないため、不十分です。 Postfix を使用してローカル ストレージを使用せずに両方のサーバーに電子メールを転送する方法は複雑であることが判明し、smtplib を使用したスクリプトのようなソリューションが必要になりますが、これは信頼性が低い可能性があります。より良い代替案を検討してみましょう。
| 指示 | 説明 |
|---|---|
| import smtplib | Python を使用して電子メールを送信するための Simple Mail Transfer Protocol ライブラリをインポートします。 |
| import sys | コマンドライン引数を取得するために使用される、システム固有のパラメーターと関数モジュールをインポートします。 |
| from email.mime.text import MIMEText | MIMEText クラスをインポートして、テキストベースの電子メール メッセージを作成します。 |
| from email.mime.multipart import MIMEMultipart | MIMEMultipart クラスをインポートして、マルチパート電子メール メッセージを作成します。 |
| msg.attach(MIMEText('text', 'plain')) | 電子メール メッセージにプレーン テキストの本文を添付します。 |
| with smtplib.SMTP(server) as smtp | SMTP サーバーへの接続を開き、電子メールの送信後に接続が適切に閉じられるようにします。 |
| postmap /etc/postfix/transport | Postfix がメールルーティングに使用するバイナリデータベースをトランスポートマップファイルから生成します。 |
| systemctl reload postfix | サービスを停止せずに Postfix 設定をリロードし、加えられた変更を適用します。 |
Postfix と Python の統合について理解する
提供されたスクリプトは、電子メールを 2 つの SMTP サーバーに転送し、両方のサーバーが同じ電子メールを受信できるようにするように設計されています。 Python スクリプト、 、を使用します。 電子メール送信を処理するライブラリ。輸入する 送信者や受信者などのコマンドライン引数を取得します。スクリプトは次を使用して電子メールを構築します。 from email.mime.text import MIMEText そして メール本文を作成して添付します。次に、SMTP サーバーのリストを反復処理し、次を使用して各サーバーに電子メールを送信します。 。
Postfix 側では、設定には次の変更が含まれます。 カスタム トランスポート サービスを定義するファイル、 、Python スクリプトを使用します。の ファイルは、で指定されているトランスポート マップを含むように更新されます。 /etc/postfix/transport。コマンド トランスポート マップからバイナリ データベースを作成し、 Postfix サービスを停止せずに設定変更を適用します。この設定により、example.com に送信された電子メールはすべて Python スクリプトによって処理され、両方の SMTP サーバーに転送されます。
Python を使用して複数の SMTP サーバーにメールを転送する
Python を使用して SMTP 転送を処理する
# multi_forward.pyimport smtplibimport sysfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartsender = sys.argv[1]recipient = sys.argv[2]def forward_email(sender, recipient):msg = MIMEMultipart()msg['From'] = sendermsg['To'] = recipientmsg['Subject'] = 'Forwarded email'msg.attach(MIMEText('This is the body of the email', 'plain'))# SMTP serverssmtp_servers = ['james.example.com', 'winmail.example.com']for server in smtp_servers:with smtplib.SMTP(server) as smtp:smtp.sendmail(sender, recipient, msg.as_string())if __name__ == '__main__':forward_email(sender, recipient)
Python スクリプトを使用するように Postfix を構成する
カスタムメール転送のための Postfix 設定
# /etc/postfix/master.cfmulti_forward unix - n n - - pipeflags=Rhu user=nobody argv=/usr/local/bin/multi_forward.py ${sender} ${recipient}# /etc/postfix/main.cftransport_maps = hash:/etc/postfix/transport# /etc/postfix/transportexample.com multi_forward:# Update transport mappostmap /etc/postfix/transport# Reload Postfixsystemctl reload postfix
追加ツールによる Postfix 機能の強化
複数の SMTP サーバーへの電子メールの転送を実現する別のアプローチには、追加の Postfix ツールと構成を使用することが含まれます。そのようなツールの 1 つが Postfix です。 を使用すると、送信者のアドレスに基づいてさまざまなリレー ホストを指定できます。この機能は通常、送信メールを異なるリレー ホスト経由でルーティングするために使用されますが、創造的な構成を使用してユースケースに適応させることができます。たとえば、次の組み合わせ そして 電子メールを複製して別のアドレスに転送し、それぞれのサーバーにルーティングするために使用できます。
さらに、Postfix を次のようなメールフィルターと統合します。 または 電子メールの処理とルーティングをより柔軟に行うことができます。これらのフィルターは電子メールが Postfix を通過するときに処理できるため、カスタム スクリプトまたはルールでメッセージを複製し、複数の宛先に転送できます。この設定は単純な Python スクリプトを使用するよりも複雑になる可能性がありますが、堅牢な電子メール処理機能を必要とする環境に優れた信頼性と拡張性を提供できます。
- DNS で複数の MX レコードを構成するにはどうすればよいですか?
- 残念ながら、DNS MX レコードは優先レベルごとに 1 つのサーバーへのマッピングのみをサポートしているため、このアプローチは複数のサーバーに同時に転送する場合には機能しません。
- の目的は何ですか 指令?
- の Postfix のディレクティブは、電子メール アドレスまたはドメインを特定のメール転送方法および宛先にマッピングすることを指定します。
- できる このシナリオに役立ちますか?
- はい、 は、送信者のアドレスに基づいてさまざまなリレー ホストを介して電子メールをルーティングできますが、複数のサーバーに転送するには創造的に適応させる必要があります。
- どうやって Postfixで働いていますか?
- の ディレクティブを使用すると、Postfix が電子メール アドレスを他のアドレスにマップできるようになり、電子メールの転送とリダイレクトが可能になります。
- の役割は何ですか ?
- の ディレクティブを使用すると、Postfix が受信メールに BCC 受信者を自動的に追加できるようになり、メッセージを複製する場合に便利です。
- 使ってもいいですか メール転送に Postfix を使用しますか?
- はい、 Postfix と統合してカスタム フィルタリングおよび転送ルールを適用し、電子メール処理をより詳細に制御できます。
- とは何ですか ファイルは何に使用されますか?
- の Postfix のファイルは、カスタム トランスポート サービスを含む、メール配信プロセスとその構成を定義します。
- 更新するにはどうすればよいですか データベース?
- 使用 トランスポート マップ ファイルからバイナリ データベースを作成または更新するコマンド。
- Postfix のリロードが重要なのはなぜですか?
- Postfix をリロードする サービスを停止することなく構成変更を適用するため、スムーズな運用が保証されます。
- とは Pythonで使われるの?
- の Python のライブラリは SMTP 経由で電子メールを送信するために使用され、スクリプトで電子メール送信をプログラム的に処理できるようになります。
メッセージを複数の SMTP サーバーに転送するように Postfix を設定するには、カスタム スクリプトと詳細な Postfix 設定の組み合わせが必要になります。 DNS や単純な Python スクリプトを使用した最初の試みでは必要な信頼性が得られない可能性がありますが、高度な Postfix 機能と Amavisd-new や Procmail などのツールを統合すると、より堅牢なソリューションが提供されます。トランスポート マップ、仮想エイリアス マップ、および受信者 BCC マップを慎重に構成することで、james サーバーと winmail サーバーの両方にシームレスかつ効率的にメッセージを転送できます。このアプローチにより、電子メール インフラストラクチャの回復力が維持され、複雑なルーティング要件を処理できることが保証されます。