E-postaları Birden Çok SMTP Sunucusuna Yönlendirme

E-postaları Birden Çok SMTP Sunucusuna Yönlendirme
E-postaları Birden Çok SMTP Sunucusuna Yönlendirme

Çift SMTP İletmeyi Ayarlama

Aynı kullanıcı hesaplarına sahip birden fazla e-posta sunucusunu yönetmek zor olabilir. Bu senaryoda, example.com'daki bir kullanıcıya bir e-posta gönderildiğinde, e-posta içeriğinin değişmeden kalması için bunun hem james hem de winmail sunucuları tarafından alınması gerekir.

DNS'de birden fazla MX kaydının yapılandırılması gibi yaygın çözümler, example.com'u aynı anda yalnızca tek bir sunucuya yönlendirebildikleri için yetersiz kalıyor. E-postaları yerel depolama olmadan her iki sunucuya iletmek için Postfix'in kullanılmasının karmaşık olduğu kanıtlandı ve smtplib ile komut dosyası oluşturma gibi güvenilir olmayabilecek çözümlere yol açtı. Daha iyi alternatifleri keşfedelim.

Emretmek Tanım
import smtplib Python kullanarak e-posta göndermek için Basit Posta Aktarım Protokolü kitaplığını içe aktarır.
import sys Komut satırı bağımsız değişkenlerini almak için kullanılan sisteme özgü parametreleri ve işlevler modülünü içe aktarır.
from email.mime.text import MIMEText Metin tabanlı e-posta mesajları oluşturmak için MIMEText sınıfını içe aktarır.
from email.mime.multipart import MIMEMultipart Çok parçalı e-posta iletileri oluşturmak için MIMEMultipart sınıfını içe aktarır.
msg.attach(MIMEText('text', 'plain')) E-posta iletisine düz metin gövdesi ekler.
with smtplib.SMTP(server) as smtp SMTP sunucusuna bir bağlantı açar ve e-postayı gönderdikten sonra düzgün şekilde kapatılmasını sağlar.
postmap /etc/postfix/transport Postfix tarafından posta yönlendirmesi için kullanılan aktarım haritası dosyasından ikili bir veritabanı oluşturur.
systemctl reload postfix Yapılan değişiklikleri uygulayarak Postfix yapılandırmasını hizmeti durdurmadan yeniden yükler.

Postfix ve Python Entegrasyonunu Anlamak

Sağlanan komut dosyaları, e-postaları iki SMTP sunucusuna iletmek ve her iki sunucunun da aynı e-postayı almasını sağlamak üzere tasarlanmıştır. Python betiği, multi_forward.py, şunu kullanır: import smtplib E-posta gönderimini yönetmek için kütüphane. İthal ediyor sys gönderen ve alıcı gibi komut satırı argümanlarını almak için. Komut dosyası, e-postayı kullanarak oluşturur from email.mime.text import MIMEText Ve from email.mime.multipart import MIMEMultipart e-posta gövdesini oluşturmak ve eklemek için. Daha sonra SMTP sunucularının bir listesi üzerinde yinelenir ve e-postayı kullanarak her birine e-postayı gönderir. with smtplib.SMTP(server) as smtp.

Postfix tarafında, yapılandırma, /etc/postfix/master.cf Özel aktarım hizmetini tanımlamak için dosya, multi_forwardPython betiğini kullanan. /etc/postfix/main.cf dosya, belirtilen bir taşıma haritasını içerecek şekilde güncellenir. /etc/postfix/transport. Komuta postmap /etc/postfix/transport taşıma haritasından ikili bir veritabanı oluşturur ve systemctl reload postfix Postfix hizmetini durdurmadan yapılandırma değişikliklerini uygular. Bu kurulum, example.com'a gönderilen herhangi bir e-postanın Python betiği tarafından işlenmesini ve her iki SMTP sunucusuna iletilmesini sağlar.

Python ile E-postaları Birden Çok SMTP Sunucusuna İletme

SMTP iletmeyi yönetmek için Python'u kullanma

# 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'i Python Komut Dosyasını Kullanacak Şekilde Yapılandırma

Özel posta yönlendirme için Postfix yapılandırması

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

Ek Araçlarla Postfix İşlevselliğini Geliştirme

E-postaları birden fazla SMTP sunucusuna iletmeye yönelik başka bir yaklaşım, ek Postfix araçlarının ve yapılandırmalarının kullanılmasını içerir. Böyle bir araç Postfix'inkidir. sender_dependent_relayhost_mapsgönderenin adresine göre farklı aktarma ana bilgisayarlarının belirlenmesine olanak tanır. Bu özellik genellikle giden postaları farklı aktarma ana bilgisayarları üzerinden yönlendirmek için kullanılsa da, bazı yaratıcı yapılandırmalarla kullanım durumumuz için uyarlanabilir. Örneğin, aşağıdakilerin bir kombinasyonu virtual_alias_maps Ve recipient_bcc_maps e-postaları çoğaltmak ve bunları farklı adreslere iletmek ve bu adreslerin daha sonra ilgili sunuculara yönlendirilmesini sağlamak için kullanılabilir.

