Sette opp dobbel SMTP-videresending
Det kan være utfordrende å administrere flere e-postservere med identiske brukerkontoer. I dette scenariet, når en e-post sendes til en bruker på example.com, må den mottas av både james- og winmail-servere, for å sikre at e-postinnholdet forblir uendret.
Vanlige løsninger, som å konfigurere flere MX-poster i DNS, kommer til kort siden de bare kan dirigere example.com til en enkelt server om gangen. Å bruke Postfix til å videresende e-post til begge serverne uten lokal lagring har vist seg komplekst, noe som fører til løsninger som skripting med smtplib, som kanskje ikke er pålitelige. La oss utforske bedre alternativer.
| Kommando | Beskrivelse |
|---|---|
| import smtplib | Importerer Simple Mail Transfer Protocol-biblioteket for å sende e-poster ved hjelp av Python. |
| import sys | Importerer den systemspesifikke parametere og funksjonsmodulen, som brukes til å hente kommandolinjeargumenter. |
| from email.mime.text import MIMEText | Importerer MIMEText-klassen for å lage tekstbaserte e-postmeldinger. |
| from email.mime.multipart import MIMEMultipart | Importerer MIMEMultipart-klassen for å lage flerdelte e-postmeldinger. |
| msg.attach(MIMEText('text', 'plain')) | Legger ved en ren teksttekst til e-postmeldingen. |
| with smtplib.SMTP(server) as smtp | Åpner en tilkobling til SMTP-serveren og sikrer at den er ordentlig lukket etter at e-posten er sendt. |
| postmap /etc/postfix/transport | Genererer en binær database fra transportkartfilen, brukt av Postfix for e-postruting. |
| systemctl reload postfix | Laster Postfix-konfigurasjonen på nytt uten å stoppe tjenesten, og bruker eventuelle endringer som er gjort. |
Forstå Postfix og Python-integrasjon
De medfølgende skriptene er laget for å videresende e-post til to SMTP-servere, og sikre at begge serverne mottar samme e-post. Python-skriptet, multi_forward.py, bruker import smtplib bibliotek for å håndtere e-postsending. Den importerer sys for å få kommandolinjeargumenter, for eksempel avsender og mottaker. Skriptet konstruerer e-posten ved hjelp av from email.mime.text import MIMEText og from email.mime.multipart import MIMEMultipart for å opprette og legge ved e-postteksten. Den itererer deretter over en liste over SMTP-servere og sender e-posten til hver enkelt som bruker with smtplib.SMTP(server) as smtp.
På Postfix-siden innebærer konfigurasjonen å endre /etc/postfix/master.cf fil for å definere den tilpassede transporttjenesten, multi_forward, som bruker Python-skriptet. De /etc/postfix/main.cf filen oppdateres til å inkludere et transportkart, som er spesifisert i /etc/postfix/transport. Kommandoen postmap /etc/postfix/transport lager en binær database fra transportkartet, og systemctl reload postfix bruker konfigurasjonsendringene uten å stoppe Postfix-tjenesten. Dette oppsettet sikrer at all e-post sendt til example.com blir behandlet av Python-skriptet og videresendt til begge SMTP-serverne.
Videresend e-poster til flere SMTP-servere med Python
Bruker Python til å håndtere SMTP-videresending
# multi_forward.pyimport smtplibimport sysfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartsender = sys.argv[1]recipient = sys.argv[2]def forward_email(sender, recipient):msg = MIMEMultipart()msg['From'] = sendermsg['To'] = recipientmsg['Subject'] = 'Forwarded email'msg.attach(MIMEText('This is the body of the email', 'plain'))# SMTP serverssmtp_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)
Konfigurere Postfix for å bruke Python-skriptet
Postfix-konfigurasjon for tilpasset videresending av e-post
# /etc/postfix/master.cfmulti_forward unix - n n - - pipeflags=Rhu user=nobody argv=/usr/local/bin/multi_forward.py ${sender} ${recipient}# /etc/postfix/main.cftransport_maps = hash:/etc/postfix/transport# /etc/postfix/transportexample.com multi_forward:# Update transport mappostmap /etc/postfix/transport# Reload Postfixsystemctl reload postfix
Forbedre Postfix-funksjonalitet med tilleggsverktøy
En annen tilnærming for å oppnå videresending av e-post til flere SMTP-servere innebærer bruk av ytterligere Postfix-verktøy og konfigurasjoner. Et slikt verktøy er Postfix's sender_dependent_relayhost_maps, som gjør det mulig å spesifisere forskjellige reléverter basert på avsenderens adresse. Selv om denne funksjonen vanligvis brukes til å rute utgående e-post gjennom forskjellige reléverter, kan den tilpasses vår brukstilfelle med litt kreativ konfigurasjon. For eksempel en kombinasjon av 1. 3 og recipient_bcc_maps kan brukes til å duplisere e-poster og videresende dem til forskjellige adresser, som deretter rutes til de respektive serverne.
I tillegg integrerer Postfix med et e-postfilter som Amavisd-new eller Procmail kan gi mer fleksibilitet i håndtering og ruting av e-post. Disse filtrene kan behandle e-poster når de går gjennom Postfix, slik at tilpassede skript eller regler kan duplisere og videresende meldinger til flere destinasjoner. Selv om dette oppsettet kan være mer komplekst enn å bruke et enkelt Python-skript, kan det tilby større pålitelighet og skalerbarhet for miljøer som krever robuste e-postbehandlingsmuligheter.
Vanlige spørsmål og løsninger for Postfix e-postvideresending
- Hvordan kan jeg konfigurere flere MX-poster i DNS?
- Dessverre støtter DNS MX-poster bare tilordning til én server per prioritetsnivå, så denne tilnærmingen vil ikke fungere for videresending til flere servere samtidig.
- Hva er hensikten med transport_maps direktiv?
- De transport_maps direktiv i Postfix spesifiserer tilordning av e-postadresser eller domener til spesifikke e-posttransportmetoder og destinasjoner.
- Kan sender_dependent_relayhost_maps hjelpe i dette scenariet?
- Ja, sender_dependent_relayhost_maps kan rute e-poster gjennom ulike reléverter basert på avsenderens adresse, men det må være kreativt tilpasset for videresending til flere servere.
- Hvordan gjør 1. 3 jobbe i Postfix?
- De 1. 3 Direktivet lar Postfix kartlegge e-postadresser til andre adresser, noe som muliggjør videresending og omdirigering av e-poster.
- Hva er rollen til recipient_bcc_maps?
- De recipient_bcc_maps direktivet lar Postfix automatisk legge til BCC-mottakere i innkommende e-poster, nyttig for duplisering av meldinger.
- Kan jeg bruke Amavisd-new med Postfix for videresending av e-post?
- Ja, Amavisd-new kan integreres med Postfix for å bruke tilpassede filtrering og videresendingsregler, noe som gir mer kontroll over e-postbehandling.
- Hva er master.cf fil brukt til?
- De master.cf fil i Postfix definerer postleveringsprosessene og deres konfigurasjoner, inkludert tilpassede transporttjenester.
- Hvordan oppdaterer jeg transport map database?
- Bruke postmap /etc/postfix/transport kommando for å opprette eller oppdatere den binære databasen fra transportkartfilen.
- Hvorfor er det viktig å laste Postfix på nytt?
- Laster inn Postfix på nytt med systemctl reload postfix bruker konfigurasjonsendringer uten å stoppe tjenesten, noe som sikrer jevn drift.
- Hva er smtplib brukt for i Python?
- De smtplib bibliotek i Python brukes til å sende e-post via SMTP, slik at skript kan håndtere e-postoverføring programmatisk.
Siste tanker om videresending av dobbel server
Å sette opp Postfix for å videresende meldinger til flere SMTP-servere involverer en kombinasjon av tilpassede skript og detaljerte Postfix-konfigurasjoner. Selv om innledende forsøk med DNS eller enkle Python-skript kanskje ikke gir den nødvendige påliteligheten, kan integrering av avanserte Postfix-funksjoner og verktøy som Amavisd-new eller Procmail gi en mer robust løsning. Ved å nøye konfigurere transportkart, virtuelle aliaskart og mottakers BCC-kart, kan du sikre sømløs og effektiv videresending av meldinger til både james- og winmail-servere. Denne tilnærmingen sikrer at e-postinfrastrukturen din forblir robust og i stand til å håndtere komplekse rutingkrav.