Duālās SMTP pārsūtīšanas iestatīšana
Vairāku e-pasta serveru pārvaldība ar identiskiem lietotāju kontiem var būt sarežģīta. Šādā gadījumā, kad e-pasts tiek nosūtīts lietotājam vietnē example.com, tas ir jāsaņem gan james, gan winmail serveriem, nodrošinot, ka e-pasta saturs paliek nemainīgs.
Izplatītākie risinājumi, piemēram, vairāku MX ierakstu konfigurēšana DNS, ir nepilnīgi, jo tie var vienlaikus novirzīt vietni example.com tikai vienam serverim. Programmas Postfix izmantošana e-pasta ziņojumu pārsūtīšanai uz abiem serveriem bez vietējās krātuves ir izrādījusies sarežģīta, kā rezultātā tiek radīti tādi risinājumi kā skriptēšana ar smtplib, kas var nebūt uzticama. Izpētīsim labākas alternatīvas.
Komanda | Apraksts |
---|---|
import smtplib | Importē vienkāršā pasta pārsūtīšanas protokola bibliotēku e-pasta ziņojumu sūtīšanai, izmantojot Python. |
import sys | Importē sistēmai raksturīgo parametru un funkciju moduli, ko izmanto, lai iegūtu komandrindas argumentus. |
from email.mime.text import MIMEText | Importē klasi MIMEText, lai izveidotu teksta e-pasta ziņas. |
from email.mime.multipart import MIMEMultipart | Importē MIMEMultipart klasi, lai izveidotu vairāku daļu e-pasta ziņojumus. |
msg.attach(MIMEText('text', 'plain')) | E-pasta ziņojumam pievieno vienkārša teksta pamattekstu. |
with smtplib.SMTP(server) as smtp | Atver savienojumu ar SMTP serveri un nodrošina, ka pēc e-pasta nosūtīšanas tas ir pareizi aizvērts. |
postmap /etc/postfix/transport | Ģenerē bināro datu bāzi no transporta kartes faila, ko Postfix izmanto pasta maršrutēšanai. |
systemctl reload postfix | Pārlādē Postfix konfigurāciju, neapturot pakalpojumu, piemērojot visas veiktās izmaiņas. |
Izpratne par Postfix un Python integrāciju
Nodrošinātie skripti ir paredzēti e-pasta ziņojumu pārsūtīšanai uz diviem SMTP serveriem, nodrošinot, ka abi serveri saņem vienu un to pašu e-pastu. Python skripts, multi_forward.py, izmanto import smtplib bibliotēka, lai apstrādātu e-pasta sūtīšanu. Tas importē sys lai iegūtu komandrindas argumentus, piemēram, sūtītāju un adresātu. Skripts konstruē e-pastu, izmantojot from email.mime.text import MIMEText un from email.mime.multipart import MIMEMultipart lai izveidotu un pievienotu e-pasta pamattekstu. Pēc tam tas atkārto SMTP serveru sarakstu un nosūta e-pastu katram, izmantojot with smtplib.SMTP(server) as smtp.
Postfix pusē konfigurācija ietver modificēšanu /etc/postfix/master.cf failu, lai definētu pasūtījuma transporta pakalpojumu, multi_forward, kas izmanto Python skriptu. The /etc/postfix/main.cf fails tiek atjaunināts, lai iekļautu transporta karti, kas norādīta /etc/postfix/transport. Komanda postmap /etc/postfix/transport izveido bināro datu bāzi no transporta kartes, un systemctl reload postfix piemēro konfigurācijas izmaiņas, neapturot Postfix pakalpojumu. Šī iestatīšana nodrošina, ka visi uz example.com nosūtītie e-pasta ziņojumi tiek apstrādāti ar Python skriptu un pārsūtīti uz abiem SMTP serveriem.
Pārsūtiet e-pastus uz vairākiem SMTP serveriem, izmantojot Python
Python izmantošana, lai apstrādātu SMTP pārsūtīšanu
# 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 konfigurēšana, lai izmantotu Python skriptu
Postfix konfigurācija pielāgotai pasta pārsūtīšanai
# /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 funkcionalitātes uzlabošana ar papildu rīkiem
Vēl viena pieeja e-pasta ziņojumu pārsūtīšanai uz vairākiem SMTP serveriem ietver papildu Postfix rīku un konfigurāciju izmantošanu. Viens no šādiem rīkiem ir Postfix's sender_dependent_relayhost_maps, kas ļauj norādīt dažādus releja saimniekdatorus, pamatojoties uz sūtītāja adresi. Lai gan šī funkcija parasti tiek izmantota, lai novirzītu izejošo pastu caur dažādiem pārraides resursdatoriem, to var pielāgot mūsu lietošanas gadījumam ar noteiktu radošu konfigurāciju. Piemēram, kombinācija virtual_alias_maps un recipient_bcc_maps var izmantot, lai dublētu e-pastus un pārsūtītu tos uz dažādām adresēm, kas pēc tam tiek novirzīti uz attiecīgajiem serveriem.
Turklāt Postfix integrēšana ar pasta filtru, piemēram Amavisd-new vai Procmail varētu nodrošināt lielāku elastību e-pasta apstrādē un maršrutēšanā. Šie filtri var apstrādāt e-pastus, kad tie iziet cauri Postfix, ļaujot pielāgotiem skriptiem vai kārtulām dublēt un pārsūtīt ziņojumus uz vairākiem galamērķiem. Lai gan šī iestatīšana var būt sarežģītāka nekā vienkārša Python skripta izmantošana, tā var piedāvāt lielāku uzticamību un mērogojamību vidēm, kurās nepieciešamas spēcīgas e-pasta apstrādes iespējas.
Bieži uzdotie jautājumi un risinājumi Postfix e-pasta pārsūtīšanai
- Kā DNS var konfigurēt vairākus MX ierakstus?
- Diemžēl DNS MX ieraksti atbalsta kartēšanu tikai vienam serverim katrā prioritātes līmenī, tāpēc šī pieeja nedarbosies, pārsūtot uz vairākiem serveriem vienlaikus.
- Kāds ir mērķis transport_maps direktīva?
- The transport_maps Direktīva Postfix nosaka e-pasta adrešu vai domēnu kartēšanu ar noteiktām pasta transportēšanas metodēm un galamērķiem.
- Var sender_dependent_relayhost_maps palīdzēt šajā scenārijā?
- Jā, sender_dependent_relayhost_maps var maršrutēt e-pastus caur dažādiem pārraides saimniekiem, pamatojoties uz sūtītāja adresi, taču tas ir radoši jāpielāgo pārsūtīšanai uz vairākiem serveriem.
- Kā virtual_alias_maps strādāt Postfix?
- The virtual_alias_maps Direktīva ļauj Postfix kartēt e-pasta adreses ar citām adresēm, nodrošinot e-pasta ziņojumu pārsūtīšanu un pāradresāciju.
- Kāda ir loma recipient_bcc_maps?
- The recipient_bcc_maps Direktīva ļauj Postfix automātiski pievienot BCC adresātus ienākošajiem e-pastiem, kas ir noderīgi ziņojumu dublēšanai.
- Vai es varu izmantot Amavisd-new ar Postfix e-pasta pārsūtīšanai?
- Jā, Amavisd-new var integrēt ar Postfix, lai piemērotu pielāgotus filtrēšanas un pārsūtīšanas noteikumus, nodrošinot lielāku kontroli pār e-pasta apstrādi.
- Kas ir master.cf fails izmantots?
- The master.cf fails Postfix definē pasta piegādes procesus un to konfigurācijas, tostarp pielāgotus transporta pakalpojumus.
- Kā atjaunināt transport map datubāze?
- Izmantojiet postmap /etc/postfix/transport komandu, lai izveidotu vai atjauninātu bināro datu bāzi no transporta kartes faila.
- Kāpēc ir svarīgi atkārtoti ielādēt Postfix?
- Pārlādē Postfix ar systemctl reload postfix piemēro konfigurācijas izmaiņas, neapturot pakalpojumu, nodrošinot vienmērīgu darbību.
- Kas ir smtplib izmanto Python?
- The smtplib Python bibliotēka tiek izmantota e-pasta ziņojumu sūtīšanai, izmantojot SMTP, ļaujot skriptiem programmatiski apstrādāt e-pasta pārraidi.
Pēdējās domas par divu serveru pārsūtīšanu
Postfix iestatīšana ziņojumu pārsūtīšanai uz vairākiem SMTP serveriem ietver pielāgotu skriptu un detalizētu Postfix konfigurāciju kombināciju. Lai gan sākotnējie mēģinājumi izmantot DNS vai vienkāršus Python skriptus var nenodrošināt nepieciešamo uzticamību, uzlaboto Postfix funkciju un rīku, piemēram, Amavisd-new vai Procmail, integrēšana var nodrošināt stabilāku risinājumu. Rūpīgi konfigurējot transporta kartes, virtuālo aizstājvārdu kartes un adresātu BCC kartes, jūs varat nodrošināt netraucētu un efektīvu ziņojumu pārsūtīšanu gan uz James, gan uz Winmail serveriem. Šī pieeja nodrošina, ka jūsu e-pasta infrastruktūra joprojām ir elastīga un spēj apstrādāt sarežģītas maršrutēšanas prasības.