Configurazione del doppio inoltro SMTP
La gestione di più server di posta elettronica con account utente identici può essere complessa. In questo scenario, quando un'e-mail viene inviata a un utente su example.com, deve essere ricevuta sia dai server james che da quelli winmail, garantendo che il contenuto dell'e-mail rimanga invariato.
Le soluzioni comuni, come la configurazione di più record MX nel DNS, non sono sufficienti poiché possono indirizzare example.com solo a un singolo server alla volta. L'utilizzo di Postfix per inoltrare le e-mail a entrambi i server senza archiviazione locale si è rivelato complesso, portando a soluzioni come lo scripting con smtplib, che potrebbero non essere affidabili. Esploriamo alternative migliori.
Comando | Descrizione |
---|---|
import smtplib | Importa la libreria Simple Mail Transfer Protocol per l'invio di e-mail utilizzando Python. |
import sys | Importa il modulo parametri e funzioni specifici del sistema, utilizzato per ottenere argomenti della riga di comando. |
from email.mime.text import MIMEText | Importa la classe MIMEText per creare messaggi di posta elettronica basati su testo. |
from email.mime.multipart import MIMEMultipart | Importa la classe MIMEMultipart per creare messaggi di posta elettronica in più parti. |
msg.attach(MIMEText('text', 'plain')) | Allega un corpo di testo semplice al messaggio di posta elettronica. |
with smtplib.SMTP(server) as smtp | Apre una connessione al server SMTP e garantisce che venga chiusa correttamente dopo l'invio dell'e-mail. |
postmap /etc/postfix/transport | Genera un database binario dal file della mappa di trasporto, utilizzato da Postfix per l'instradamento della posta. |
systemctl reload postfix | Ricarica la configurazione di Postfix senza interrompere il servizio, applicando le eventuali modifiche apportate. |
Comprendere l'integrazione di Postfix e Python
Gli script forniti sono progettati per inoltrare e-mail a due server SMTP, garantendo che entrambi i server ricevano la stessa e-mail. Lo script Python, multi_forward.py, utilizza il import smtplib libreria per gestire l'invio di e-mail. Importa sys per ottenere argomenti della riga di comando, come il mittente e il destinatario. Lo script costruisce l'e-mail utilizzando from email.mime.text import MIMEText E from email.mime.multipart import MIMEMultipart per creare e allegare il corpo dell'e-mail. Quindi scorre un elenco di server SMTP e invia l'e-mail a ciascuno di essi with smtplib.SMTP(server) as smtp.
Sul lato Postfix, la configurazione prevede la modifica del file /etc/postfix/master.cf file per definire il servizio di trasporto personalizzato, multi_forward, che utilizza lo script Python. IL /etc/postfix/main.cf il file viene aggiornato per includere una mappa di trasporto, specificata in /etc/postfix/transport. Il comando postmap /etc/postfix/transport crea un database binario dalla mappa di trasporto e systemctl reload postfix applica le modifiche alla configurazione senza interrompere il servizio Postfix. Questa configurazione garantisce che qualsiasi email inviata a example.com venga elaborata dallo script Python e inoltrata a entrambi i server SMTP.
Inoltra email a più server SMTP con Python
Utilizzo di Python per gestire l'inoltro 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)
Configurazione di Postfix per utilizzare lo script Python
Configurazione Postfix per l'inoltro personalizzato della posta
# /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
Miglioramento della funzionalità Postfix con strumenti aggiuntivi
Un altro approccio per ottenere l'inoltro di e-mail a più server SMTP prevede l'utilizzo di strumenti e configurazioni Postfix aggiuntivi. Uno di questi strumenti è Postfix sender_dependent_relayhost_maps, che consente di specificare diversi host di inoltro in base all'indirizzo del mittente. Sebbene questa funzionalità venga generalmente utilizzata per instradare la posta in uscita attraverso diversi host di inoltro, può essere adattata al nostro caso d'uso con alcune configurazioni creative. Ad esempio, una combinazione di virtual_alias_maps E recipient_bcc_maps potrebbe essere utilizzato per duplicare le email e inoltrarle a indirizzi diversi, che vengono poi instradati ai rispettivi server.
Inoltre, integrando Postfix con un filtro di posta come Amavisd-new O Procmail potrebbe fornire maggiore flessibilità nella gestione e nell'instradamento delle e-mail. Questi filtri possono elaborare le email mentre passano attraverso Postfix, consentendo a script o regole personalizzati di duplicare e inoltrare messaggi a più destinazioni. Sebbene questa configurazione possa essere più complessa rispetto all'utilizzo di un semplice script Python, può offrire maggiore affidabilità e scalabilità per ambienti che richiedono solide capacità di elaborazione della posta elettronica.
Domande e soluzioni comuni per l'inoltro di posta elettronica Postfix
- Come posso configurare più record MX nel DNS?
- Sfortunatamente, i record DNS MX supportano solo la mappatura su un server per livello di priorità, quindi questo approccio non funzionerà per l'inoltro a più server contemporaneamente.
- Qual è lo scopo del transport_maps direttiva?
- IL transport_maps La direttiva in Postfix specifica la mappatura di indirizzi e-mail o domini su specifici metodi e destinazioni di trasporto della posta.
- Potere sender_dependent_relayhost_maps aiuto in questo scenario?
- SÌ, sender_dependent_relayhost_maps può instradare le email attraverso diversi host di inoltro in base all'indirizzo del mittente, ma deve essere adattato in modo creativo per l'inoltro a più server.
- Come fa virtual_alias_maps lavorare con Postfix?
- IL virtual_alias_maps La direttiva consente a Postfix di mappare gli indirizzi email ad altri indirizzi, abilitando l'inoltro e il reindirizzamento delle email.
- Qual è il ruolo di recipient_bcc_maps?
- IL recipient_bcc_maps La direttiva consente a Postfix di aggiungere automaticamente i destinatari BCC alle email in entrata, utile per duplicare i messaggi.
- Posso usare Amavisd-new con Postfix per l'inoltro di posta elettronica?
- SÌ, Amavisd-new può essere integrato con Postfix per applicare regole di filtraggio e inoltro personalizzate, fornendo un maggiore controllo sull'elaborazione della posta elettronica.
- Quale è master.cf file utilizzato per?
- IL master.cf in Postfix definisce i processi di consegna della posta e le relative configurazioni, inclusi i servizi di trasporto personalizzati.
- Come faccio ad aggiornare il transport map Banca dati?
- Usa il postmap /etc/postfix/transport comando per creare o aggiornare il database binario dal file della mappa di trasporto.
- Perché è importante ricaricare Postfix?
- Ricaricando Postfix con systemctl reload postfix applica le modifiche alla configurazione senza interrompere il servizio, garantendo un funzionamento regolare.
- Cosa è smtplib usato in Python?
- IL smtplib La libreria in Python viene utilizzata per inviare e-mail tramite SMTP, consentendo agli script di gestire la trasmissione di e-mail in modo programmatico.
Considerazioni finali sull'inoltro su doppio server
La configurazione di Postfix per inoltrare messaggi a più server SMTP implica una combinazione di script personalizzati e configurazioni dettagliate di Postfix. Sebbene i tentativi iniziali che utilizzano DNS o semplici script Python potrebbero non offrire l'affidabilità richiesta, l'integrazione di funzionalità e strumenti avanzati di Postfix come Amavisd-new o Procmail può fornire una soluzione più solida. Configurando attentamente le mappe di trasporto, le mappe degli alias virtuali e le mappe BCC dei destinatari, puoi garantire un inoltro dei messaggi efficiente e senza interruzioni ai server james e winmail. Questo approccio garantisce che la tua infrastruttura di posta elettronica rimanga resiliente e in grado di gestire requisiti di routing complessi.