Kā pārsūtīt e-pastus uz vairākiem SMTP serveriem

Python and Postfix

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, , izmanto bibliotēka, lai apstrādātu e-pasta sūtīšanu. Tas importē 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 lai izveidotu un pievienotu e-pasta pamattekstu. Pēc tam tas atkārto SMTP serveru sarakstu un nosūta e-pastu katram, izmantojot .

Postfix pusē konfigurācija ietver modificēšanu failu, lai definētu pasūtījuma transporta pakalpojumu, , kas izmanto Python skriptu. The fails tiek atjaunināts, lai iekļautu transporta karti, kas norādīta /etc/postfix/transport. Komanda izveido bināro datu bāzi no transporta kartes, un 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 , 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 un 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 vai 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.

  1. Kā DNS var konfigurēt vairākus MX ierakstus?
  2. 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.
  3. Kāds ir mērķis direktīva?
  4. The 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.
  5. Var palīdzēt šajā scenārijā?
  6. Jā, 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.
  7. Kā strādāt Postfix?
  8. The 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.
  9. Kāda ir loma ?
  10. The Direktīva ļauj Postfix automātiski pievienot BCC adresātus ienākošajiem e-pastiem, kas ir noderīgi ziņojumu dublēšanai.
  11. Vai es varu izmantot ar Postfix e-pasta pārsūtīšanai?
  12. Jā, 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.
  13. Kas ir fails izmantots?
  14. The fails Postfix definē pasta piegādes procesus un to konfigurācijas, tostarp pielāgotus transporta pakalpojumus.
  15. Kā atjaunināt datubāze?
  16. Izmantojiet komandu, lai izveidotu vai atjauninātu bināro datu bāzi no transporta kartes faila.
  17. Kāpēc ir svarīgi atkārtoti ielādēt Postfix?
  18. Pārlādē Postfix ar piemēro konfigurācijas izmaiņas, neapturot pakalpojumu, nodrošinot vienmērīgu darbību.
  19. Kas ir izmanto Python?
  20. The Python bibliotēka tiek izmantota e-pasta ziņojumu sūtīšanai, izmantojot SMTP, ļaujot skriptiem programmatiski apstrādāt e-pasta pārraidi.

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.