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

Python and Postfix

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, , používá knihovna pro zpracování odesílání e-mailů. Dováží se 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 vytvořit a připojit tělo e-mailu. Poté iteruje seznam serverů SMTP a odešle e-mail každému z nich .

Na straně Postfixu konfigurace zahrnuje úpravu soubor pro definování vlastní přepravní služby, , který používá skript Python. The soubor je aktualizován tak, aby zahrnoval transportní mapu, která je specifikována v /etc/postfix/transport. Příkaz vytvoří binární databázi z transportní mapy a 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 , 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 a 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 nebo 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ů.

  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 směrnice?
  4. The 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 pomoci v tomto scénáři?
  6. Ano, 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á pracovat v Postfixu?
  8. The 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 ?
  10. The 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 s Postfixem pro přeposílání e-mailů?
  12. Ano, 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 soubor používaný pro?
  14. The 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 databáze?
  16. Použijte 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í aplikuje změny konfigurace bez zastavení služby a zajišťuje hladký provoz.
  19. co je používané v Pythonu?
  20. The 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ů.

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í.