Kako posredovati e-pošto na več strežnikov SMTP

Kako posredovati e-pošto na več strežnikov SMTP
Kako posredovati e-pošto na več strežnikov SMTP

Nastavitev dvojnega posredovanja SMTP

Upravljanje več e-poštnih strežnikov z enakimi uporabniškimi računi je lahko zahtevno. V tem scenariju, ko je e-poštno sporočilo poslano uporabniku na example.com, ga morata prejeti oba strežnika james in winmail, kar zagotavlja, da vsebina e-poštnega sporočila ostane nespremenjena.

Običajne rešitve, kot je konfiguriranje več zapisov MX v DNS, ne uspejo, saj lahko example.com usmerijo samo na en strežnik hkrati. Uporaba Postfixa za posredovanje e-pošte na oba strežnika brez lokalnega pomnilnika se je izkazala za zapleteno, kar vodi do rešitev, kot je skriptiranje s smtplib, ki morda ni zanesljivo. Raziščimo boljše alternative.

Ukaz Opis
import smtplib Uvozi knjižnico Simple Mail Transfer Protocol za pošiljanje e-pošte z uporabo Pythona.
import sys Uvozi za sistem specifične parametre in modul funkcij, ki se uporablja za pridobivanje argumentov ukazne vrstice.
from email.mime.text import MIMEText Uvozi razred MIMEText za ustvarjanje besedilnih e-poštnih sporočil.
from email.mime.multipart import MIMEMultipart Uvozi razred MIMEMultipart za ustvarjanje večdelnih e-poštnih sporočil.
msg.attach(MIMEText('text', 'plain')) E-poštnemu sporočilu priloži telo navadnega besedila.
with smtplib.SMTP(server) as smtp Odpre povezavo s strežnikom SMTP in zagotovi, da je pravilno zaprta po pošiljanju e-pošte.
postmap /etc/postfix/transport Generira binarno bazo podatkov iz datoteke transportnega zemljevida, ki jo uporablja Postfix za usmerjanje pošte.
systemctl reload postfix Znova naloži konfiguracijo Postfix, ne da bi zaustavil storitev, pri čemer uporabi morebitne spremembe.

Razumevanje integracije Postfixa in Pythona

Priloženi skripti so zasnovani za posredovanje e-pošte na dva strežnika SMTP, kar zagotavlja, da oba strežnika prejmeta isto e-pošto. Python skript, multi_forward.py, uporablja import smtplib knjižnica za pošiljanje e-pošte. Uvaža sys za pridobitev argumentov ukazne vrstice, kot sta pošiljatelj in prejemnik. Skript sestavi e-pošto z uporabo from email.mime.text import MIMEText in from email.mime.multipart import MIMEMultipart za ustvarjanje in pripenjanje telesa e-pošte. Nato pregleda seznam strežnikov SMTP in pošlje e-pošto vsakemu od njih, ki uporablja with smtplib.SMTP(server) as smtp.

Na strani Postfix konfiguracija vključuje spreminjanje /etc/postfix/master.cf datoteka za določitev transportne storitve po meri, multi_forward, ki uporablja skript Python. The /etc/postfix/main.cf datoteka je posodobljena tako, da vključuje prometni zemljevid, ki je določen v /etc/postfix/transport. Ukaz postmap /etc/postfix/transport ustvari binarno zbirko podatkov iz transportnega zemljevida in systemctl reload postfix uporabi spremembe konfiguracije, ne da bi zaustavil storitev Postfix. Ta nastavitev zagotavlja, da vsako e-pošto, poslano na example.com, obdela skript Python in posreduje na oba strežnika SMTP.

Posredujte e-pošto na več strežnikov SMTP s Pythonom

Uporaba Pythona za posredovanje 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)

Konfiguriranje Postfixa za uporabo skripta Python

Konfiguracija Postfix za posredovanje pošte po meri

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

Izboljšanje funkcionalnosti Postfix z dodatnimi orodji

Drug pristop za posredovanje e-pošte na več strežnikov SMTP vključuje uporabo dodatnih orodij in konfiguracij Postfix. Eno takih orodij je Postfixovo sender_dependent_relayhost_maps, ki omogoča določanje različnih gostiteljev relejev glede na naslov pošiljatelja. Medtem ko se ta funkcija običajno uporablja za usmerjanje odhodne pošte prek različnih relejnih gostiteljev, jo je mogoče prilagoditi za naš primer uporabe z nekaj ustvarjalne konfiguracije. Na primer, kombinacija virtual_alias_maps in recipient_bcc_maps se lahko uporablja za podvajanje e-poštnih sporočil in njihovo posredovanje na različne naslove, ki so nato preusmerjeni na ustrezne strežnike.

