Configuration du double transfert SMTP
La gestion de plusieurs serveurs de messagerie avec des comptes d'utilisateurs identiques peut s'avérer difficile. Dans ce scénario, lorsqu'un e-mail est envoyé à un utilisateur sur example.com, il doit être reçu à la fois par les serveurs James et Winmail, garantissant ainsi que le contenu de l'e-mail reste inchangé.
Les solutions courantes, telles que la configuration de plusieurs enregistrements MX dans DNS, ne suffisent pas car elles ne peuvent diriger example.com que vers un seul serveur à la fois. Utiliser Postfix pour transférer des e-mails vers les deux serveurs sans stockage local s'est avéré complexe, conduisant à des solutions telles que l'écriture de scripts avec smtplib, qui peuvent ne pas être fiables. Explorons de meilleures alternatives.
Commande | Description |
---|---|
import smtplib | Importe la bibliothèque Simple Mail Transfer Protocol pour l'envoi d'e-mails à l'aide de Python. |
import sys | Importe le module de paramètres et de fonctions spécifiques au système, utilisé pour obtenir les arguments de ligne de commande. |
from email.mime.text import MIMEText | Importe la classe MIMEText pour créer des messages électroniques textuels. |
from email.mime.multipart import MIMEMultipart | Importe la classe MIMEMultipart pour créer des messages électroniques en plusieurs parties. |
msg.attach(MIMEText('text', 'plain')) | Joint un corps de texte brut au message électronique. |
with smtplib.SMTP(server) as smtp | Ouvre une connexion au serveur SMTP et s'assure qu'elle est correctement fermée après l'envoi de l'e-mail. |
postmap /etc/postfix/transport | Génère une base de données binaire à partir du fichier de carte de transport, utilisé par Postfix pour le routage du courrier. |
systemctl reload postfix | Recharge la configuration de Postfix sans arrêter le service, en appliquant les modifications apportées. |
Comprendre l'intégration de Postfix et Python
Les scripts fournis sont conçus pour transférer les e-mails vers deux serveurs SMTP, garantissant que les deux serveurs reçoivent le même e-mail. Le script Python, , utilise le bibliothèque pour gérer l’envoi d’e-mails. Il importe pour obtenir des arguments de ligne de commande, tels que l'expéditeur et le destinataire. Le script construit l'e-mail en utilisant from email.mime.text import MIMEText et pour créer et joindre le corps de l'e-mail. Il parcourt ensuite une liste de serveurs SMTP et envoie l'e-mail à chacun d'entre eux en utilisant .
Côté Postfix, la configuration implique de modifier le fichier pour définir la prestation de transport personnalisée, , qui utilise le script Python. Le Le fichier est mis à jour pour inclure une carte de transport, spécifiée dans /etc/postfix/transport. La commande crée une base de données binaire à partir de la carte de transport, et applique les modifications de configuration sans arrêter le service Postfix. Cette configuration garantit que tout e-mail envoyé à example.com est traité par le script Python et transmis aux deux serveurs SMTP.
Transférer des e-mails vers plusieurs serveurs SMTP avec Python
Utiliser Python pour gérer le transfert 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)
Configurer Postfix pour utiliser le script Python
Configuration Postfix pour le transfert de courrier personnalisé
# /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
Améliorer les fonctionnalités de Postfix avec des outils supplémentaires
Une autre approche pour transférer des e-mails vers plusieurs serveurs SMTP consiste à utiliser des outils et des configurations Postfix supplémentaires. Un de ces outils est celui de Postfix , qui permet de spécifier différents hôtes relais en fonction de l'adresse de l'expéditeur. Bien que cette fonctionnalité soit généralement utilisée pour acheminer le courrier sortant via différents hôtes relais, elle peut être adaptée à notre cas d'utilisation avec une configuration créative. Par exemple, une combinaison de et pourrait être utilisé pour dupliquer des e-mails et les transférer vers différentes adresses, qui sont ensuite acheminées vers les serveurs respectifs.
De plus, intégrer Postfix avec un filtre de messagerie comme ou pourrait offrir plus de flexibilité dans la gestion et le routage des e-mails. Ces filtres peuvent traiter les e-mails lors de leur passage via Postfix, permettant ainsi à des scripts ou à des règles personnalisés de dupliquer et de transférer les messages vers plusieurs destinations. Bien que cette configuration puisse être plus complexe que l'utilisation d'un simple script Python, elle peut offrir une plus grande fiabilité et évolutivité pour les environnements nécessitant des capacités robustes de traitement des e-mails.
- Comment puis-je configurer plusieurs enregistrements MX dans DNS ?
- Malheureusement, les enregistrements DNS MX ne prennent en charge que le mappage vers un serveur par niveau de priorité. Cette approche ne fonctionnera donc pas pour le transfert vers plusieurs serveurs simultanément.
- Quel est le but du directif?
- Le La directive dans Postfix spécifie le mappage des adresses e-mail ou des domaines vers des méthodes et destinations de transport de courrier spécifiques.
- Peut aider dans ce scénario?
- Oui, peut acheminer les e-mails via différents hôtes relais en fonction de l'adresse de l'expéditeur, mais il doit être adapté de manière créative pour le transfert vers plusieurs serveurs.
- Comment travailler avec Postfix ?
- Le La directive permet à Postfix de mapper les adresses e-mail à d’autres adresses, permettant ainsi le transfert et la redirection des e-mails.
- Quel est le rôle de ?
- Le La directive permet à Postfix d'ajouter automatiquement des destinataires BCC aux e-mails entrants, ce qui est utile pour la duplication des messages.
- Puis-je utiliser avec Postfix pour le transfert d'e-mails ?
- Oui, peut être intégré à Postfix pour appliquer des règles de filtrage et de transfert personnalisées, offrant ainsi plus de contrôle sur le traitement des e-mails.
- Quel est le fichier utilisé pour?
- Le dans Postfix définit les processus de livraison du courrier et leurs configurations, y compris les services de transport personnalisés.
- Comment mettre à jour le base de données?
- Utilisez le commande pour créer ou mettre à jour la base de données binaire à partir du fichier de carte de transport.
- Pourquoi le rechargement de Postfix est-il important ?
- Recharger Postfix avec applique les modifications de configuration sans arrêter le service, garantissant ainsi un fonctionnement fluide.
- Qu'est-ce que utilisé en Python ?
- Le La bibliothèque en Python est utilisée pour envoyer des e-mails via SMTP, permettant aux scripts de gérer la transmission d'e-mails par programme.
La configuration de Postfix pour transférer des messages vers plusieurs serveurs SMTP implique une combinaison de scripts personnalisés et de configurations Postfix détaillées. Bien que les premières tentatives utilisant DNS ou de simples scripts Python n'offrent pas la fiabilité requise, l'intégration de fonctionnalités et d'outils avancés de Postfix comme Amavisd-new ou Procmail peut fournir une solution plus robuste. En configurant soigneusement les cartes de transport, les cartes d'alias virtuels et les cartes BCC des destinataires, vous pouvez garantir un transfert de messages transparent et efficace vers les serveurs James et Winmail. Cette approche garantit que votre infrastructure de messagerie reste résiliente et capable de gérer des exigences de routage complexes.