Cum să redirecționați e-mailurile către mai multe servere SMTP

Cum să redirecționați e-mailurile către mai multe servere SMTP
Cum să redirecționați e-mailurile către mai multe servere SMTP

Configurarea redirecționării SMTP duale

Gestionarea mai multor servere de e-mail cu conturi de utilizator identice poate fi o provocare. În acest scenariu, atunci când un e-mail este trimis unui utilizator la example.com, acesta trebuie să fie primit atât de serverele James, cât și de winmail, asigurându-se că conținutul e-mailului rămâne neschimbat.

Soluțiile obișnuite, cum ar fi configurarea mai multor înregistrări MX în DNS, sunt insuficiente, deoarece pot direcționa example.com doar către un singur server la un moment dat. Utilizarea Postfix pentru a redirecționa e-mailurile către ambele servere fără stocare locală s-a dovedit complexă, ceea ce duce la soluții precum scriptarea cu smtplib, care poate să nu fie de încredere. Să explorăm alternative mai bune.

Comanda Descriere
import smtplib Importă biblioteca Simple Mail Transfer Protocol pentru trimiterea de e-mailuri folosind Python.
import sys Importă modulul de parametri și funcții specifici sistemului, folosit pentru a obține argumente din linia de comandă.
from email.mime.text import MIMEText Importă clasa MIMEText pentru a crea mesaje de e-mail bazate pe text.
from email.mime.multipart import MIMEMultipart Importă clasa MIMEMultipart pentru a crea mesaje de e-mail cu mai multe părți.
msg.attach(MIMEText('text', 'plain')) Atașează un corp text simplu la mesajul de e-mail.
with smtplib.SMTP(server) as smtp Deschide o conexiune la serverul SMTP și se asigură că este închisă corect după trimiterea e-mailului.
postmap /etc/postfix/transport Generează o bază de date binară din fișierul hărții de transport, utilizat de Postfix pentru rutarea e-mailului.
systemctl reload postfix Reîncarcă configurația Postfix fără a opri serviciul, aplicând orice modificări efectuate.

Înțelegerea integrării Postfix și Python

Scripturile furnizate sunt concepute pentru a redirecționa e-mailuri către două servere SMTP, asigurându-se că ambele servere primesc același e-mail. Scriptul Python, multi_forward.py, folosește import smtplib bibliotecă pentru a gestiona trimiterea de e-mailuri. Se importă sys pentru a obține argumente de linie de comandă, cum ar fi expeditorul și destinatarul. Scriptul construiește e-mailul folosind from email.mime.text import MIMEText și from email.mime.multipart import MIMEMultipart pentru a crea și atașa corpul e-mailului. Apoi repetă o listă de servere SMTP și trimite e-mailul fiecăruia folosind with smtplib.SMTP(server) as smtp.

Pe partea Postfix, configurația implică modificarea /etc/postfix/master.cf fișier pentru a defini serviciul de transport personalizat, multi_forward, care utilizează scriptul Python. The /etc/postfix/main.cf fișierul este actualizat pentru a include o hartă de transport, care este specificată în /etc/postfix/transport. Comanda postmap /etc/postfix/transport creează o bază de date binară din harta de transport și systemctl reload postfix aplică modificările de configurare fără a opri serviciul Postfix. Această configurare asigură că orice e-mail trimis către example.com este procesat de scriptul Python și redirecționat către ambele servere SMTP.

Redirecționați e-mailurile către mai multe servere SMTP cu Python

Folosind Python pentru a gestiona redirecționarea 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)

Configurarea Postfix pentru a utiliza scriptul Python

Configurare Postfix pentru redirecționarea e-mailului personalizat

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

Îmbunătățirea funcționalității Postfix cu instrumente suplimentare

O altă abordare pentru a realiza redirecționarea e-mailurilor către mai multe servere SMTP implică utilizarea unor instrumente și configurații suplimentare Postfix. Un astfel de instrument este Postfix sender_dependent_relayhost_maps, care permite specificarea diferitelor gazde releu pe baza adresei expeditorului. Deși această caracteristică este de obicei folosită pentru a direcționa corespondența trimisă prin diferite gazde de retransmisie, poate fi adaptată pentru cazul nostru de utilizare cu o anumită configurație creativă. De exemplu, o combinație de virtual_alias_maps și recipient_bcc_maps ar putea fi folosit pentru a duplica e-mailuri și a le redirecționa către diferite adrese, care sunt apoi direcționate către serverele respective.

