Sådan videresender du e-mails til flere SMTP-servere

Sådan videresender du e-mails til flere SMTP-servere
Sådan videresender du e-mails til flere SMTP-servere

Opsætning af dobbelt SMTP-videresendelse

Det kan være udfordrende at administrere flere e-mail-servere med identiske brugerkonti. I dette scenarie, når en e-mail sendes til en bruger på example.com, skal den modtages af både james- og winmail-servere, hvilket sikrer, at e-mail-indholdet forbliver uændret.

Almindelige løsninger, såsom at konfigurere flere MX-poster i DNS, kommer til kort, da de kun kan dirigere example.com til en enkelt server ad gangen. Brug af Postfix til at videresende e-mails til begge servere uden lokal lagring har vist sig kompleks, hvilket fører til løsninger som scripting med smtplib, som måske ikke er pålidelige. Lad os udforske bedre alternativer.

Kommando Beskrivelse
import smtplib Importerer Simple Mail Transfer Protocol-biblioteket til afsendelse af e-mails ved hjælp af Python.
import sys Importerer det systemspecifikke parametre og funktionsmodul, der bruges til at hente kommandolinjeargumenter.
from email.mime.text import MIMEText Importerer MIMEText-klassen for at oprette tekstbaserede e-mail-beskeder.
from email.mime.multipart import MIMEMultipart Importerer MIMEMultipart-klassen for at oprette multipart-e-mail-beskeder.
msg.attach(MIMEText('text', 'plain')) Vedhæfter en almindelig teksttekst til e-mailbeskeden.
with smtplib.SMTP(server) as smtp Åbner en forbindelse til SMTP-serveren og sikrer, at den er korrekt lukket efter afsendelse af e-mailen.
postmap /etc/postfix/transport Genererer en binær database fra transportkortfilen, der bruges af Postfix til mail-routing.
systemctl reload postfix Genindlæser Postfix-konfigurationen uden at stoppe tjenesten og anvender eventuelle ændringer.

Forståelse af Postfix og Python-integration

De medfølgende scripts er designet til at videresende e-mails til to SMTP-servere, hvilket sikrer, at begge servere modtager den samme e-mail. Python-scriptet, multi_forward.py, bruger import smtplib bibliotek til at håndtere afsendelse af e-mail. Den importerer sys for at få kommandolinjeargumenter, såsom afsender og modtager. Scriptet konstruerer e-mailen vha from email.mime.text import MIMEText og from email.mime.multipart import MIMEMultipart for at oprette og vedhæfte e-mailens brødtekst. Den gentager derefter en liste over SMTP-servere og sender e-mailen til hver enkelt ved hjælp af with smtplib.SMTP(server) as smtp.

På Postfix-siden involverer konfigurationen at ændre /etc/postfix/master.cf fil for at definere den tilpassede transporttjeneste, multi_forward, som bruger Python-scriptet. Det /etc/postfix/main.cf fil opdateres til at inkludere et transportkort, som er specificeret i /etc/postfix/transport. Kommandoen postmap /etc/postfix/transport opretter en binær database fra transportkortet, og systemctl reload postfix anvender konfigurationsændringerne uden at stoppe Postfix-tjenesten. Denne opsætning sikrer, at enhver e-mail, der sendes til example.com, behandles af Python-scriptet og videresendes til begge SMTP-servere.

Videresend e-mails til flere SMTP-servere med Python

Bruger Python til at håndtere SMTP-videresendelse

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

Konfiguration af Postfix til at bruge Python-scriptet

Postfix-konfiguration til tilpasset videresendelse af mail

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

Forbedring af Postfix-funktionalitet med yderligere værktøjer

En anden tilgang til at opnå videresendelse af e-mails til flere SMTP-servere involverer brug af yderligere Postfix-værktøjer og konfigurationer. Et sådant værktøj er Postfix's sender_dependent_relayhost_maps, som gør det muligt at specificere forskellige relæværter baseret på afsenderens adresse. Selvom denne funktion typisk bruges til at dirigere udgående e-mail gennem forskellige relæværter, kan den tilpasses til vores brug med en vis kreativ konfiguration. For eksempel en kombination af virtual_alias_maps og recipient_bcc_maps kunne bruges til at duplikere e-mails og videresende dem til forskellige adresser, som så videresendes til de respektive servere.

