E-mailek továbbítása több SMTP-kiszolgálóra

E-mailek továbbítása több SMTP-kiszolgálóra
E-mailek továbbítása több SMTP-kiszolgálóra

A kettős SMTP továbbítás beállítása

Több, azonos felhasználói fiókkal rendelkező e-mail szerver kezelése kihívást jelenthet. Ebben a forgatókönyvben, amikor egy e-mailt küldenek egy felhasználónak az example.com webhelyen, azt a james- és a winmail-kiszolgálóknak is meg kell kapniuk, biztosítva, hogy az e-mail tartalma változatlan maradjon.

Az általános megoldások, mint például a több MX rekord konfigurálása a DNS-ben, elmaradnak, mivel egyszerre csak egyetlen szerverre irányíthatják az example.com webhelyet. A Postfix használata az e-mailek mindkét kiszolgálóra történő továbbítására helyi tárhely nélkül bonyolultnak bizonyult, és olyan megoldásokhoz vezetett, mint az smtplib segítségével történő szkriptelés, amely nem biztos, hogy megbízható. Keressünk jobb alternatívákat.

Parancs Leírás
import smtplib Importálja a Simple Mail Transfer Protocol könyvtárat az e-mailek Python használatával történő küldéséhez.
import sys Importálja a rendszerspecifikus paraméterek és függvények modulját, amely a parancssori argumentumok lekérésére szolgál.
from email.mime.text import MIMEText Importálja a MIMEText osztályt szöveges e-mail üzenetek létrehozásához.
from email.mime.multipart import MIMEMultipart Importálja a MIMEMultipart osztályt többrészes e-mail üzenetek létrehozásához.
msg.attach(MIMEText('text', 'plain')) Egyszerű szöveges törzset csatol az e-mail üzenethez.
with smtplib.SMTP(server) as smtp Megnyitja a kapcsolatot az SMTP-kiszolgálóval, és biztosítja, hogy az e-mail elküldése után megfelelően le legyen zárva.
postmap /etc/postfix/transport Bináris adatbázist hoz létre a szállítási térképfájlból, amelyet a Postfix használ a levéltovábbításhoz.
systemctl reload postfix Újratölti a Postfix konfigurációt a szolgáltatás leállítása nélkül, és alkalmazza a változtatásokat.

A Postfix és a Python integráció megértése

A mellékelt szkriptek úgy vannak kialakítva, hogy az e-maileket két SMTP-kiszolgálóra továbbítsák, biztosítva, hogy mindkét szerver ugyanazt az e-mailt kapja. A Python szkript, multi_forward.py, használja a import smtplib könyvtár az e-mail küldés kezelésére. Importál sys parancssori argumentumok, például a feladó és a címzett lekéréséhez. A szkript a segítségével állítja össze az e-mailt from email.mime.text import MIMEText és from email.mime.multipart import MIMEMultipart az e-mail törzsének létrehozásához és csatolásához. Ezután az SMTP-szerverek listáján ismétlődik, és mindegyiknek elküldi az e-mailt with smtplib.SMTP(server) as smtp.

A Postfix oldalon a konfiguráció magában foglalja a /etc/postfix/master.cf fájl az egyedi szállítási szolgáltatás meghatározásához, multi_forward, amely a Python szkriptet használja. A /etc/postfix/main.cf fájl frissítésre kerül, hogy tartalmazzon egy szállítási térképet, amely a következőben van megadva /etc/postfix/transport. A parancs postmap /etc/postfix/transport bináris adatbázist hoz létre a szállítási térképből, és systemctl reload postfix a konfigurációs módosításokat a Postfix szolgáltatás leállítása nélkül alkalmazza. Ez a beállítás biztosítja, hogy az example.com címre küldött e-maileket a Python-szkript dolgozza fel, és továbbítsa mindkét SMTP-kiszolgálóra.

Továbbítsa az e-maileket több SMTP-kiszolgálóra a Python segítségével

Python használata az SMTP továbbítás kezelésére

# 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)

A Postfix beállítása a Python-szkript használatához

Postfix konfiguráció egyéni levéltovábbításhoz

# /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

A Postfix funkcionalitás bővítése további eszközökkel

Az e-mailek több SMTP-kiszolgálóra történő továbbításának másik módja további Postfix eszközök és konfigurációk használata. Az egyik ilyen eszköz a Postfix sender_dependent_relayhost_maps, amely lehetővé teszi a küldő címe alapján különböző közvetítőállomások megadását. Míg ezt a funkciót általában arra használják, hogy a kimenő leveleket különböző közvetítőgépeken keresztül irányítsák, bizonyos kreatív konfigurációkkal a mi használati esetünkhöz igazítható. Például kombinációja virtual_alias_maps és recipient_bcc_maps lehet használni az e-mailek megkettőzésére és különböző címekre történő továbbítására, amelyeket aztán a megfelelő szerverekre irányítanak.

