كيفية إعادة توجيه رسائل البريد الإلكتروني إلى خوادم SMTP متعددة

كيفية إعادة توجيه رسائل البريد الإلكتروني إلى خوادم SMTP متعددة
كيفية إعادة توجيه رسائل البريد الإلكتروني إلى خوادم SMTP متعددة

إعداد إعادة توجيه SMTP المزدوج

قد تكون إدارة خوادم بريد إلكتروني متعددة بحسابات مستخدمين متطابقة أمرًا صعبًا. في هذا السيناريو، عندما يتم إرسال بريد إلكتروني إلى مستخدم على example.com، يجب أن يتم استلامه بواسطة خوادم جيمس وWinmail، مما يضمن بقاء محتوى البريد الإلكتروني دون تغيير.

الحلول الشائعة، مثل تكوين سجلات MX متعددة في DNS، غير كافية لأنها يمكنها فقط توجيه example.com إلى خادم واحد في المرة الواحدة. أثبت استخدام Postfix لإعادة توجيه رسائل البريد الإلكتروني إلى كلا الخادمين دون تخزين محلي أنه أمر معقد، مما أدى إلى حلول مثل البرمجة النصية باستخدام smtplib، والتي قد لا تكون موثوقة. دعونا استكشاف بدائل أفضل.

يأمر وصف
import smtplib يستورد مكتبة Simple Mail Transfer Protocol لإرسال رسائل البريد الإلكتروني باستخدام Python.
import sys يستورد وحدة المعلمات والوظائف الخاصة بالنظام، المستخدمة للحصول على وسيطات سطر الأوامر.
from email.mime.text import MIMEText استيراد فئة MIMEText لإنشاء رسائل بريد إلكتروني نصية.
from email.mime.multipart import MIMEMultipart استيراد فئة MIMEMultipart لإنشاء رسائل بريد إلكتروني متعددة الأجزاء.
msg.attach(MIMEText('text', 'plain')) إرفاق نص نص عادي برسالة البريد الإلكتروني.
with smtplib.SMTP(server) as smtp يفتح اتصالاً بخادم SMTP ويضمن إغلاقه بشكل صحيح بعد إرسال البريد الإلكتروني.
postmap /etc/postfix/transport يُنشئ قاعدة بيانات ثنائية من ملف خريطة النقل، الذي يستخدمه Postfix لتوجيه البريد.
systemctl reload postfix يعيد تحميل إعدادات Postfix دون إيقاف الخدمة، وتطبيق أي تغييرات تم إجراؤها.

فهم تكامل Postfix وPython

تم تصميم البرامج النصية المقدمة لإعادة توجيه رسائل البريد الإلكتروني إلى خادمين SMTP، مما يضمن تلقي كلا الخادمين نفس البريد الإلكتروني. البرنامج النصي بايثون, multi_forward.py، يستخدم import smtplib مكتبة للتعامل مع إرسال البريد الإلكتروني. انها تستورد sys للحصول على وسيطات سطر الأوامر، مثل المرسل والمستلم. يقوم البرنامج النصي بإنشاء البريد الإلكتروني باستخدام from email.mime.text import MIMEText و from email.mime.multipart import MIMEMultipart لإنشاء نص البريد الإلكتروني وإرفاقه. ثم يقوم بالتكرار على قائمة خوادم SMTP ويرسل البريد الإلكتروني إلى كل خادم يستخدمه with smtplib.SMTP(server) as smtp.

من ناحية Postfix، يتضمن التكوين تعديل ملف /etc/postfix/master.cf ملف لتحديد خدمة النقل المخصصة، multi_forward، والذي يستخدم البرنامج النصي بايثون. ال /etc/postfix/main.cf يتم تحديث الملف ليشمل خريطة النقل المحددة في /etc/postfix/transport. الامر postmap /etc/postfix/transport ينشئ قاعدة بيانات ثنائية من خريطة النقل، و systemctl reload postfix يطبق تغييرات التكوين دون إيقاف خدمة Postfix. يضمن هذا الإعداد معالجة أي بريد إلكتروني يتم إرساله إلى example.com بواسطة البرنامج النصي Python وإعادة توجيهه إلى خادمي SMTP.

إعادة توجيه رسائل البريد الإلكتروني إلى خوادم SMTP متعددة باستخدام Python

استخدام Python للتعامل مع إعادة توجيه 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)

تكوين Postfix لاستخدام برنامج Python النصي

تكوين Postfix لإعادة توجيه البريد المخصص

# /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 باستخدام أدوات إضافية

تتضمن الطريقة الأخرى لتحقيق إعادة توجيه رسائل البريد الإلكتروني إلى خوادم SMTP متعددة استخدام أدوات وتكوينات Postfix الإضافية. إحدى هذه الأدوات هي أداة Postfix sender_dependent_relayhost_maps، والذي يسمح بتحديد مضيفي الترحيل المختلفين بناءً على عنوان المرسل. على الرغم من أن هذه الميزة تُستخدم عادةً لتوجيه البريد الصادر من خلال مضيفي ترحيل مختلفين، إلا أنه يمكن تكييفها مع حالة الاستخدام الخاصة بنا مع بعض التكوينات الإبداعية. على سبيل المثال، مزيج من virtual_alias_maps و recipient_bcc_maps يمكن استخدامها لتكرار رسائل البريد الإلكتروني وإعادة توجيهها إلى عناوين مختلفة، والتي يتم توجيهها بعد ذلك إلى الخوادم المعنية.

