Duale SMTP-Weiterleitung einrichten
Die Verwaltung mehrerer E-Mail-Server mit identischen Benutzerkonten kann eine Herausforderung sein. Wenn in diesem Szenario eine E-Mail an einen Benutzer bei example.com gesendet wird, muss sie sowohl von James- als auch von Winmail-Servern empfangen werden, um sicherzustellen, dass der E-Mail-Inhalt unverändert bleibt.
Gängige Lösungen wie die Konfiguration mehrerer MX-Einträge im DNS greifen zu kurz, da sie example.com jeweils nur an einen einzelnen Server weiterleiten können. Die Verwendung von Postfix zum Weiterleiten von E-Mails an beide Server ohne lokalen Speicher hat sich als komplex erwiesen und zu Lösungen wie Skripting mit smtplib geführt, die möglicherweise nicht zuverlässig sind. Lassen Sie uns bessere Alternativen erkunden.
Befehl | Beschreibung |
---|---|
import smtplib | Importiert die Simple Mail Transfer Protocol-Bibliothek zum Senden von E-Mails mit Python. |
import sys | Importiert das systemspezifische Parameter- und Funktionsmodul, das zum Abrufen von Befehlszeilenargumenten verwendet wird. |
from email.mime.text import MIMEText | Importiert die MIMEText-Klasse, um textbasierte E-Mail-Nachrichten zu erstellen. |
from email.mime.multipart import MIMEMultipart | Importiert die MIMEMultipart-Klasse, um mehrteilige E-Mail-Nachrichten zu erstellen. |
msg.attach(MIMEText('text', 'plain')) | Fügt der E-Mail-Nachricht einen Nur-Text-Text hinzu. |
with smtplib.SMTP(server) as smtp | Öffnet eine Verbindung zum SMTP-Server und stellt sicher, dass diese nach dem Senden der E-Mail ordnungsgemäß geschlossen wird. |
postmap /etc/postfix/transport | Erzeugt eine binäre Datenbank aus der Transportzuordnungsdatei, die von Postfix für die E-Mail-Weiterleitung verwendet wird. |
systemctl reload postfix | Lädt die Postfix-Konfiguration neu, ohne den Dienst zu stoppen, und übernimmt alle vorgenommenen Änderungen. |
Verstehen der Postfix- und Python-Integration
Die bereitgestellten Skripte dienen dazu, E-Mails an zwei SMTP-Server weiterzuleiten und sicherzustellen, dass beide Server dieselbe E-Mail erhalten. Das Python-Skript, , nutzt die Bibliothek für den E-Mail-Versand. Es importiert um Befehlszeilenargumente wie Absender und Empfänger abzurufen. Das Skript erstellt die E-Mail mit from email.mime.text import MIMEText Und um den E-Mail-Text zu erstellen und anzuhängen. Anschließend durchläuft es eine Liste von SMTP-Servern und sendet die E-Mail an jeden, der es verwendet .
Auf der Postfix-Seite umfasst die Konfiguration das Ändern von Datei zum Definieren des benutzerdefinierten Transportdienstes, , das das Python-Skript verwendet. Der Die Datei wird aktualisiert und enthält eine Transportzuordnung, die in angegeben ist /etc/postfix/transport. Der Befehl erstellt eine binäre Datenbank aus der Transportkarte und wendet die Konfigurationsänderungen an, ohne den Postfix-Dienst zu stoppen. Dieses Setup stellt sicher, dass jede an example.com gesendete E-Mail vom Python-Skript verarbeitet und an beide SMTP-Server weitergeleitet wird.
Leiten Sie E-Mails mit Python an mehrere SMTP-Server weiter
Verwendung von Python zur Abwicklung der SMTP-Weiterleitung
# multi_forward.py
import smtplib
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender = sys.argv[1]
recipient = sys.argv[2]
def forward_email(sender, recipient):
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recipient
msg['Subject'] = 'Forwarded email'
msg.attach(MIMEText('This is the body of the email', 'plain'))
# SMTP servers
smtp_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)
Postfix für die Verwendung des Python-Skripts konfigurieren
Postfix-Konfiguration für benutzerdefinierte E-Mail-Weiterleitung
# /etc/postfix/master.cf
multi_forward unix - n n - - pipe
flags=Rhu user=nobody argv=/usr/local/bin/multi_forward.py ${sender} ${recipient}
# /etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport
# /etc/postfix/transport
example.com multi_forward:
# Update transport map
postmap /etc/postfix/transport
# Reload Postfix
systemctl reload postfix
Verbesserung der Postfix-Funktionalität mit zusätzlichen Tools
Ein weiterer Ansatz zur Weiterleitung von E-Mails an mehrere SMTP-Server besteht in der Verwendung zusätzlicher Postfix-Tools und -Konfigurationen. Ein solches Tool ist Postfix , was die Angabe verschiedener Relay-Hosts basierend auf der Absenderadresse ermöglicht. Während diese Funktion normalerweise zum Weiterleiten ausgehender E-Mails über verschiedene Relay-Hosts verwendet wird, kann sie mit etwas kreativer Konfiguration an unseren Anwendungsfall angepasst werden. Zum Beispiel eine Kombination aus Und Damit könnten E-Mails dupliziert und an verschiedene Adressen weitergeleitet werden, die dann an die jeweiligen Server weitergeleitet werden.
Darüber hinaus ist die Integration von Postfix mit einem Mailfilter wie z oder könnte mehr Flexibilität bei der Bearbeitung und Weiterleitung von E-Mails bieten. Diese Filter können E-Mails verarbeiten, während sie Postfix passieren, und ermöglichen so benutzerdefinierten Skripten oder Regeln, Nachrichten zu duplizieren und an mehrere Ziele weiterzuleiten. Obwohl diese Einrichtung möglicherweise komplexer ist als die Verwendung eines einfachen Python-Skripts, kann sie eine höhere Zuverlässigkeit und Skalierbarkeit für Umgebungen bieten, die robuste E-Mail-Verarbeitungsfunktionen erfordern.
- Wie kann ich mehrere MX-Einträge im DNS konfigurieren?
- Leider unterstützen DNS-MX-Einträge nur die Zuordnung zu einem Server pro Prioritätsstufe, sodass dieser Ansatz für die gleichzeitige Weiterleitung an mehrere Server nicht funktioniert.
- Was ist der Zweck des Richtlinie?
- Der Die Direktive in Postfix gibt die Zuordnung von E-Mail-Adressen oder Domänen zu bestimmten E-Mail-Transportmethoden und -Zielen an.
- Kann Hilfe in diesem Szenario?
- Ja, kann E-Mails basierend auf der Absenderadresse über verschiedene Relay-Hosts weiterleiten, muss jedoch für die Weiterleitung an mehrere Server kreativ angepasst werden.
- Wie funktioniert Arbeit in Postfix?
- Der Mit der Direktive kann Postfix E-Mail-Adressen anderen Adressen zuordnen und so die Weiterleitung und Umleitung von E-Mails ermöglichen.
- Was ist die Rolle von ?
- Der Mit der Direktive kann Postfix automatisch BCC-Empfänger zu eingehenden E-Mails hinzufügen, was beim Duplizieren von Nachrichten nützlich ist.
- Kann ich benutzen mit Postfix zur E-Mail-Weiterleitung?
- Ja, kann in Postfix integriert werden, um benutzerdefinierte Filter- und Weiterleitungsregeln anzuwenden und so eine bessere Kontrolle über die E-Mail-Verarbeitung zu ermöglichen.
- Was ist der Datei verwendet für?
- Der Die Datei in Postfix definiert die E-Mail-Zustellungsprozesse und ihre Konfigurationen, einschließlich benutzerdefinierter Transportdienste.
- Wie aktualisiere ich die Datenbank?
- Benutzen Sie die Befehl zum Erstellen oder Aktualisieren der Binärdatenbank aus der Transportzuordnungsdatei.
- Warum ist das Neuladen von Postfix wichtig?
- Postfix neu laden mit wendet Konfigurationsänderungen an, ohne den Dienst zu stoppen, und sorgt so für einen reibungslosen Betrieb.
- Was ist in Python verwendet?
- Der Die Bibliothek in Python wird zum Senden von E-Mails über SMTP verwendet und ermöglicht es Skripten, die E-Mail-Übertragung programmgesteuert abzuwickeln.
Das Einrichten von Postfix zum Weiterleiten von Nachrichten an mehrere SMTP-Server erfordert eine Kombination aus benutzerdefinierten Skripten und detaillierten Postfix-Konfigurationen. Während erste Versuche mit DNS oder einfachen Python-Skripten möglicherweise nicht die erforderliche Zuverlässigkeit bieten, kann die Integration erweiterter Postfix-Funktionen und Tools wie Amavisd-new oder Procmail eine robustere Lösung bieten. Durch die sorgfältige Konfiguration von Transport Maps, Virtual Alias Maps und Empfänger-BCC-Maps können Sie eine nahtlose und effiziente Nachrichtenweiterleitung sowohl an James- als auch an Winmail-Server sicherstellen. Dieser Ansatz stellt sicher, dass Ihre E-Mail-Infrastruktur stabil bleibt und komplexe Routing-Anforderungen bewältigen kann.