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, , bruker bibliotek for å håndtere e-postsending. Den importerer for å få kommandolinjeargumenter, for eksempel avsender og mottaker. Skriptet konstruerer e-posten ved hjelp av from email.mime.text import MIMEText og 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 .
På Postfix-siden innebærer konfigurasjonen å endre fil for å definere den tilpassede transporttjenesten, , som bruker Python-skriptet. De filen oppdateres til å inkludere et transportkart, som er spesifisert i /etc/postfix/transport. Kommandoen lager en binær database fra transportkartet, og 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 , 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 og 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 eller 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.
- 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 direktiv?
- De direktiv i Postfix spesifiserer tilordning av e-postadresser eller domener til spesifikke e-posttransportmetoder og destinasjoner.
- Kan hjelpe i dette scenariet?
- Ja, 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 jobbe i Postfix?
- De Direktivet lar Postfix kartlegge e-postadresser til andre adresser, noe som muliggjør videresending og omdirigering av e-poster.
- Hva er rollen til ?
- De direktivet lar Postfix automatisk legge til BCC-mottakere i innkommende e-poster, nyttig for duplisering av meldinger.
- Kan jeg bruke med Postfix for videresending av e-post?
- Ja, kan integreres med Postfix for å bruke tilpassede filtrering og videresendingsregler, noe som gir mer kontroll over e-postbehandling.
- Hva er fil brukt til?
- De fil i Postfix definerer postleveringsprosessene og deres konfigurasjoner, inkludert tilpassede transporttjenester.
- Hvordan oppdaterer jeg database?
- Bruke 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 bruker konfigurasjonsendringer uten å stoppe tjenesten, noe som sikrer jevn drift.
- Hva er brukt for i Python?
- De bibliotek i Python brukes til å sende e-post via SMTP, slik at skript kan håndtere e-postoverføring programmatisk.
Å 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.