Menyiapkan Penerusan SMTP Ganda
Mengelola beberapa server email dengan akun pengguna yang sama dapat menjadi suatu tantangan. Dalam skenario ini, ketika email dikirim ke pengguna di example.com, email tersebut harus diterima oleh server james dan winmail, memastikan konten email tetap tidak berubah.
Solusi umum, seperti mengonfigurasi beberapa data MX di DNS, gagal karena solusi tersebut hanya dapat mengarahkan example.com ke satu server dalam satu waktu. Menggunakan Postfix untuk meneruskan email ke kedua server tanpa penyimpanan lokal terbukti rumit, sehingga menghasilkan solusi seperti pembuatan skrip dengan smtplib, yang mungkin tidak dapat diandalkan. Mari kita jelajahi alternatif yang lebih baik.
Memerintah | Keterangan |
---|---|
import smtplib | Mengimpor pustaka Simple Mail Transfer Protocol untuk mengirim email menggunakan Python. |
import sys | Mengimpor modul parameter dan fungsi khusus sistem, yang digunakan untuk mendapatkan argumen baris perintah. |
from email.mime.text import MIMEText | Mengimpor kelas MIMEText untuk membuat pesan email berbasis teks. |
from email.mime.multipart import MIMEMultipart | Mengimpor kelas MIMEMultipart untuk membuat pesan email multipart. |
msg.attach(MIMEText('text', 'plain')) | Melampirkan badan teks biasa ke pesan email. |
with smtplib.SMTP(server) as smtp | Membuka koneksi ke server SMTP dan memastikan koneksi ditutup dengan benar setelah mengirim email. |
postmap /etc/postfix/transport | Menghasilkan database biner dari file peta transport, yang digunakan oleh Postfix untuk perutean email. |
systemctl reload postfix | Memuat ulang konfigurasi Postfix tanpa menghentikan layanan, menerapkan perubahan apa pun yang dibuat. |
Memahami Integrasi Postfix dan Python
Skrip yang disediakan dirancang untuk meneruskan email ke dua server SMTP, memastikan kedua server menerima email yang sama. Skrip Python, multi_forward.py, menggunakan import smtplib perpustakaan untuk menangani pengiriman email. Itu mengimpor sys untuk mendapatkan argumen baris perintah, seperti pengirim dan penerima. Skrip membuat email menggunakan from email.mime.text import MIMEText Dan from email.mime.multipart import MIMEMultipart untuk membuat dan melampirkan badan email. Kemudian mengulangi daftar server SMTP dan mengirimkan email ke masing-masing server yang menggunakan with smtplib.SMTP(server) as smtp.
Di sisi Postfix, konfigurasi melibatkan modifikasi /etc/postfix/master.cf file untuk menentukan layanan transportasi khusus, multi_forward, yang menggunakan skrip Python. Itu /etc/postfix/main.cf file diperbarui untuk menyertakan peta transportasi, yang ditentukan dalam /etc/postfix/transport. Perintah postmap /etc/postfix/transport membuat database biner dari peta transportasi, dan systemctl reload postfix menerapkan perubahan konfigurasi tanpa menghentikan layanan Postfix. Penyiapan ini memastikan bahwa setiap email yang dikirim ke example.com diproses oleh skrip Python dan diteruskan ke kedua server SMTP.
Meneruskan Email ke Beberapa Server SMTP dengan Python
Menggunakan Python untuk menangani penerusan SMTP
# 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)
Mengonfigurasi Postfix untuk Menggunakan Skrip Python
Konfigurasi postfix untuk penerusan email khusus
# /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
Meningkatkan Fungsi Postfix dengan Alat Tambahan
Pendekatan lain untuk meneruskan email ke beberapa server SMTP melibatkan penggunaan alat dan konfigurasi Postfix tambahan. Salah satu alat tersebut adalah Postfix sender_dependent_relayhost_maps, yang memungkinkan penentuan host relai yang berbeda berdasarkan alamat pengirim. Meskipun fitur ini biasanya digunakan untuk merutekan email keluar melalui host relai yang berbeda, fitur ini dapat disesuaikan untuk kasus penggunaan kami dengan beberapa konfigurasi kreatif. Misalnya kombinasi dari virtual_alias_maps Dan recipient_bcc_maps dapat digunakan untuk menggandakan email dan meneruskannya ke alamat berbeda, yang kemudian dialihkan ke server masing-masing.
Selain itu, mengintegrasikan Postfix dengan filter email seperti Amavisd-new atau Procmail dapat memberikan lebih banyak fleksibilitas dalam menangani dan merutekan email. Filter ini dapat memproses email saat melewati Postfix, memungkinkan skrip atau aturan khusus untuk menduplikasi dan meneruskan pesan ke beberapa tujuan. Meskipun penyiapan ini mungkin lebih rumit daripada menggunakan skrip Python sederhana, penyiapan ini dapat menawarkan keandalan dan skalabilitas yang lebih baik untuk lingkungan yang memerlukan kemampuan pemrosesan email yang kuat.
Pertanyaan Umum dan Solusi untuk Penerusan Email Postfix
- Bagaimana cara mengonfigurasi beberapa data MX di DNS?
- Sayangnya, data MX DNS hanya mendukung pemetaan ke satu server per tingkat prioritas, sehingga pendekatan ini tidak akan berfungsi untuk meneruskan ke beberapa server secara bersamaan.
- Apa tujuan dari transport_maps pengarahan?
- Itu transport_maps arahan di Postfix menentukan pemetaan alamat email atau domain ke metode dan tujuan transportasi email tertentu.
- Bisa sender_dependent_relayhost_maps membantu dalam skenario ini?
- Ya, sender_dependent_relayhost_maps dapat merutekan email melalui host relai yang berbeda berdasarkan alamat pengirim, namun perlu diadaptasi secara kreatif untuk meneruskan ke beberapa server.
- Bagaimana virtual_alias_maps bekerja di Postfix?
- Itu virtual_alias_maps arahan memungkinkan Postfix untuk memetakan alamat email ke alamat lain, memungkinkan penerusan dan pengalihan email.
- Apa perannya recipient_bcc_maps?
- Itu recipient_bcc_maps arahan memungkinkan Postfix untuk secara otomatis menambahkan penerima BCC ke email masuk, berguna untuk menggandakan pesan.
- Dapatkah saya menggunakan Amavisd-new dengan Postfix untuk penerusan email?
- Ya, Amavisd-new dapat diintegrasikan dengan Postfix untuk menerapkan aturan pemfilteran dan penerusan khusus, memberikan kontrol lebih besar atas pemrosesan email.
- Apakah yang master.cf file digunakan untuk?
- Itu master.cf file di Postfix mendefinisikan proses pengiriman email dan konfigurasinya, termasuk layanan transportasi khusus.
- Bagaimana cara memperbarui transport map basis data?
- Menggunakan postmap /etc/postfix/transport perintah untuk membuat atau memperbarui database biner dari file peta transport.
- Mengapa memuat ulang Postfix penting?
- Memuat ulang Postfix dengan systemctl reload postfix menerapkan perubahan konfigurasi tanpa menghentikan layanan, memastikan kelancaran pengoperasian.
- Apa smtplib digunakan untuk Python?
- Itu smtplib perpustakaan di Python digunakan untuk mengirim email melalui SMTP, memungkinkan skrip menangani transmisi email secara terprogram.
Pemikiran Terakhir tentang Penerusan Server Ganda
Menyiapkan Postfix untuk meneruskan pesan ke beberapa server SMTP melibatkan kombinasi skrip khusus dan konfigurasi Postfix yang terperinci. Meskipun upaya awal menggunakan DNS atau skrip Python sederhana mungkin tidak memberikan keandalan yang diperlukan, mengintegrasikan fitur dan alat Postfix tingkat lanjut seperti Amavisd-new atau Procmail dapat memberikan solusi yang lebih tangguh. Dengan mengonfigurasi peta transportasi, peta alias virtual, dan peta BCC penerima secara hati-hati, Anda dapat memastikan penerusan pesan yang lancar dan efisien ke server james dan winmail. Pendekatan ini memastikan infrastruktur email Anda tetap tangguh dan mampu menangani persyaratan perutean yang rumit.