Ç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, , şunu kullanır: E-posta gönderimini yönetmek için kütüphane. İthal ediyor 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 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. .
Postfix tarafında, yapılandırma, Özel aktarım hizmetini tanımlamak için dosya, Python betiğini kullanan. dosya, belirtilen bir taşıma haritasını içerecek şekilde güncellenir. /etc/postfix/transport. Komuta taşıma haritasından ikili bir veritabanı oluşturur ve 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. gö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 Ve 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 veya 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.
- DNS'de birden fazla MX kaydını nasıl yapılandırabilirim?
- 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.
- Amacı nedir? direktif?
- Postfix'teki yönerge, e-posta adreslerinin veya etki alanlarının belirli posta aktarım yöntemleri ve hedefleriyle eşlenmesini belirtir.
- Olabilmek bu senaryoda yardım?
- Evet, 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.
- Nasıl Postfix'te mi çalışıyorsunuz?
- 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.
- Rolü nedir? ?
- 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.
- Kullanabilirmiyim E-posta yönlendirme için Postfix ile mi?
- Evet, özel filtreleme ve iletme kuralları uygulamak için Postfix ile entegre edilebilir ve e-posta işleme üzerinde daha fazla kontrol sağlar.
- Nedir dosya ne için kullanılıyor?
- 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.
- nasıl güncellerim veri tabanı?
- Kullan Aktarım eşleme dosyasından ikili veritabanını oluşturma veya güncelleme komutu.
- Postfix'i yeniden yüklemek neden önemlidir?
- Postfix'i şununla yeniden yükleme: Hizmeti durdurmadan konfigürasyon değişikliklerini uygulayarak sorunsuz çalışmayı sağlar.
- Nedir Python'da için mi kullanılıyor?
- 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.
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.