$lang['tuto'] = "tutorials"; ?>$lang['tuto'] = "tutorials"; ?> Com reenviar correus electrònics a diversos servidors SMTP

Com reenviar correus electrònics a diversos servidors SMTP

Com reenviar correus electrònics a diversos servidors SMTP
Com reenviar correus electrònics a diversos servidors SMTP

Configuració del reenviament SMTP dual

Gestionar diversos servidors de correu electrònic amb comptes d'usuari idèntics pot ser un repte. En aquest escenari, quan s'envia un correu electrònic a un usuari a example.com, els servidors James i Winmail l'han de rebre, assegurant-se que el contingut del correu electrònic no canvia.

Les solucions habituals, com ara la configuració de diversos registres MX al DNS, no són suficients, ja que només poden dirigir example.com a un sol servidor alhora. L'ús de Postfix per reenviar correus electrònics als dos servidors sense emmagatzematge local s'ha demostrat complex, donant lloc a solucions com ara scripts amb smtplib, que potser no són fiables. Explorem millors alternatives.

Comandament Descripció
import smtplib Importa la biblioteca Simple Mail Transfer Protocol per enviar correus electrònics amb Python.
import sys Importa el mòdul de funcions i paràmetres específics del sistema, utilitzat per obtenir arguments de línia d'ordres.
from email.mime.text import MIMEText Importa la classe MIMEText per crear missatges de correu electrònic basats en text.
from email.mime.multipart import MIMEMultipart Importa la classe MIMEMultipart per crear missatges de correu electrònic multipart.
msg.attach(MIMEText('text', 'plain')) Adjunta un cos de text sense format al missatge de correu electrònic.
with smtplib.SMTP(server) as smtp Obre una connexió al servidor SMTP i assegura que es tanca correctament després d'enviar el correu electrònic.
postmap /etc/postfix/transport Genera una base de dades binària a partir del fitxer de mapa de transport, utilitzat per Postfix per a l'encaminament del correu.
systemctl reload postfix Torna a carregar la configuració de Postfix sense aturar el servei, aplicant els canvis realitzats.

Comprensió de la integració de Postfix i Python

Els scripts proporcionats estan dissenyats per reenviar correus electrònics a dos servidors SMTP, garantint que els dos servidors rebin el mateix correu electrònic. L'script de Python, multi_forward.py, utilitza el import smtplib biblioteca per gestionar l'enviament de correu electrònic. S'importa sys per obtenir arguments de línia d'ordres, com ara el remitent i el destinatari. L'script construeix el correu electrònic utilitzant from email.mime.text import MIMEText i from email.mime.multipart import MIMEMultipart per crear i adjuntar el cos del correu electrònic. A continuació, itera una llista de servidors SMTP i envia el correu electrònic a cadascú with smtplib.SMTP(server) as smtp.

Al costat de Postfix, la configuració implica modificar el fitxer /etc/postfix/master.cf fitxer per definir el servei de transport personalitzat, multi_forward, que utilitza l'script Python. El /etc/postfix/main.cf s'actualitza per incloure un mapa de transport, que s'especifica a /etc/postfix/transport. La comanda postmap /etc/postfix/transport crea una base de dades binària a partir del mapa de transport, i systemctl reload postfix aplica els canvis de configuració sense aturar el servei Postfix. Aquesta configuració garanteix que qualsevol correu electrònic enviat a example.com sigui processat per l'script de Python i reenviat als dos servidors SMTP.

Reenvia correus electrònics a diversos servidors SMTP amb Python

Utilitzant Python per gestionar el reenviament 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)

Configuració de Postfix per utilitzar l'script de Python

Configuració de Postfix per a reenviament de correu personalitzat

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

Millora de la funcionalitat de Postfix amb eines addicionals

Un altre enfocament per aconseguir reenviar correus electrònics a diversos servidors SMTP consisteix a utilitzar eines i configuracions addicionals de Postfix. Una d'aquestes eines és Postfix sender_dependent_relayhost_maps, que permet especificar diferents amfitrions de retransmissió en funció de l'adreça del remitent. Tot i que aquesta característica s'utilitza normalment per encaminar el correu sortint a través de diferents amfitrions de retransmissió, es pot adaptar al nostre cas d'ús amb una configuració creativa. Per exemple, una combinació de virtual_alias_maps i recipient_bcc_maps es podria utilitzar per duplicar correus electrònics i reenviar-los a diferents adreces, que després s'envien als servidors respectius.