În plus, integrarea Postfix cu un filtru de e-mail, cum ar fi Amavisd-new sau Procmail ar putea oferi mai multă flexibilitate în gestionarea și rutarea e-mailurilor. Aceste filtre pot procesa e-mailurile pe măsură ce trec prin Postfix, permițând scripturilor sau regulilor personalizate să dubleze și să redirecționeze mesajele către mai multe destinații. Deși această configurare poate fi mai complexă decât utilizarea unui script Python simplu, poate oferi o fiabilitate și o scalabilitate mai mari pentru mediile care necesită capabilități robuste de procesare a e-mailului.

Întrebări și soluții frecvente pentru redirecționarea e-mailurilor Postfix

  1. Cum pot configura mai multe înregistrări MX în DNS?
  2. Din păcate, înregistrările DNS MX acceptă doar maparea către un server pe nivel de prioritate, așa că această abordare nu va funcționa pentru redirecționarea către mai multe servere simultan.
  3. Care este scopul transport_maps directivă?
  4. The transport_maps directiva din Postfix specifică maparea adreselor de e-mail sau a domeniilor la anumite metode și destinații de transport de e-mail.
  5. Poate sa sender_dependent_relayhost_maps ajutor in acest scenariu?
  6. Da, sender_dependent_relayhost_maps poate direcționa e-mailurile prin diferite gazde de retransmisie în funcție de adresa expeditorului, dar trebuie să fie adaptat creativ pentru redirecționarea către mai multe servere.
  7. Cum se virtual_alias_maps lucrezi în Postfix?
  8. The virtual_alias_maps directiva permite Postfix să mapeze adresele de e-mail către alte adrese, permițând redirecționarea și redirecționarea e-mailurilor.
  9. Care este rolul recipient_bcc_maps?
  10. The recipient_bcc_maps directiva permite Postfix să adauge automat destinatari BCC la e-mailurile primite, util pentru duplicarea mesajelor.
  11. Pot folosi Amavisd-new cu Postfix pentru redirecționarea e-mailurilor?
  12. Da, Amavisd-new poate fi integrat cu Postfix pentru a aplica reguli personalizate de filtrare și redirecționare, oferind mai mult control asupra procesării e-mailurilor.
  13. Ce este master.cf fisier folosit pentru?
  14. The master.cf fișier în Postfix definește procesele de livrare a corespondenței și configurațiile acestora, inclusiv serviciile de transport personalizate.
  15. Cum actualizez transport map Bază de date?
  16. Folosește postmap /etc/postfix/transport comandă pentru a crea sau actualiza baza de date binară din fișierul hărții de transport.
  17. De ce este importantă reîncărcarea Postfix?
  18. Se reîncarcă Postfix cu systemctl reload postfix aplică modificări de configurare fără a opri serviciul, asigurând o funcționare bună.
  19. Ce este smtplib folosit în Python?
  20. The smtplib biblioteca din Python este folosită pentru trimiterea de e-mailuri prin SMTP, permițând scripturilor să gestioneze transmisia de e-mail în mod programatic.

Gânduri finale despre redirecționarea serverului dublu

Configurarea Postfix pentru a redirecționa mesaje către mai multe servere SMTP implică o combinație de scripturi personalizate și configurații detaliate Postfix. În timp ce încercările inițiale de utilizare a DNS sau script-uri simple Python ar putea să nu ofere fiabilitatea necesară, integrarea funcțiilor și instrumentelor avansate Postfix precum Amavisd-new sau Procmail poate oferi o soluție mai robustă. Configurarea cu atenție a hărților de transport, a hărților alias virtuale și a hărților BCC ale destinatarului, puteți asigura o redirecționare fluidă și eficientă a mesajelor atât către serverele James, cât și către serverele Winmail. Această abordare asigură că infrastructura dvs. de e-mail rămâne rezistentă și capabilă să gestioneze cerințe complexe de rutare.