Πώς να προωθήσετε μηνύματα ηλεκτρονικού ταχυδρομείου σε πολλούς διακομιστές SMTP

Πώς να προωθήσετε μηνύματα ηλεκτρονικού ταχυδρομείου σε πολλούς διακομιστές SMTP
Πώς να προωθήσετε μηνύματα ηλεκτρονικού ταχυδρομείου σε πολλούς διακομιστές SMTP

Ρύθμιση Διπλής προώθησης SMTP

Η διαχείριση πολλών διακομιστών email με ίδιους λογαριασμούς χρηστών μπορεί να είναι δύσκολη. Σε αυτό το σενάριο, όταν αποστέλλεται ένα μήνυμα ηλεκτρονικού ταχυδρομείου σε έναν χρήστη στη διεύθυνση example.com, πρέπει να ληφθεί τόσο από τους διακομιστές james όσο και από τους διακομιστές winmail, διασφαλίζοντας ότι το περιεχόμενο του email παραμένει αμετάβλητο.

Οι κοινές λύσεις, όπως η ρύθμιση παραμέτρων πολλαπλών εγγραφών MX σε DNS, υπολείπονται καθώς μπορούν να κατευθύνουν το example.com μόνο σε έναν διακομιστή κάθε φορά. Η χρήση του Postfix για την προώθηση μηνυμάτων ηλεκτρονικού ταχυδρομείου και στους δύο διακομιστές χωρίς τοπικό αποθηκευτικό χώρο έχει αποδειχθεί πολύπλοκη, οδηγώντας σε λύσεις όπως το σενάριο με το smtplib, το οποίο μπορεί να μην είναι αξιόπιστο. Ας εξερευνήσουμε καλύτερες εναλλακτικές.

Εντολή Περιγραφή
import smtplib Εισάγει τη βιβλιοθήκη Simple Mail Transfer Protocol για την αποστολή email με χρήση Python.
import sys Εισάγει τη λειτουργική μονάδα παραμέτρων και συναρτήσεων για το συγκεκριμένο σύστημα, που χρησιμοποιείται για τη λήψη ορισμάτων γραμμής εντολών.
from email.mime.text import MIMEText Εισάγει την κλάση MIMEText για τη δημιουργία μηνυμάτων email βασισμένα σε κείμενο.
from email.mime.multipart import MIMEMultipart Εισάγει την κλάση MIMEMultipart για τη δημιουργία πολυμερών μηνυμάτων email.
msg.attach(MIMEText('text', 'plain')) Επισυνάπτει ένα σώμα απλού κειμένου στο μήνυμα email.
with smtplib.SMTP(server) as smtp Ανοίγει μια σύνδεση με τον διακομιστή SMTP και διασφαλίζει ότι έχει κλείσει σωστά μετά την αποστολή του email.
postmap /etc/postfix/transport Δημιουργεί μια δυαδική βάση δεδομένων από το αρχείο χάρτη μεταφοράς, που χρησιμοποιείται από την Postfix για δρομολόγηση αλληλογραφίας.
systemctl reload postfix Φορτώνει ξανά τη διαμόρφωση Postfix χωρίς διακοπή της υπηρεσίας, εφαρμόζοντας τυχόν αλλαγές που έγιναν.

Κατανόηση της ολοκλήρωσης Postfix και Python

Τα παρεχόμενα σενάρια έχουν σχεδιαστεί για την προώθηση μηνυμάτων ηλεκτρονικού ταχυδρομείου σε δύο διακομιστές SMTP, διασφαλίζοντας ότι και οι δύο διακομιστές λαμβάνουν το ίδιο email. Το σενάριο Python, multi_forward.py, χρησιμοποιεί το import smtplib βιβλιοθήκη για τη διαχείριση της αποστολής email. Εισάγει sys για να λάβετε ορίσματα γραμμής εντολών, όπως ο αποστολέας και ο παραλήπτης. Το σενάριο κατασκευάζει το email χρησιμοποιώντας from email.mime.text import MIMEText και from email.mime.multipart import MIMEMultipart για να δημιουργήσετε και να επισυνάψετε το σώμα του email. Στη συνέχεια, επαναλαμβάνει μια λίστα διακομιστών SMTP και στέλνει το email σε κάθε έναν χρησιμοποιώντας with smtplib.SMTP(server) as smtp.