A més, integrant Postfix amb un filtre de correu com Amavisd-new o Procmail podria proporcionar més flexibilitat en el maneig i l'encaminament de correus electrònics. Aquests filtres poden processar correus electrònics a mesura que passen per Postfix, la qual cosa permet que scripts o regles personalitzats dupliquin i reenviïn missatges a diverses destinacions. Tot i que aquesta configuració pot ser més complexa que utilitzar un script de Python senzill, pot oferir una major fiabilitat i escalabilitat per a entorns que requereixen capacitats de processament de correu electrònic robustes.

Preguntes i solucions habituals per al reenviament de correu electrònic de Postfix

  1. Com puc configurar diversos registres MX al DNS?
  2. Malauradament, els registres DNS MX només admeten el mapeig a un servidor per nivell de prioritat, de manera que aquest enfocament no funcionarà per reenviar a diversos servidors simultàniament.
  3. Quina és la finalitat del transport_maps directiva?
  4. El transport_maps La directiva de Postfix especifica l'assignació d'adreces de correu electrònic o dominis a mètodes i destinacions de transport de correu específics.
  5. Llauna sender_dependent_relayhost_maps ajuda en aquest escenari?
  6. Sí, sender_dependent_relayhost_maps pot encaminar correus electrònics a través de diferents amfitrions de retransmissió en funció de l'adreça del remitent, però s'ha d'adaptar creativament per reenviar-los a diversos servidors.
  7. Com virtual_alias_maps treballar a Postfix?
  8. El virtual_alias_maps La directiva permet a Postfix assignar adreces de correu electrònic a altres adreces, permetent el reenviament i la redirecció de correus electrònics.
  9. Quin és el paper de recipient_bcc_maps?
  10. El recipient_bcc_maps La directiva permet a Postfix afegir automàticament destinataris BCC als correus electrònics entrants, útil per duplicar missatges.
  11. Puc utilitzar Amavisd-new amb Postfix per reenviar correus electrònics?
  12. Sí, Amavisd-new es pot integrar amb Postfix per aplicar regles de filtratge i reenviament personalitzades, proporcionant més control sobre el processament del correu electrònic.
  13. Que es el master.cf fitxer utilitzat per?
  14. El master.cf El fitxer Postfix defineix els processos de lliurament de correu i les seves configuracions, inclosos els serveis de transport personalitzats.
  15. Com actualitzo el transport map base de dades?
  16. Utilitzar el postmap /etc/postfix/transport ordre per crear o actualitzar la base de dades binària des del fitxer de mapa de transport.
  17. Per què és important tornar a carregar Postfix?
  18. S'està tornant a carregar Postfix amb systemctl reload postfix aplica canvis de configuració sense aturar el servei, assegurant un bon funcionament.
  19. Què és smtplib s'utilitza a Python?
  20. El smtplib La biblioteca de Python s'utilitza per enviar correus electrònics mitjançant SMTP, la qual cosa permet als scripts gestionar la transmissió de correu electrònic de manera programàtica.

Consideracions finals sobre el reenviament de servidor dual

La configuració de Postfix per reenviar missatges a diversos servidors SMTP implica una combinació d'scripts personalitzats i configuracions detallades de Postfix. Tot i que els intents inicials amb DNS o scripts de Python senzills poden no oferir la fiabilitat necessària, la integració de funcions i eines avançades de Postfix com Amavisd-new o Procmail pot proporcionar una solució més sòlida. Si configureu acuradament els mapes de transport, els mapes d'àlies virtuals i els mapes BCC del destinatari, podeu garantir un reenviament de missatges eficient i fluid als servidors James i Winmail. Aquest enfocament garanteix que la vostra infraestructura de correu electrònic segueixi sent resistent i capaç de gestionar requisits d'encaminament complexos.