Ayrıca Postfix'i aşağıdaki gibi bir posta filtresiyle entegre etmek Amavisd-new veya Procmail e-postaların işlenmesi ve yönlendirilmesi konusunda daha fazla esneklik sağlayabilir. Bu filtreler, e-postaları Postfix'ten geçerken işleyebilir ve özel komut dosyalarının veya kuralların mesajları kopyalayıp birden fazla hedefe iletmesine olanak tanır. Bu kurulum, basit bir Python betiği kullanmaktan daha karmaşık olsa da, güçlü e-posta işleme yetenekleri gerektiren ortamlar için daha fazla güvenilirlik ve ölçeklenebilirlik sunabilir.

Postfix E-posta Yönlendirmeyle İlgili Yaygın Sorular ve Çözümler

  1. DNS'de birden fazla MX kaydını nasıl yapılandırabilirim?
  2. Ne yazık ki, DNS MX kayıtları, öncelik düzeyi başına yalnızca bir sunucuya eşlemeyi destekler; dolayısıyla bu yaklaşım, aynı anda birden fazla sunucuya iletmede işe yaramaz.
  3. Amacı nedir? transport_maps direktif?
  4. transport_maps Postfix'teki yönerge, e-posta adreslerinin veya etki alanlarının belirli posta aktarım yöntemleri ve hedefleriyle eşlenmesini belirtir.
  5. Olabilmek sender_dependent_relayhost_maps bu senaryoda yardım?
  6. Evet, sender_dependent_relayhost_maps gönderenin adresine bağlı olarak e-postaları farklı aktarma ana bilgisayarları üzerinden yönlendirebilir, ancak birden fazla sunucuya iletme için yaratıcı bir şekilde uyarlanması gerekir.
  7. Nasıl virtual_alias_maps Postfix'te mi çalışıyorsunuz?
  8. virtual_alias_maps direktif, Postfix'in e-posta adreslerini diğer adreslerle eşleştirmesine olanak tanıyarak e-postaların iletilmesini ve yeniden yönlendirilmesini sağlar.
  9. Rolü nedir? recipient_bcc_maps?
  10. recipient_bcc_maps Yönerge, Postfix'in gelen e-postalara BCC alıcılarını otomatik olarak eklemesine olanak tanır; bu, mesajların kopyalanması için kullanışlıdır.
  11. Kullanabilirmiyim Amavisd-new E-posta yönlendirme için Postfix ile mi?
  12. Evet, Amavisd-new özel filtreleme ve iletme kuralları uygulamak için Postfix ile entegre edilebilir ve e-posta işleme üzerinde daha fazla kontrol sağlar.
  13. Nedir master.cf dosya ne için kullanılıyor?
  14. master.cf Postfix'teki dosya, özel aktarım hizmetleri de dahil olmak üzere posta dağıtım süreçlerini ve bunların yapılandırmalarını tanımlar.
  15. nasıl güncellerim transport map veri tabanı?
  16. Kullan postmap /etc/postfix/transport Aktarım eşleme dosyasından ikili veritabanını oluşturma veya güncelleme komutu.
  17. Postfix'i yeniden yüklemek neden önemlidir?
  18. Postfix'i şununla yeniden yükleme: systemctl reload postfix Hizmeti durdurmadan konfigürasyon değişikliklerini uygulayarak sorunsuz çalışmayı sağlar.
  19. Nedir smtplib Python'da için mi kullanılıyor?
  20. smtplib Python'daki kütüphane, SMTP aracılığıyla e-posta göndermek için kullanılır ve komut dosyalarının e-posta iletimini programlı olarak yönetmesine olanak tanır.

Çift Sunucu İletimi Hakkında Son Düşünceler

Postfix'in mesajları birden çok SMTP sunucusuna iletecek şekilde ayarlanması, özel komut dosyalarının ve ayrıntılı Postfix yapılandırmalarının bir kombinasyonunu içerir. DNS veya basit Python komut dosyalarını kullanan ilk girişimler gerekli güvenilirliği sağlayamasa da, gelişmiş Postfix özelliklerini ve Amavisd-new veya Procmail gibi araçları entegre etmek daha sağlam bir çözüm sağlayabilir. Aktarım haritalarını, sanal takma ad haritalarını ve alıcı BCC haritalarını dikkatlice yapılandırarak, hem james hem de winmail sunucularına kesintisiz ve etkili mesaj iletmeyi sağlayabilirsiniz. Bu yaklaşım, e-posta altyapınızın dayanıklı kalmasını ve karmaşık yönlendirme gereksinimlerini karşılayabilecek kapasitede olmasını sağlar.