بالإضافة إلى ذلك، دمج Postfix مع مرشح البريد مثل Amavisd-new أو Procmail يمكن أن يوفر المزيد من المرونة في التعامل مع رسائل البريد الإلكتروني وتوجيهها. يمكن لهذه المرشحات معالجة رسائل البريد الإلكتروني أثناء مرورها عبر Postfix، مما يسمح للبرامج النصية أو القواعد المخصصة بتكرار الرسائل وإعادة توجيهها إلى وجهات متعددة. على الرغم من أن هذا الإعداد قد يكون أكثر تعقيدًا من استخدام برنامج Python النصي البسيط، إلا أنه يمكن أن يوفر قدرًا أكبر من الموثوقية وقابلية التوسع للبيئات التي تتطلب إمكانات قوية لمعالجة البريد الإلكتروني.

الأسئلة والحلول الشائعة لإعادة توجيه البريد الإلكتروني Postfix

  1. كيف يمكنني تكوين سجلات MX متعددة في DNS؟
  2. لسوء الحظ، تدعم سجلات DNS MX فقط التعيين إلى خادم واحد لكل مستوى أولوية، لذلك لن ينجح هذا الأسلوب في إعادة التوجيه إلى خوادم متعددة في وقت واحد.
  3. ما هو الغرض من transport_maps التوجيه؟
  4. ال transport_maps يحدد التوجيه في Postfix تعيين عناوين البريد الإلكتروني أو النطاقات لطرق ووجهات محددة لنقل البريد.
  5. يستطيع sender_dependent_relayhost_maps مساعدة في هذا السيناريو؟
  6. نعم، sender_dependent_relayhost_maps يمكن توجيه رسائل البريد الإلكتروني من خلال مضيفي ترحيل مختلفين بناءً على عنوان المرسل، ولكن يجب تكييفها بشكل إبداعي لإعادة التوجيه إلى خوادم متعددة.
  7. كيف virtual_alias_maps العمل في Postfix؟
  8. ال virtual_alias_maps يسمح التوجيه لـ Postfix بتعيين عناوين البريد الإلكتروني لعناوين أخرى، مما يتيح إعادة توجيه رسائل البريد الإلكتروني وإعادة توجيهها.
  9. ما هو دور recipient_bcc_maps؟
  10. ال recipient_bcc_maps يسمح التوجيه لـ Postfix بإضافة مستلمي نسخة مخفية الوجهة تلقائيًا إلى رسائل البريد الإلكتروني الواردة، وهو أمر مفيد لتكرار الرسائل.
  11. هل بإمكاني استخدم Amavisd-new مع Postfix لإعادة توجيه البريد الإلكتروني؟
  12. نعم، Amavisd-new يمكن دمجها مع Postfix لتطبيق قواعد التصفية وإعادة التوجيه المخصصة، مما يوفر مزيدًا من التحكم في معالجة البريد الإلكتروني.
  13. ما هو master.cf الملف المستخدم ل؟
  14. ال master.cf يحدد الملف الموجود في Postfix عمليات تسليم البريد وتكويناتها، بما في ذلك خدمات النقل المخصصة.
  15. كيف أقوم بتحديث transport map قاعدة البيانات؟
  16. استخدم ال postmap /etc/postfix/transport أمر لإنشاء أو تحديث قاعدة البيانات الثنائية من ملف خريطة النقل.
  17. لماذا تعتبر إعادة تحميل Postfix مهمة؟
  18. إعادة تحميل Postfix مع systemctl reload postfix يطبق تغييرات التكوين دون إيقاف الخدمة، مما يضمن التشغيل السلس.
  19. ما هو smtplib تستخدم في بايثون؟
  20. ال smtplib تُستخدم مكتبة Python لإرسال رسائل البريد الإلكتروني عبر SMTP، مما يسمح للبرامج النصية بالتعامل مع إرسال البريد الإلكتروني برمجيًا.

الأفكار النهائية حول إعادة توجيه الخادم المزدوج

يتضمن إعداد Postfix لإعادة توجيه الرسائل إلى خوادم SMTP متعددة مجموعة من البرامج النصية المخصصة وتكوينات Postfix التفصيلية. في حين أن المحاولات الأولية باستخدام DNS أو نصوص Python البسيطة قد لا توفر الموثوقية المطلوبة، إلا أن دمج ميزات وأدوات Postfix المتقدمة مثل Amavisd-new أو Procmail يمكن أن يوفر حلاً أكثر قوة. من خلال التكوين الدقيق لخرائط النقل، وخرائط الأسماء المستعارة الافتراضية، وخرائط BCC للمستلم، يمكنك ضمان إعادة توجيه الرسائل بشكل سلس وفعال إلى خوادم جيمس وWinmail. يضمن هذا الأسلوب أن تظل البنية الأساسية لبريدك الإلكتروني مرنة وقادرة على التعامل مع متطلبات التوجيه المعقدة.