Στην πλευρά Postfix, η διαμόρφωση περιλαμβάνει την τροποποίηση του /etc/postfix/master.cf αρχείο για τον καθορισμό της προσαρμοσμένης υπηρεσίας μεταφοράς, multi_forward, το οποίο χρησιμοποιεί το σενάριο Python. ο /etc/postfix/main.cf Το αρχείο ενημερώνεται για να περιλαμβάνει έναν χάρτη μεταφοράς, ο οποίος καθορίζεται στο /etc/postfix/transport. Η εντολή postmap /etc/postfix/transport δημιουργεί μια δυαδική βάση δεδομένων από τον χάρτη μεταφοράς και systemctl reload postfix εφαρμόζει τις αλλαγές διαμόρφωσης χωρίς διακοπή της υπηρεσίας Postfix. Αυτή η ρύθμιση διασφαλίζει ότι κάθε email που αποστέλλεται στο example.com υποβάλλεται σε επεξεργασία από το σενάριο Python και προωθείται και στους δύο διακομιστές SMTP.

Προώθηση email σε πολλούς διακομιστές SMTP με Python

Χρήση Python για τη διαχείριση της προώθησης 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)

Διαμόρφωση του Postfix για χρήση της δέσμης ενεργειών Python

Διαμόρφωση Postfix για προσαρμοσμένη προώθηση αλληλογραφίας

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

Βελτίωση της λειτουργικότητας Postfix με πρόσθετα εργαλεία

Μια άλλη προσέγγιση για την επίτευξη προώθησης email σε πολλούς διακομιστές SMTP περιλαμβάνει τη χρήση πρόσθετων εργαλείων και διαμορφώσεων Postfix. Ένα τέτοιο εργαλείο είναι το Postfix sender_dependent_relayhost_maps, που επιτρέπει τον καθορισμό διαφορετικών κεντρικών υπολογιστών αναμετάδοσης με βάση τη διεύθυνση του αποστολέα. Ενώ αυτή η δυνατότητα χρησιμοποιείται συνήθως για τη δρομολόγηση εξερχόμενης αλληλογραφίας μέσω διαφορετικών κεντρικών υπολογιστών αναμετάδοσης, μπορεί να προσαρμοστεί για την περίπτωση χρήσης μας με κάποια διαμόρφωση δημιουργικού. Για παράδειγμα, ένας συνδυασμός των virtual_alias_maps και recipient_bcc_maps θα μπορούσε να χρησιμοποιηθεί για την αντιγραφή email και την προώθηση τους σε διαφορετικές διευθύνσεις, οι οποίες στη συνέχεια δρομολογούνται στους αντίστοιχους διακομιστές.

Επιπλέον, η ενσωμάτωση του Postfix με ένα φίλτρο αλληλογραφίας όπως Amavisd-new ή Procmail θα μπορούσε να παρέχει μεγαλύτερη ευελιξία στο χειρισμό και τη δρομολόγηση των email. Αυτά τα φίλτρα μπορούν να επεξεργάζονται μηνύματα ηλεκτρονικού ταχυδρομείου καθώς περνούν μέσω του Postfix, επιτρέποντας προσαρμοσμένα σενάρια ή κανόνες για την αντιγραφή και προώθηση μηνυμάτων σε πολλούς προορισμούς. Αν και αυτή η ρύθμιση μπορεί να είναι πιο περίπλοκη από τη χρήση ενός απλού σεναρίου Python, μπορεί να προσφέρει μεγαλύτερη αξιοπιστία και επεκτασιμότητα για περιβάλλοντα που απαιτούν ισχυρές δυνατότητες επεξεργασίας email.

