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
- Hogyan konfigurálhatok több MX rekordot a DNS-ben?
- 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.
- Mi a célja a transport_maps irányelv?
- 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.
- Tud sender_dependent_relayhost_maps segít ebben a forgatókönyvben?
- 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.
- Hogyan működik virtual_alias_maps dolgozik a Postfixben?
- 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.
- Mi a szerepe recipient_bcc_maps?
- 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.
- Használhatom Amavisd-new Postfix segítségével az e-mail továbbításhoz?
- 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.
- Mi a master.cf fájlhoz használt?
- 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.
- Hogyan frissíthetem a transport map adatbázis?
- 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.
- Miért fontos a Postfix újratöltése?
- 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.
- Mi a smtplib Pythonban használják?
- 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.