Poleg tega integracija Postfixa s poštnim filtrom, kot je Amavisd-new oz Procmail lahko zagotovi večjo prilagodljivost pri obravnavanju in usmerjanju e-pošte. Ti filtri lahko obdelujejo e-poštna sporočila, ko gredo skozi Postfix, kar omogoča skriptom po meri ali pravilom za podvajanje in posredovanje sporočil na več ciljev. Čeprav je ta nastavitev morda bolj zapletena kot uporaba preprostega skripta Python, lahko nudi večjo zanesljivost in razširljivost za okolja, ki zahtevajo robustne zmožnosti obdelave e-pošte.

Pogosta vprašanja in rešitve za posredovanje e-pošte Postfix

  1. Kako lahko konfiguriram več zapisov MX v DNS?
  2. Na žalost zapisi DNS MX podpirajo samo preslikavo v en strežnik na prednostno raven, zato ta pristop ne bo deloval pri posredovanju na več strežnikov hkrati.
  3. Kakšen je namen transport_maps direktiva?
  4. The transport_maps Direktiva v Postfixu določa preslikavo e-poštnih naslovov ali domen v specifične načine in cilje prenosa pošte.
  5. Lahko sender_dependent_relayhost_maps pomoč v tem scenariju?
  6. ja sender_dependent_relayhost_maps lahko usmerja e-pošto prek različnih relejnih gostiteljev glede na naslov pošiljatelja, vendar mora biti kreativno prilagojen za posredovanje na več strežnikov.
  7. Kako virtual_alias_maps delati v Postfixu?
  8. The virtual_alias_maps Direktiva omogoča Postfixu preslikavo e-poštnih naslovov v druge naslove, kar omogoča posredovanje in preusmerjanje e-pošte.
  9. Kakšna je vloga recipient_bcc_maps?
  10. The recipient_bcc_maps Direktiva omogoča Postfixu samodejno dodajanje prejemnikov BCC dohodni e-pošti, kar je uporabno za podvajanje sporočil.
  11. Ali lahko uporabim Amavisd-new s Postfixom za posredovanje elektronske pošte?
  12. da Amavisd-new se lahko integrira s Postfixom za uporabo pravil filtriranja in posredovanja po meri, kar zagotavlja večji nadzor nad obdelavo e-pošte.
  13. Kaj je master.cf datoteka uporabljena za?
  14. The master.cf v Postfixu definira postopke dostave pošte in njihove konfiguracije, vključno s transportnimi storitvami po meri.
  15. Kako naj posodobim transport map baza podatkov?
  16. Uporabi postmap /etc/postfix/transport ukaz za ustvarjanje ali posodobitev binarne baze podatkov iz datoteke transportnega zemljevida.
  17. Zakaj je ponovno nalaganje Postfixa pomembno?
  18. Ponovno nalaganje Postfixa z systemctl reload postfix uporablja spremembe konfiguracije, ne da bi zaustavil storitev, kar zagotavlja nemoteno delovanje.
  19. Kaj je smtplib uporablja v Pythonu?
  20. The smtplib knjižnica v Pythonu se uporablja za pošiljanje e-pošte prek SMTP, kar skriptom omogoča programsko upravljanje prenosa e-pošte.

Končne misli o posredovanju z dvojnim strežnikom

Nastavitev Postfixa za posredovanje sporočil na več strežnikov SMTP vključuje kombinacijo skriptov po meri in podrobnih konfiguracij Postfixa. Medtem ko začetni poskusi z uporabo DNS ali preprostih skriptov Python morda ne nudijo zahtevane zanesljivosti, lahko integracija naprednih funkcij in orodij Postfix, kot sta Amavisd-new ali Procmail, zagotovi robustnejšo rešitev. S skrbno konfiguracijo transportnih zemljevidov, navideznih zemljevidov vzdevkov in prejemnikovih BCC zemljevidov lahko zagotovite brezhibno in učinkovito posredovanje sporočil na strežnika james in winmail. Ta pristop zagotavlja, da vaša e-poštna infrastruktura ostane odporna in sposobna obravnavati kompleksne zahteve usmerjanja.