Ezenkívül a Postfix integrálása egy levelezőszűrővel, például Amavisd-new vagy Procmail nagyobb rugalmasságot biztosíthat az e-mailek kezelésében és továbbításában. Ezek a szűrők képesek feldolgozni a Postfixen áthaladó e-maileket, lehetővé téve egyéni szkriptek vagy szabályok számára az üzenetek megkettőzését és több célállomásra történő továbbítását. Bár ez a beállítás bonyolultabb lehet, mint egy egyszerű Python-szkript használata, nagyobb megbízhatóságot és méretezhetőséget kínálhat olyan környezetekben, amelyek robusztus e-mail-feldolgozási képességeket igényelnek.

Gyakori kérdések és megoldások a Postfix e-mail továbbításhoz

  1. Hogyan konfigurálhatok több MX rekordot a DNS-ben?
  2. Sajnos a DNS MX rekordok prioritási szintenként csak egy kiszolgálóhoz való leképezést támogatják, így ez a megközelítés nem működik több kiszolgálóra történő egyidejű továbbítás esetén.
  3. Mi a célja a transport_maps irányelv?
  4. A transport_maps A Postfix direktívája meghatározza az e-mail címek vagy tartományok hozzárendelését meghatározott levéltovábbítási módszerekhez és célállomásokhoz.
  5. Tud sender_dependent_relayhost_maps segít ebben a forgatókönyvben?
  6. Igen, sender_dependent_relayhost_maps képes az e-maileket a feladó címe alapján különböző közvetítőgépeken keresztül irányítani, de kreatívan hozzá kell igazítani több szerverre történő továbbításhoz.
  7. Hogyan működik virtual_alias_maps dolgozik a Postfixben?
  8. A virtual_alias_maps A direktíva lehetővé teszi a Postfixnek, hogy az e-mail címeket más címekhez rendelje hozzá, lehetővé téve az e-mailek továbbítását és átirányítását.
  9. Mi a szerepe recipient_bcc_maps?
  10. A recipient_bcc_maps A direktíva lehetővé teszi, hogy a Postfix automatikusan BCC-címzetteket adjon a bejövő e-mailekhez, ami hasznos az üzenetek másolásához.
  11. Használhatom Amavisd-new Postfix segítségével az e-mail továbbításhoz?
  12. Igen, Amavisd-new integrálható a Postfix-szel, így egyéni szűrési és továbbítási szabályokat alkalmazhat, így jobban ellenőrizhető az e-mailek feldolgozása.
  13. Mi a master.cf fájlhoz használt?
  14. A master.cf A Postfix fájlja határozza meg a levélkézbesítési folyamatokat és azok konfigurációit, beleértve az egyéni szállítási szolgáltatásokat is.
  15. Hogyan frissíthetem a transport map adatbázis?
  16. Használja a postmap /etc/postfix/transport parancs a bináris adatbázis létrehozásához vagy frissítéséhez a szállítási térképfájlból.
  17. Miért fontos a Postfix újratöltése?
  18. A Postfix újratöltése systemctl reload postfix konfigurációs változtatásokat alkalmaz a szolgáltatás leállítása nélkül, biztosítva a zavartalan működést.
  19. Mi a smtplib Pythonban használják?
  20. A smtplib A Python könyvtára SMTP-n keresztüli e-mailek küldésére szolgál, lehetővé téve a szkriptek számára, hogy programozottan kezeljék az e-mailek továbbítását.

Utolsó gondolatok a kétkiszolgálós továbbításról

A Postfix beállítása az üzenetek több SMTP-kiszolgálóra történő továbbítására egyéni parancsfájlok és részletes Postfix-konfigurációk kombinációját foglalja magában. Bár a DNS vagy az egyszerű Python szkriptek használatának kezdeti próbálkozásai nem biztos, hogy biztosítják a szükséges megbízhatóságot, a fejlett Postfix szolgáltatások és eszközök, például az Amavisd-new vagy a Procmail integrálása robusztusabb megoldást jelenthet. Az átviteli térképek, a virtuális alias-térképek és a címzett BCC-térképeinek gondos konfigurálásával zökkenőmentes és hatékony üzenettovábbítást biztosíthat mind a james, mind a winmail szerverekre. Ez a megközelítés biztosítja, hogy az e-mail infrastruktúra rugalmas maradjon, és képes legyen kezelni az összetett útválasztási követelményeket.