Jak přeposílat e-maily na více serverů SMTP

Jak přeposílat e-maily na více serverů SMTP
Jak přeposílat e-maily na více serverů SMTP

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

  1. Jak mohu nakonfigurovat více záznamů MX v DNS?
  2. 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ě.
  3. Jaký je účel transport_maps směrnice?
  4. 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.
  5. Umět sender_dependent_relayhost_maps pomoci v tomto scénáři?
  6. 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ů.
  7. Jak to dělá virtual_alias_maps pracovat v Postfixu?
  8. 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ů.
  9. Jaká je role recipient_bcc_maps?
  10. 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.
  11. Mohu použít Amavisd-new s Postfixem pro přeposílání e-mailů?
  12. 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ů.
  13. Co je master.cf soubor používaný pro?
  14. The master.cf soubor v Postfixu definuje procesy doručování pošty a jejich konfigurace, včetně vlastních transportních služeb.
  15. Jak mohu aktualizovat transport map databáze?
  16. Použijte postmap /etc/postfix/transport příkaz k vytvoření nebo aktualizaci binární databáze ze souboru transportní mapy.
  17. Proč je opětovné načtení Postfixu důležité?
  18. Opětovné načtení Postfixu pomocí systemctl reload postfix aplikuje změny konfigurace bez zastavení služby a zajišťuje hladký provoz.
  19. co je smtplib používané v Pythonu?
  20. 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í.