Kahe SMTP edastamise seadistamine
Mitme identsete kasutajakontodega meiliserveri haldamine võib olla keeruline. Selle stsenaariumi korral, kui meil saadetakse aadressil example.com olevale kasutajale, peavad selle vastu võtma nii Jamesi kui ka Winmaili serverid, tagades, et meili sisu jääb muutumatuks.
Levinud lahendused, nagu näiteks mitme MX-kirje konfigureerimine DNS-is, ei toimi, kuna need saavad aadressi example.com korraga suunata ainult ühte serverisse. Postfixi kasutamine e-kirjade edastamiseks mõlemasse serverisse ilma kohaliku salvestusruumita on osutunud keeruliseks, mis on viinud selliste lahendusteni nagu smtplib-iga skriptimine, mis ei pruugi olla usaldusväärne. Uurime paremaid alternatiive.
Käsk | Kirjeldus |
---|---|
import smtplib | Impordib lihtsa meiliedastusprotokolli teegi Pythoni abil meilide saatmiseks. |
import sys | Impordib süsteemispetsiifiliste parameetrite ja funktsioonide mooduli, mida kasutatakse käsurea argumentide hankimiseks. |
from email.mime.text import MIMEText | Impordib klassi MIMEText tekstipõhiste meilisõnumite loomiseks. |
from email.mime.multipart import MIMEMultipart | Impordib klassi MIMEMultipart, et luua mitmeosalisi meilisõnumeid. |
msg.attach(MIMEText('text', 'plain')) | Lisab meilisõnumile lihtteksti sisu. |
with smtplib.SMTP(server) as smtp | Avab ühenduse SMTP-serveriga ja tagab, et see on pärast meili saatmist korralikult suletud. |
postmap /etc/postfix/transport | Loob transpordikaardi failist binaarandmebaasi, mida Postfix kasutab meili marsruutimiseks. |
systemctl reload postfix | Laadib Postfixi konfiguratsiooni uuesti ilma teenust peatamata, rakendades tehtud muudatusi. |
Postfixi ja Pythoni integratsiooni mõistmine
Kaasasolevad skriptid on mõeldud meilide edastamiseks kahele SMTP-serverile, tagades, et mõlemad serverid saavad sama meili. Pythoni skript, multi_forward.py, kasutab import smtplib raamatukogu meili saatmisega tegelemiseks. See impordib sys käsurea argumentide (nt saatja ja saaja) hankimiseks. Skript konstrueerib e-kirja kasutades from email.mime.text import MIMEText ja from email.mime.multipart import MIMEMultipart meili sisu loomiseks ja manustamiseks. Seejärel kordab see SMTP-serverite loendit ja saadab e-kirjad kõigile, kes kasutavad with smtplib.SMTP(server) as smtp.
Postfixi poolel hõlmab konfiguratsioon faili muutmist /etc/postfix/master.cf fail kohandatud transporditeenuse määratlemiseks, multi_forward, mis kasutab Pythoni skripti. The /etc/postfix/main.cf faili värskendatakse, et lisada transpordikaart, mis on täpsustatud /etc/postfix/transport. Käsk postmap /etc/postfix/transport loob transpordikaardilt binaarandmebaasi ja systemctl reload postfix rakendab konfiguratsioonimuudatused ilma Postfixi teenust peatamata. See seadistus tagab, et Pythoni skript töötleb kõiki aadressile example.com saadetud e-kirju ja edastab need mõlemasse SMTP-serverisse.
Edastage meilid Pythoni abil mitmele SMTP-serverile
Pythoni kasutamine SMTP edastamise haldamiseks
# 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)
Postfixi konfigureerimine Pythoni skripti kasutamiseks
Postfixi konfiguratsioon kohandatud meilide edastamiseks
# /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
Postfixi funktsionaalsuse täiustamine lisatööriistade abil
Teine meetod e-kirjade mitmele SMTP-serverile edastamiseks hõlmab täiendavate Postfixi tööriistade ja konfiguratsioonide kasutamist. Üks selline tööriist on Postfix sender_dependent_relayhost_maps, mis võimaldab määrata saatja aadressi alusel erinevaid relee hoste. Kuigi seda funktsiooni kasutatakse tavaliselt väljamineva kirja suunamiseks läbi erinevate edastusmasinate, saab seda meie kasutusjuhtumite jaoks kohandada teatud loomingulise konfiguratsiooniga. Näiteks kombinatsioon virtual_alias_maps ja recipient_bcc_maps saab kasutada e-kirjade dubleerimiseks ja erinevatele aadressidele edastamiseks, mis seejärel vastavatesse serveritesse suunatakse.
Lisaks Postfixi integreerimine meilifiltriga nagu Amavisd-new või Procmail võiks pakkuda suuremat paindlikkust meilide käsitlemisel ja suunamisel. Need filtrid saavad töödelda e-kirju, kui need läbivad Postfixi, võimaldades kohandatud skriptidel või reeglitel sõnumeid paljundada ja mitmesse sihtkohta edastada. Kuigi see seadistus võib olla keerulisem kui lihtsa Pythoni skripti kasutamine, võib see pakkuda suuremat töökindlust ja mastaapsust keskkondades, mis nõuavad tugevat meilitöötlusvõimet.
Levinud küsimused ja lahendused Postfixi meilide edastamiseks
- Kuidas saan DNS-is konfigureerida mitut MX-kirjet?
- Kahjuks toetavad DNS-i MX-kirjed prioriteeditaseme kohta ainult ühe serveriga vastendamist, nii et see lähenemisviis ei tööta korraga mitmesse serverisse edastamiseks.
- Mis on eesmärk transport_maps direktiiv?
- The transport_maps Postfixi direktiiv määrab e-posti aadresside või domeenide vastendamise kindlate postiedastusmeetodite ja -sihtkohtadega.
- Saab sender_dependent_relayhost_maps abi selles stsenaariumis?
- Jah, sender_dependent_relayhost_maps suudab meilisõnumeid suunata läbi erinevate edastusmasinate saatja aadressi alusel, kuid seda tuleb mitmesse serverisse edastamiseks loominguliselt kohandada.
- Kuidas virtual_alias_maps kas töötate Postfixis?
- The virtual_alias_maps direktiiv võimaldab Postfixil vastendada e-posti aadresse teistele aadressidele, võimaldades meilide edastamist ja ümbersuunamist.
- Mis on roll recipient_bcc_maps?
- The recipient_bcc_maps direktiiv võimaldab Postfixil automaatselt lisada sissetulevatele e-kirjadele BCC adressaate, mis on kasulik kirjade paljundamiseks.
- Kas ma võin kasutada Amavisd-new Postfixiga meilide edastamiseks?
- Jah, Amavisd-new saab integreerida Postfixiga, et rakendada kohandatud filtreerimis- ja edastamisreegleid, pakkudes suuremat kontrolli meilitöötluse üle.
- Mis on master.cf jaoks kasutatud faili?
- The master.cf Postfixi fail määratleb postiedastusprotsessid ja nende konfiguratsioonid, sealhulgas kohandatud transporditeenused.
- Kuidas värskendada transport map andmebaasi?
- Kasuta postmap /etc/postfix/transport käsk binaarandmebaasi loomiseks või värskendamiseks transpordikaardi failist.
- Miks on Postfixi uuesti laadimine oluline?
- Postfixi uuesti laadimine koos systemctl reload postfix rakendab konfiguratsioonimuudatusi ilma teenust peatamata, tagades sujuva töö.
- Mis on smtplib mida kasutatakse Pythonis?
- The smtplib Pythoni raamatukogu kasutatakse meilide saatmiseks SMTP kaudu, võimaldades skriptidel meiliedastust programmiliselt käsitleda.
Viimased mõtted kahe serveriga edastamise kohta
Postfixi seadistamine sõnumite edastamiseks mitmele SMTP-serverile hõlmab kohandatud skriptide ja üksikasjalike Postfixi konfiguratsioonide kombinatsiooni. Kuigi algsed katsed kasutada DNS-i või lihtsaid Pythoni skripte ei pruugi pakkuda vajalikku töökindlust, võib täiustatud Postfixi funktsioonide ja tööriistade (nt Amavisd-new või Procmail) integreerimine pakkuda tugevamat lahendust. Konfigureerides hoolikalt transpordikaarte, virtuaalseid pseudonüümikaarte ja adressaatide BCC-kaarte, saate tagada sujuva ja tõhusa sõnumite edastamise nii Jamesi kui ka Winmaili serveritesse. See lähenemisviis tagab, et teie e-posti infrastruktuur jääb vastupidavaks ja suudab hakkama saada keerukate marsruutimise nõuetega.