Kaip persiųsti el. laiškus į kelis SMTP serverius

Kaip persiųsti el. laiškus į kelis SMTP serverius
Kaip persiųsti el. laiškus į kelis SMTP serverius

Dvigubo SMTP persiuntimo nustatymas

Valdyti kelis el. pašto serverius su identiškomis vartotojų abonementais gali būti sudėtinga. Pagal šį scenarijų, kai el. laiškas siunčiamas vartotojui adresu example.com, jį turi gauti ir james, ir winmail serveriai, užtikrinant, kad el. pašto turinys liktų nepakitęs.

Įprasti sprendimai, pvz., kelių MX įrašų konfigūravimas DNS sistemoje, yra netinkami, nes jie vienu metu gali nukreipti example.com tik į vieną serverį. Naudoti „Postfix“ el. laiškams persiųsti į abu serverius be vietinės saugyklos pasirodė sudėtinga, todėl atsirado tokių sprendimų kaip scenarijų kūrimas naudojant „smtplib“, kurie gali būti nepatikimi. Panagrinėkime geresnes alternatyvas.

komandą apibūdinimas
import smtplib Importuoja paprasto pašto perdavimo protokolo biblioteką el. laiškų siuntimui naudojant Python.
import sys Importuoja sistemos parametrų ir funkcijų modulį, naudojamą komandinės eilutės argumentams gauti.
from email.mime.text import MIMEText Importuoja MIMEText klasę, kad sukurtų tekstinius el. pašto pranešimus.
from email.mime.multipart import MIMEMultipart Importuoja MIMEMultipart klasę, kad sukurtų kelių dalių el. laiškus.
msg.attach(MIMEText('text', 'plain')) Prie el. laiško prideda paprasto teksto turinį.
with smtplib.SMTP(server) as smtp Atidaro ryšį su SMTP serveriu ir užtikrina, kad jis tinkamai uždarytas išsiuntus el. laišką.
postmap /etc/postfix/transport Sugeneruoja dvejetainę duomenų bazę iš transportavimo žemėlapio failo, kurią Postfix naudoja pašto nukreipimui.
systemctl reload postfix Iš naujo įkelia „Postfix“ konfigūraciją nestabdydamas paslaugos, taikydamas visus atliktus pakeitimus.

„Postfix“ ir „Python“ integracijos supratimas

Pateikti scenarijai skirti el. laiškams persiųsti į du SMTP serverius, užtikrinant, kad abu serveriai gautų tą patį el. laišką. Python scenarijus, multi_forward.py, naudoja import smtplib biblioteka el. laiškų siuntimui tvarkyti. Tai importuoja sys Norėdami gauti komandinės eilutės argumentus, pvz., siuntėjas ir gavėjas. Scenarijus sukuria el. laišką naudodamas from email.mime.text import MIMEText ir from email.mime.multipart import MIMEMultipart el. laiško turiniui sukurti ir pridėti. Tada jis kartojasi per SMTP serverių sąrašą ir siunčia el. laišką kiekvienam naudojant with smtplib.SMTP(server) as smtp.

„Postfix“ pusėje konfigūracija apima modifikavimą /etc/postfix/master.cf failą, skirtą pasirinktinei transporto paslaugai apibrėžti, multi_forward, kuris naudoja Python scenarijų. The /etc/postfix/main.cf failas atnaujinamas, kad būtų įtrauktas transporto žemėlapis, kuris nurodytas /etc/postfix/transport. Komanda postmap /etc/postfix/transport sukuria dvejetainę duomenų bazę iš transporto žemėlapio ir systemctl reload postfix taiko konfigūracijos pakeitimus nestabdydamas „Postfix“ paslaugos. Ši sąranka užtikrina, kad bet koks el. laiškas, išsiųstas adresu example.com, būtų apdorojamas Python scenarijaus ir persiunčiamas į abu SMTP serverius.

Persiųskite el. laiškus į kelis SMTP serverius naudodami Python

Python naudojimas SMTP persiuntimui valdyti

# 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“ konfigūravimas naudoti Python scenarijų

„Postfix“ konfigūracija, skirta pasirinktiniam laiškų persiuntimui

# /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“ funkcionalumo tobulinimas naudojant papildomus įrankius

Kitas būdas persiųsti el. laiškus į kelis SMTP serverius apima papildomų Postfix įrankių ir konfigūracijų naudojimą. Vienas iš tokių įrankių yra Postfix's sender_dependent_relayhost_maps, kuri leidžia nurodyti skirtingus perdavimo pagrindinius kompiuterius pagal siuntėjo adresą. Nors ši funkcija paprastai naudojama nukreipiant siunčiamą paštą per skirtingus perdavimo pagrindinius kompiuterius, ji gali būti pritaikyta mūsų naudojimo atvejui su tam tikra kūrybine konfigūracija. Pavyzdžiui, derinys virtual_alias_maps ir recipient_bcc_maps el. laiškams kopijuoti ir persiųsti skirtingais adresais, kurie vėliau nukreipiami į atitinkamus serverius.

