Nastavení duálního přesměrování SMTP
Správa více e-mailových serverů se stejnými uživatelskými účty může být náročná. V tomto scénáři, když je e-mail odeslán uživateli na example.com, musí jej přijmout servery james i winmail, což zajistí, že obsah e-mailu zůstane nezměněn.
Běžná řešení, jako je konfigurace více záznamů MX v DNS, selhávají, protože mohou nasměrovat example.com pouze na jeden server najednou. Použití Postfixu k předávání e-mailů na oba servery bez místního úložiště se ukázalo jako složité, což vedlo k řešením, jako je skriptování pomocí smtplib, které nemusí být spolehlivé. Pojďme prozkoumat lepší alternativy.
Příkaz | Popis |
---|---|
import smtplib | Importuje knihovnu Simple Mail Transfer Protocol pro odesílání e-mailů pomocí Pythonu. |
import sys | Importuje modul parametrů a funkcí specifických pro systém, který se používá k získání argumentů příkazového řádku. |
from email.mime.text import MIMEText | Importuje třídu MIMEText pro vytváření textových e-mailových zpráv. |
from email.mime.multipart import MIMEMultipart | Importuje třídu MIMEMultipart za účelem vytvoření vícedílných e-mailových zpráv. |
msg.attach(MIMEText('text', 'plain')) | K e-mailové zprávě připojí tělo ve formátu prostého textu. |
with smtplib.SMTP(server) as smtp | Otevře připojení k serveru SMTP a zajistí jeho správné uzavření po odeslání e-mailu. |
postmap /etc/postfix/transport | Generuje binární databázi ze souboru transportní mapy, kterou používá Postfix pro směrování pošty. |
systemctl reload postfix | Znovu načte konfiguraci Postfixu bez zastavení služby s použitím všech provedených změn. |
Pochopení integrace Postfixu a Pythonu
Poskytnuté skripty jsou navrženy tak, aby přeposílaly e-maily na dva servery SMTP a zajistily, že oba servery obdrží stejný e-mail. skript Python, multi_forward.py, používá import smtplib knihovna pro zpracování odesílání e-mailů. Dováží se sys získat argumenty příkazového řádku, jako je odesílatel a příjemce. Skript vytvoří e-mail pomocí from email.mime.text import MIMEText a from email.mime.multipart import MIMEMultipart vytvořit a připojit tělo e-mailu. Poté iteruje seznam serverů SMTP a odešle e-mail každému z nich with smtplib.SMTP(server) as smtp.
Na straně Postfixu konfigurace zahrnuje úpravu /etc/postfix/master.cf soubor pro definování vlastní přepravní služby, multi_forward, který používá skript Python. The /etc/postfix/main.cf soubor je aktualizován tak, aby zahrnoval transportní mapu, která je specifikována v /etc/postfix/transport. Příkaz postmap /etc/postfix/transport vytvoří binární databázi z transportní mapy a systemctl reload postfix použije změny konfigurace bez zastavení služby Postfix. Toto nastavení zajišťuje, že jakýkoli e-mail odeslaný na example.com je zpracován skriptem Python a předán na oba servery SMTP.
Předávání e-mailů na více serverů SMTP pomocí Pythonu
Použití Pythonu ke zpracování přesměrování SMTP
# 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)
Konfigurace Postfixu pro použití skriptu Python
Konfigurace Postfixu pro vlastní přeposílání pošty
# /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
Vylepšení funkčnosti Postfixu pomocí dalších nástrojů
Další přístup k přeposílání e-mailů na více serverů SMTP zahrnuje použití dalších nástrojů a konfigurací Postfixu. Jedním z takových nástrojů je Postfix sender_dependent_relayhost_maps, který umožňuje specifikovat různé přenosové hostitele na základě adresy odesílatele. I když se tato funkce obvykle používá ke směrování odchozí pošty přes různé přenosové hostitele, lze ji upravit pro náš případ použití pomocí určité kreativní konfigurace. Například kombinace virtual_alias_maps a recipient_bcc_maps lze použít k duplikování e-mailů a jejich přeposílání na různé adresy, které jsou pak směrovány na příslušné servery.
Navíc integrace Postfixu s poštovním filtrem jako Amavisd-new nebo Procmail může poskytnout větší flexibilitu při zpracování a směrování e-mailů. Tyto filtry mohou zpracovávat e-maily, když procházejí Postfixem, což umožňuje uživatelským skriptům nebo pravidlům duplikovat a předávat zprávy na více míst. I když toto nastavení může být složitější než použití jednoduchého skriptu Python, může nabídnout větší spolehlivost a škálovatelnost pro prostředí vyžadující robustní možnosti zpracování e-mailů.
Běžné otázky a řešení pro přeposílání e-mailů Postfix
- Jak mohu nakonfigurovat více záznamů MX v DNS?
- Záznamy DNS MX bohužel podporují mapování pouze na jeden server na úroveň priority, takže tento přístup nebude fungovat pro předávání na více serverů současně.
- Jaký je účel transport_maps směrnice?
- The transport_maps Direktiva Postfixu určuje mapování e-mailových adres nebo domén na konkrétní metody a cíle přenosu pošty.
- Umět sender_dependent_relayhost_maps pomoci v tomto scénáři?
- Ano, sender_dependent_relayhost_maps může směrovat e-maily přes různé přenosové hostitele na základě adresy odesílatele, ale musí být kreativně přizpůsoben pro přeposílání na více serverů.
- Jak to dělá virtual_alias_maps pracovat v Postfixu?
- The virtual_alias_maps direktiva umožňuje Postfixu mapovat e-mailové adresy na jiné adresy, což umožňuje přeposílání a přesměrování e-mailů.
- Jaká je role recipient_bcc_maps?
- The recipient_bcc_maps direktiva umožňuje Postfixu automaticky přidávat BCC příjemce do příchozích e-mailů, což je užitečné pro duplikování zpráv.
- Mohu použít Amavisd-new s Postfixem pro přeposílání e-mailů?
- Ano, Amavisd-new lze integrovat s Postfixem a aplikovat vlastní pravidla filtrování a předávání, což poskytuje větší kontrolu nad zpracováním e-mailů.
- Co je master.cf soubor používaný pro?
- The master.cf soubor v Postfixu definuje procesy doručování pošty a jejich konfigurace, včetně vlastních transportních služeb.
- Jak mohu aktualizovat transport map databáze?
- Použijte postmap /etc/postfix/transport příkaz k vytvoření nebo aktualizaci binární databáze ze souboru transportní mapy.
- Proč je opětovné načtení Postfixu důležité?
- Opětovné načtení Postfixu pomocí systemctl reload postfix aplikuje změny konfigurace bez zastavení služby a zajišťuje hladký provoz.
- co je smtplib používané v Pythonu?
- The smtplib knihovna v Pythonu se používá pro odesílání e-mailů přes SMTP, což umožňuje skriptům programově zpracovávat přenos e-mailů.
Závěrečné úvahy o duálním předávání serverů
Nastavení Postfixu pro předávání zpráv na více serverů SMTP zahrnuje kombinaci vlastních skriptů a podrobných konfigurací Postfixu. Zatímco počáteční pokusy s použitím DNS nebo jednoduchých skriptů Pythonu nemusí nabídnout požadovanou spolehlivost, integrace pokročilých funkcí a nástrojů Postfixu, jako je Amavisd-new nebo Procmail, může poskytnout robustnější řešení. Pečlivým nastavením transportních map, map virtuálních aliasů a map příjemců BCC můžete zajistit bezproblémové a efektivní předávání zpráv na servery james i winmail. Tento přístup zajišťuje, že vaše e-mailová infrastruktura zůstane odolná a schopná zvládnout složité požadavky na směrování.