
في هذا الجزء، سنتناول كيف يمكن تكييف الأداة لإدخال تدفقات البريد إلى المنصات المحلية مثل PowerMTA وMomentum.
في الجزء 1، قمنا بجولة سريعة في S/MIME، ونظرنا في توقيع وتشفير تدفقات الرسائل عبر مجموعة من عملاء البريد الإلكتروني. أخذنا الجزء 2 من خلال أداة سطر أوامر بسيطة لتوقيع وتشفير الرسائل الإلكترونية، ثم إرسالها عبر SparkPost.
في هذا الجزء، سننظر في كيفية تكييف الأداة لحقن تدفقات البريد في الأنظمة الأساسية الداخلية مثل Port25 PowerMTA وMomentum.
حسنًا – لنبدأ!
1. البدء
تثبيت الأداة والحصول على مفاتيحك وما إلى ذلك هو بالضبط كما كان من قبل. عندما تستخدم نظام بريد إلكتروني في الموقع مثل PowerMTA أو Momentum، فإنك تكون بالفعل مسؤولاً عن إعداد مجالات الإرسال، ومفاتيح DKIM وما إلى ذلك. ما نحتاج إلى القيام به الآن هو توفير بعض الوسائل لإدخال رسائل S/MIME المكتملة الشكل إلى خوادمك.
٢. حقن SMTP نحو Port25 PowerMTA
٣. حقن SMTP نحو Momentum
Momentum يدعم وسائل مختلفة لحقن الرسائل، بما في ذلك API و SMTP. SMTP هو الطريقة المستخدمة هنا، نحو مضيف يعمل بالفعل على Momentum. سنترك تكوينه دون تغيير، حيث أنه بالفعل لديه القدرة على قبول الحقنات الواردة من المضيفين المعتمدين الآخرين.
هذا نسخة أصغر من إعداد الإنتاج، حيث تكون العقد "التوليد" وعقد MTA منفصلة، ولكنها مترابطة بشكل وثيق عبر VLAN خاص وموازنات الحمل، تحمل حركة مرور حقن SMTP الداخلية.

تم تثبيت أدوات S/MIME كما كان من قبل، وسنحقن الرسائل إلى عنوان مضيف SMTP (MTA):
تعيين SMTP_HOST=xx.xx.xx.xx # ضع عنوان MTA / VIP الخاص بك هنا
كما كان من قبل، لدينا مفتاح المرسل الخاص (steve@thetucks.com.pem) ومفتاح المستلم العام (steve.tuck@sparkpost.com.crt) موجودان بالفعل على عقدة "التوليد". تتطابق السطور القليلة الأولى من ملف الرسالة مع هذه العناوين.
نرسل الرسالة من عقدة "التوليد" بنفس الأمر بالضبط كما كان من قبل، وتظهر الرسالة في البريد الوارد.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
وكما تتوقع، يتعايش S/MIME بسعادة مع توقيع DKIM الخاص بـMomentum.
4. حقن SMTP باتجاه SparkPost
في الجزء 2 استخدمنا API نقل رسائل SparkPost لحقن الرسائل. بالطبع، من الممكن أيضًا حقن الرسائل في SparkPost باستخدام SMTP. قمنا بتعيين متغيرات البيئة على النحو التالي:
export SMTP_PASSWORD=<<YOUR API KEY HERE>> export SMTP_HOST=smtp.sparkpostmail.com export SMTP_USER=SMTP_Injection export SMTP_PORT=587
إذا كنت تستخدم خدمة SparkPost المستضافة في الاتحاد الأوروبي فعليك تعيين SMTP_HOST كـ smtp.eu.sparkpostmail.com.
(انظر هنا لمزيد من الخيارات - على سبيل المثال يمكنك الحقن على منفذ 2525 بدلاً من 587.)
يظهر الإخراج أدناه استخدام STARTTLS مع اسم المستخدم وكلمة المرور.
./sparkpostSMIME.py tests/fancy-HTML-to-smt.eml --sign --encrypt --send_smtp
سترى:
فتح اتصال SMTP (STARTTLS) مع smtp.sparkpostmail.com، المنفذ 587، المستخدم="SMTP_Injection"، كلمة المرور="****************************************" إرسال tests/fancy-HTML-to-smt.eml من: Steve <steve@thetucks.com> إلى: SteveT <steve.tuck@sparkpost.com> حسناً - في 0.057 ثانية
تتم طباعة كلمة المرور بعلامات *** بديلة، حتى لا تتعرض خصوصية مفتاحك للخطر إذا كان هناك شخص ينظر من فوق كتفك.
تأمين بيانات اعتمادك
يرجى ملاحظة أن متغيرات البيئة يمكن إعدادها في ملف سكريبت شيل أو ما شابه، لحفظ إعادة الكتابة. إذا فعلت ذلك، يرجى أن تهتم بكلمات المرور/مفاتيح API الخاصة بك من خلال تقييد الوصول إلى هذا الملف لنفسك فقط. على سبيل المثال، إذا كان اسم ملف إعداد بيانات اعتمادك هو my_envs.sh، ثم قم بتشغيل:
chmod 0700 my_envs.sh
تحذيرات متعلقة بـ SMTP التي قد تراها
حقن SMTP في SparkPost صارم جدًا، كما تتوقع من خدمة عامة. إذا لم تقم بتعيين رقم منفذ SMTP، سترى تحذير:
{'bob.lumreeker@gmail.com': (550, b'5.7.1 relaying denied')}
إذا لم تقم بتعيين اسم مستخدم SMTP أو لم تقم بتعيين كلمة المرور، سترى:
(530, b'5.7.1 Authorization required. Ref. https://developers.sparkpost.com/api/index#header-smtp-relay-endpoints', 'steve@thetucks.com')
يتم الإبلاغ عن رسائل الخطأ هذه كما هي من مكتبة Python SMTP، وبالتالي التنسيق.
أيّهما أسرع – SMTP أم API؟
بصراحة، من غير المحتمل أن يكون S/MIME استخدام ذو حجم كبير، ولكن كان امتلاك نفس الأداة بخيارين للإخراج هو فقط بمثابة دعوة لنا لبدء السباق!
ملف اختبار البريد الإلكتروني "Avocado" المستخدم هنا حوالي 19 كيلوبايت. تكرار الاختبارات 10 مرات عبر حلقة باش أظهر أن الأوقات المتوسطة كانت مشابهة لـ SMTP وAPI، حوالي 60 مللي ثانية لكل رسالة، وهو سريع جداً. في هذه الحالة، قمنا بالحقن من مثيل EC2 متوسط في نفس منطقة الاستضافة مثل SparkPost.com، وهو وسيلة جيدة للحفاظ على زمن الرحلات الشبكية منخفضاً.
تكرار ذلك باستخدام ملف اختبار أكبر (577 كيلوبايت)، أخذ API تقريباً 200 مللي ثانية، بينما أخذ SMTP 280 مللي ثانية لكل رسالة – وما زال هذا مثيراً للإعجاب لحجم ملف أكبر بـ 30 مرة. بالطبع، قد تختلف نتائجك حسب الموقع، ازدحام الإنترنت، إلخ، ولكن من غير المحتمل أن تكون الأداء مشكلة.
إذا كنت تحتاج حقاً إلى أقصى أداء، فسيكون نقطة البداية الجيدة هي إطلاق عدد محدد من عمليات/ جلسات الحقن المتزامنة وفقاً لتوصيات أفضل ممارسات الإرسال - على سبيل المثال من مهمة إشرافية.