Derudover integrerer Postfix med et mailfilter som Amavisd-new eller Procmail kunne give mere fleksibilitet i håndtering og omdirigering af e-mails. Disse filtre kan behandle e-mails, når de passerer gennem Postfix, hvilket giver mulighed for brugerdefinerede scripts eller regler til at duplikere og videresende meddelelser til flere destinationer. Selvom denne opsætning kan være mere kompleks end at bruge et simpelt Python-script, kan det tilbyde større pålidelighed og skalerbarhed for miljøer, der kræver robuste e-mail-behandlingsfunktioner.

Almindelige spørgsmål og løsninger til Postfix-e-mail-videresendelse

  1. Hvordan kan jeg konfigurere flere MX-poster i DNS?
  2. Desværre understøtter DNS MX-registreringer kun kortlægning til én server pr. prioritetsniveau, så denne tilgang virker ikke til videresendelse til flere servere samtidigt.
  3. Hvad er formålet med transport_maps direktiv?
  4. Det transport_maps direktiv i Postfix specificerer tilknytningen af ​​e-mail-adresser eller domæner til specifikke posttransportmetoder og -destinationer.
  5. Kan sender_dependent_relayhost_maps hjælpe i dette scenarie?
  6. Ja, sender_dependent_relayhost_maps kan dirigere e-mails gennem forskellige relæværter baseret på afsenderens adresse, men det skal være kreativt tilpasset til videresendelse til flere servere.
  7. Hvordan gør virtual_alias_maps arbejde i Postfix?
  8. Det virtual_alias_maps direktiv tillader Postfix at kortlægge e-mail-adresser til andre adresser, hvilket muliggør videresendelse og omdirigering af e-mails.
  9. Hvad er rollen recipient_bcc_maps?
  10. Det recipient_bcc_maps direktiv tillader Postfix automatisk at tilføje BCC-modtagere til indgående e-mails, nyttigt til duplikering af meddelelser.
  11. Kan jeg bruge Amavisd-new med Postfix til videresendelse af mail?
  12. Ja, Amavisd-new kan integreres med Postfix for at anvende tilpassede filtrering og videresendelsesregler, hvilket giver mere kontrol over e-mail-behandling.
  13. Hvad er master.cf fil brugt til?
  14. Det master.cf fil i Postfix definerer postleveringsprocesserne og deres konfigurationer, herunder tilpassede transporttjenester.
  15. Hvordan opdaterer jeg transport map database?
  16. Brug postmap /etc/postfix/transport kommando for at oprette eller opdatere den binære database fra transportkortfilen.
  17. Hvorfor er det vigtigt at genindlæse Postfix?
  18. Genindlæser Postfix med systemctl reload postfix anvender konfigurationsændringer uden at stoppe tjenesten, hvilket sikrer problemfri drift.
  19. Hvad er smtplib bruges til i Python?
  20. Det smtplib bibliotek i Python bruges til at sende e-mails via SMTP, hvilket tillader scripts at håndtere e-mail-transmission programmatisk.

Endelige tanker om Dual Server Forwarding

Opsætning af Postfix til at videresende beskeder til flere SMTP-servere involverer en kombination af brugerdefinerede scripts og detaljerede Postfix-konfigurationer. Mens indledende forsøg med at bruge DNS eller simple Python-scripts muligvis ikke giver den nødvendige pålidelighed, kan integration af avancerede Postfix-funktioner og værktøjer som Amavisd-new eller Procmail give en mere robust løsning. Ved omhyggeligt at konfigurere transportkort, virtuelle alias-kort og modtagerens BCC-kort kan du sikre problemfri og effektiv videresendelse af beskeder til både james- og winmail-servere. Denne tilgang sikrer, at din e-mail-infrastruktur forbliver robust og i stand til at håndtere komplekse routingkrav.