$lang['tuto'] = "opplæringsprogrammer"; ?>$lang['tuto'] = "opplæringsprogrammer"; ?> Hvordan videresende e-post til flere SMTP-servere

Hvordan videresende e-post til flere SMTP-servere

Hvordan videresende e-post til flere SMTP-servere
Hvordan videresende e-post til flere SMTP-servere

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.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)

Konfigurere Postfix for å bruke Python-skriptet

Postfix-konfigurasjon for tilpasset videresending av e-post

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

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

  1. Hvordan kan jeg konfigurere flere MX-poster i DNS?
  2. 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.
  3. Hva er hensikten med transport_maps direktiv?
  4. De transport_maps direktiv i Postfix spesifiserer tilordning av e-postadresser eller domener til spesifikke e-posttransportmetoder og destinasjoner.
  5. Kan sender_dependent_relayhost_maps hjelpe i dette scenariet?
  6. 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.
  7. Hvordan gjør 1. 3 jobbe i Postfix?
  8. De 1. 3 Direktivet lar Postfix kartlegge e-postadresser til andre adresser, noe som muliggjør videresending og omdirigering av e-poster.
  9. Hva er rollen til recipient_bcc_maps?
  10. De recipient_bcc_maps direktivet lar Postfix automatisk legge til BCC-mottakere i innkommende e-poster, nyttig for duplisering av meldinger.
  11. Kan jeg bruke Amavisd-new med Postfix for videresending av e-post?
  12. Ja, Amavisd-new kan integreres med Postfix for å bruke tilpassede filtrering og videresendingsregler, noe som gir mer kontroll over e-postbehandling.
  13. Hva er master.cf fil brukt til?
  14. De master.cf fil i Postfix definerer postleveringsprosessene og deres konfigurasjoner, inkludert tilpassede transporttjenester.
  15. Hvordan oppdaterer jeg transport map database?
  16. Bruke postmap /etc/postfix/transport kommando for å opprette eller oppdatere den binære databasen fra transportkartfilen.
  17. Hvorfor er det viktig å laste Postfix på nytt?
  18. Laster inn Postfix på nytt med systemctl reload postfix bruker konfigurasjonsendringer uten å stoppe tjenesten, noe som sikrer jevn drift.
  19. Hva er smtplib brukt for i Python?
  20. 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.