Nastavenie duálneho presmerovania SMTP
Správa viacerých e-mailových serverov s rovnakými používateľskými účtami môže byť náročná. V tomto scenári, keď je e-mail odoslaný používateľovi na example.com, musia ho prijať servery james aj winmail, čím sa zabezpečí, že obsah e-mailu zostane nezmenený.
Bežné riešenia, ako je konfigurácia viacerých záznamov MX v DNS, zaostávajú, pretože dokážu nasmerovať example.com naraz iba na jeden server. Použitie Postfixu na preposielanie e-mailov na oba servery bez lokálneho úložiska sa ukázalo ako zložité, čo viedlo k riešeniam, ako je skriptovanie pomocou smtplib, ktoré nemusí byť spoľahlivé. Poďme preskúmať lepšie alternatívy.
Príkaz | Popis |
---|---|
import smtplib | Importuje knižnicu Simple Mail Transfer Protocol na odosielanie e-mailov pomocou Pythonu. |
import sys | Importuje modul parametrov a funkcií špecifický pre systém, ktorý sa používa na získanie argumentov príkazového riadka. |
from email.mime.text import MIMEText | Importuje triedu MIMEText na vytváranie textových e-mailových správ. |
from email.mime.multipart import MIMEMultipart | Importuje triedu MIMEMultipart na vytvorenie viacdielnych e-mailových správ. |
msg.attach(MIMEText('text', 'plain')) | K e-mailovej správe pripojí telo obyčajného textu. |
with smtplib.SMTP(server) as smtp | Otvorí pripojenie k serveru SMTP a zabezpečí, aby sa po odoslaní e-mailu správne uzavrelo. |
postmap /etc/postfix/transport | Generuje binárnu databázu zo súboru transportnej mapy, ktorý používa Postfix na smerovanie pošty. |
systemctl reload postfix | Opätovne načíta konfiguráciu Postfixu bez zastavenia služby s použitím akýchkoľvek vykonaných zmien. |
Pochopenie integrácie Postfixu a Pythonu
Poskytnuté skripty sú navrhnuté tak, aby posielali e-maily dvom serverom SMTP, čím sa zabezpečí, že oba servery dostanú rovnaký e-mail. skript Python, multi_forward.py, používa import smtplib knižnica na spracovanie odosielania e-mailov. Dováža sa sys na získanie argumentov príkazového riadka, ako je odosielateľ a príjemca. Skript vytvára e-mail pomocou from email.mime.text import MIMEText a from email.mime.multipart import MIMEMultipart vytvoriť a pripojiť telo e-mailu. Potom iteruje zoznam serverov SMTP a odošle e-mail každému z nich with smtplib.SMTP(server) as smtp.
Na strane Postfixu konfigurácia zahŕňa úpravu /etc/postfix/master.cf súbor na definovanie vlastnej prepravnej služby, multi_forward, ktorý používa skript Python. The /etc/postfix/main.cf súbor sa aktualizuje tak, aby obsahoval dopravnú mapu, ktorá je špecifikovaná v /etc/postfix/transport. Príkaz postmap /etc/postfix/transport vytvorí binárnu databázu z dopravnej mapy a systemctl reload postfix použije zmeny konfigurácie bez zastavenia služby Postfix. Toto nastavenie zaisťuje, že každý e-mail odoslaný na example.com bude spracovaný skriptom Python a preposlaný na oba servery SMTP.
Preposielajte e-maily na viacero serverov SMTP s Pythonom
Použitie Pythonu na spracovanie presmerovania 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)
Konfigurácia Postfixu na používanie skriptu Python
Konfigurácia Postfixu pre vlastné preposielanie 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šenie funkčnosti Postfixu pomocou ďalších nástrojov
Ďalší prístup k dosiahnutiu preposielania e-mailov na viacero serverov SMTP zahŕňa použitie ďalších nástrojov a konfigurácií Postfixu. Jedným z takýchto nástrojov je Postfix sender_dependent_relayhost_maps, ktorý umožňuje špecifikovať rôznych prenosových hostiteľov na základe adresy odosielateľa. Aj keď sa táto funkcia zvyčajne používa na smerovanie odchádzajúcej pošty cez rôznych prenosových hostiteľov, môže byť prispôsobená pre náš prípad použitia pomocou určitej kreatívnej konfigurácie. Napríklad kombinácia virtual_alias_maps a recipient_bcc_maps možno použiť na duplikovanie e-mailov a ich preposielanie na rôzne adresy, ktoré sú potom smerované na príslušné servery.
Okrem toho integrácia Postfixu s poštovým filtrom, napr Amavisd-new alebo Procmail môže poskytnúť väčšiu flexibilitu pri spracovávaní a smerovaní e-mailov. Tieto filtre dokážu spracovať e-maily, keď prechádzajú cez Postfix, čo umožňuje vlastným skriptom alebo pravidlám duplikovať a posielať správy na viacero cieľov. Aj keď toto nastavenie môže byť zložitejšie ako použitie jednoduchého skriptu Python, môže ponúknuť väčšiu spoľahlivosť a škálovateľnosť pre prostredia vyžadujúce robustné možnosti spracovania e-mailov.
Bežné otázky a riešenia pre preposielanie e-mailov Postfix
- Ako môžem nakonfigurovať viacero záznamov MX v DNS?
- Bohužiaľ, záznamy DNS MX podporujú iba mapovanie na jeden server na úroveň priority, takže tento prístup nebude fungovať pri preposielaní na viacero serverov súčasne.
- Aký je účel transport_maps smernica?
- The transport_maps direktíva v Postfixe špecifikuje mapovanie e-mailových adries alebo domén na konkrétne metódy a ciele prenosu pošty.
- Môcť sender_dependent_relayhost_maps pomôcť v tomto scenári?
- Áno, sender_dependent_relayhost_maps môže smerovať e-maily cez rôznych prenosových hostiteľov na základe adresy odosielateľa, ale musí byť kreatívne prispôsobený na preposielanie na viacero serverov.
- Ako to robí virtual_alias_maps pracovať v Postfixe?
- The virtual_alias_maps Direktíva umožňuje Postfixu mapovať e-mailové adresy na iné adresy, čím umožňuje preposielanie a presmerovanie e-mailov.
- Aká je úloha recipient_bcc_maps?
- The recipient_bcc_maps Direktíva umožňuje Postfixu automaticky pridávať BCC príjemcov do prichádzajúcich e-mailov, čo je užitočné pri duplikovaní správ.
- Môžem použiť Amavisd-new s Postfixom na preposielanie e-mailov?
- Áno, Amavisd-new možno integrovať s Postfixom a aplikovať vlastné pravidlá filtrovania a preposielania, čím poskytuje väčšiu kontrolu nad spracovaním e-mailov.
- Čo je master.cf súbor používaný na?
- The master.cf súbor v Postfixe definuje procesy doručovania pošty a ich konfigurácie, vrátane vlastných transportných služieb.
- Ako aktualizujem transport map databázy?
- Použi postmap /etc/postfix/transport príkaz na vytvorenie alebo aktualizáciu binárnej databázy zo súboru transportnej mapy.
- Prečo je opätovné načítanie Postfixu dôležité?
- Opätovné načítanie Postfixu pomocou systemctl reload postfix aplikuje zmeny konfigurácie bez zastavenia služby, čím sa zabezpečí plynulý chod.
- Čo je smtplib používané v Pythone?
- The smtplib knižnica v Pythone sa používa na odosielanie e-mailov cez SMTP, čo umožňuje skriptom programovo spracovávať prenos e-mailov.
Záverečné myšlienky o duálnom serverovom preposielaní
Nastavenie Postfixu na posielanie správ na viacero SMTP serverov zahŕňa kombináciu vlastných skriptov a podrobných konfigurácií Postfixu. Zatiaľ čo počiatočné pokusy s použitím DNS alebo jednoduchých skriptov Python nemusia ponúknuť požadovanú spoľahlivosť, integrácia pokročilých funkcií a nástrojov Postfixu, ako je Amavisd-new alebo Procmail, môže poskytnúť robustnejšie riešenie. Dôkladnou konfiguráciou dopravných máp, máp virtuálnych aliasov a máp príjemcov BCC môžete zabezpečiť bezproblémové a efektívne posielanie správ na servery james aj winmail. Tento prístup zaisťuje, že vaša e-mailová infraštruktúra zostane odolná a schopná zvládnuť zložité požiadavky na smerovanie.