Συνήθεις ερωτήσεις και λύσεις για την προώθηση email Postfix

  1. Πώς μπορώ να ρυθμίσω πολλές εγγραφές MX σε DNS;
  2. Δυστυχώς, οι εγγραφές DNS MX υποστηρίζουν αντιστοίχιση μόνο σε έναν διακομιστή ανά επίπεδο προτεραιότητας, επομένως αυτή η προσέγγιση δεν θα λειτουργήσει για την προώθηση σε πολλούς διακομιστές ταυτόχρονα.
  3. Ποιος είναι ο σκοπός του transport_maps διευθυντικός?
  4. ο transport_maps Η οδηγία στο Postfix καθορίζει την αντιστοίχιση διευθύνσεων email ή τομέων σε συγκεκριμένες μεθόδους και προορισμούς μεταφοράς αλληλογραφίας.
  5. Μπορώ sender_dependent_relayhost_maps βοήθεια σε αυτό το σενάριο;
  6. Ναί, sender_dependent_relayhost_maps μπορεί να δρομολογήσει μηνύματα ηλεκτρονικού ταχυδρομείου μέσω διαφορετικών κεντρικών υπολογιστών αναμετάδοσης με βάση τη διεύθυνση του αποστολέα, αλλά πρέπει να προσαρμοστεί δημιουργικά για προώθηση σε πολλούς διακομιστές.
  7. Πώς κάνει virtual_alias_maps δουλεύεις στο Postfix;
  8. ο virtual_alias_maps Η οδηγία επιτρέπει στο Postfix να αντιστοιχίζει διευθύνσεις email σε άλλες διευθύνσεις, επιτρέποντας την προώθηση και ανακατεύθυνση email.
  9. Ποιος είναι ο ρόλος του recipient_bcc_maps?
  10. ο recipient_bcc_maps Η οδηγία επιτρέπει στο Postfix να προσθέτει αυτόματα παραλήπτες BCC στα εισερχόμενα email, χρήσιμο για την αντιγραφή μηνυμάτων.
  11. Μπορώ να χρησιμοποιήσω Amavisd-new με Postfix για προώθηση email;
  12. Ναί, Amavisd-new μπορεί να ενσωματωθεί με το Postfix για την εφαρμογή προσαρμοσμένων κανόνων φιλτραρίσματος και προώθησης, παρέχοντας περισσότερο έλεγχο στην επεξεργασία email.
  13. Τι είναι το master.cf αρχείο που χρησιμοποιείται για;
  14. ο master.cf Το αρχείο στο Postfix ορίζει τις διαδικασίες παράδοσης αλληλογραφίας και τις διαμορφώσεις τους, συμπεριλαμβανομένων των προσαρμοσμένων υπηρεσιών μεταφοράς.
  15. Πώς μπορώ να ενημερώσω το transport map βάση δεδομένων?
  16. Χρησιμοποιήστε το postmap /etc/postfix/transport εντολή για τη δημιουργία ή την ενημέρωση της δυαδικής βάσης δεδομένων από το αρχείο του χάρτη μεταφοράς.
  17. Γιατί είναι σημαντική η επαναφόρτωση του Postfix;
  18. Επαναφόρτωση Postfix με systemctl reload postfix εφαρμόζει αλλαγές διαμόρφωσης χωρίς διακοπή της υπηρεσίας, διασφαλίζοντας την ομαλή λειτουργία.
  19. Τι είναι smtplib χρησιμοποιείται για στην Python;
  20. ο smtplib Η βιβλιοθήκη στην Python χρησιμοποιείται για την αποστολή email μέσω SMTP, επιτρέποντας στα σενάρια να χειρίζονται τη μετάδοση email μέσω προγραμματισμού.

Τελικές σκέψεις σχετικά με την προώθηση διπλού διακομιστή

Η ρύθμιση του Postfix για προώθηση μηνυμάτων σε πολλούς διακομιστές SMTP περιλαμβάνει έναν συνδυασμό προσαρμοσμένων σεναρίων και λεπτομερών διαμορφώσεων Postfix. Ενώ οι αρχικές προσπάθειες χρήσης DNS ή απλών σεναρίων Python ενδέχεται να μην προσφέρουν την απαιτούμενη αξιοπιστία, η ενσωμάτωση προηγμένων λειτουργιών και εργαλείων Postfix όπως το Amavisd-new ή το Procmail μπορεί να προσφέρει μια πιο ισχυρή λύση. Διαμορφώνοντας προσεκτικά τους χάρτες μεταφοράς, τους χάρτες εικονικών ψευδωνύμων και τους χάρτες BCC παραληπτών, μπορείτε να εξασφαλίσετε απρόσκοπτη και αποτελεσματική προώθηση μηνυμάτων τόσο στους διακομιστές james όσο και στους διακομιστές winmail. Αυτή η προσέγγιση διασφαλίζει ότι η υποδομή email σας παραμένει ανθεκτική και ικανή να χειρίζεται περίπλοκες απαιτήσεις δρομολόγησης.