Be to, Postfix integravimas su pašto filtru, pvz Amavisd-new arba Procmail galėtų suteikti daugiau lankstumo tvarkant ir nukreipiant el. Šie filtrai gali apdoroti el. laiškus, kai jie praeina per „Postfix“, todėl pasirinktiniai scenarijai arba taisyklės gali kopijuoti ir persiųsti pranešimus į kelias paskirties vietas. Nors ši sąranka gali būti sudėtingesnė nei naudojant paprastą Python scenarijų, ji gali pasiūlyti didesnį patikimumą ir mastelį aplinkose, kurioms reikalingos tvirtos el. pašto apdorojimo galimybės.

Įprasti Postfix el. pašto persiuntimo klausimai ir sprendimai

  1. Kaip galiu sukonfigūruoti kelis MX įrašus DNS?
  2. Deja, DNS MX įrašai palaiko tik susiejimą su vienu serveriu vienu prioriteto lygiu, todėl šis metodas neveiks, kai vienu metu persisiunčiama į kelis serverius.
  3. Koks yra tikslas transport_maps direktyva?
  4. The transport_maps „Postfix“ direktyva nurodo el. pašto adresų arba domenų susiejimą su konkrečiais pašto transportavimo būdais ir paskirties vietomis.
  5. Gali sender_dependent_relayhost_maps padėti šiuo atveju?
  6. taip, sender_dependent_relayhost_maps gali nukreipti el. laiškus per skirtingus perdavimo kompiuterius pagal siuntėjo adresą, tačiau jį reikia kūrybiškai pritaikyti persiuntimui į kelis serverius.
  7. Kaip virtual_alias_maps dirbti Postfix?
  8. The virtual_alias_maps direktyva leidžia „Postfix“ susieti el. pašto adresus su kitais adresais, kad būtų galima persiųsti ir peradresuoti el.
  9. Koks yra vaidmuo recipient_bcc_maps?
  10. The recipient_bcc_maps direktyva leidžia Postfix automatiškai pridėti BCC gavėjus prie gaunamų el. laiškų, naudingų laiškams kopijuoti.
  11. Ar galiu naudoti Amavisd-new su Postfix el. pašto peradresavimui?
  12. taip, Amavisd-new gali būti integruotas su Postfix, kad būtų taikomos tinkintos filtravimo ir persiuntimo taisyklės, leidžiančios geriau valdyti el. pašto apdorojimą.
  13. Kas yra master.cf naudojamas failas?
  14. The master.cf Failas Postfix apibrėžia pašto pristatymo procesus ir jų konfigūraciją, įskaitant pasirinktines transportavimo paslaugas.
  15. Kaip atnaujinti transport map duomenų bazėje?
  16. Naudoti postmap /etc/postfix/transport komanda sukurti arba atnaujinti dvejetainę duomenų bazę iš transportavimo žemėlapio failo.
  17. Kodėl svarbu iš naujo įkelti Postfix?
  18. Iš naujo įkeliama Postfix su systemctl reload postfix taiko konfigūracijos pakeitimus nestabdydamas paslaugos, užtikrindamas sklandų veikimą.
  19. Kas yra smtplib naudojamas Python?
  20. The smtplib Python biblioteka naudojama el. laiškams siųsti per SMTP, todėl scenarijai programiškai tvarko el. pašto siuntimą.

Paskutinės mintys apie dviejų serverių persiuntimą

„Postfix“ nustatymas, kad pranešimai būtų persiųsti į kelis SMTP serverius, apima pasirinktinių scenarijų ir išsamių „Postfix“ konfigūracijų derinį. Nors pradiniai bandymai naudoti DNS arba paprastus Python scenarijus gali nepasiūlyti reikiamo patikimumo, pažangių Postfix funkcijų ir įrankių, pvz., Amavisd-new arba Procmail, integravimas gali būti patikimesnis sprendimas. Kruopščiai sukonfigūruodami transportavimo žemėlapius, virtualių slapyvardžių žemėlapius ir gavėjų BCC žemėlapius, galite užtikrinti sklandų ir efektyvų pranešimų persiuntimą tiek į „James“, tiek į „Winmail“ serverius. Šis metodas užtikrina, kad jūsų el. pašto infrastruktūra išliks atspari ir gali patenkinti sudėtingus maršruto parinkimo reikalavimus.