
لنلقي نظرة على تفاصيل إعداد PowerMTA لـ SparkPost Signals.
لنبدأ في تفاصيل إعداد PowerMTA لـ SparkPost Signals. سوف تحتاج إلى:
مضيف لتشغيل أحدث إصدار من PowerMTA عليه، سواءً جديد أو جهاز قائم
حساب SparkPost مع إذن مفتاح API لفعالية “الأحداث الواردة: كتابة” كما هو موضح هنا
سنقوم بتكوين PowerMTA لإرسال الأحداث إلى حسابك في SparkPost، ثم سوف تتمكن من استخدام ما يلي:
أولاً، قم بتثبيت (أو ترقية) إلى PowerMTA 5.0 r4 أو أحدث، باتباع تعليمات التثبيت المعتادة للإصدار v5.0 والتي تعد بسيطة جداً. ثم سنعمل من خلال الخطوات التالية:
تهيئة موصل PowerMTA إلى SparkPost Signals
إعداد تتبع التفاعل مع نطاق تتبع مخصص
اختيار تدفقات حركة مرور PowerMTA للإبلاغ إلى Signals
اختبار ما إذا كانت الأحداث لديك تصل إلى Signals
مراجعة كيفية استخدام أسماء ذات معنى تظهر بشكل جيد في التقارير.
سنغطي أيضاً الجوانب الأخرى المحددة لإعداد PowerPMTA المستخدمة في عرضنا التوضيحي لـ Signals:
أحداث FBL (شكاوى الرسائل المزعجة) والارتدادات عن بعد (خارج النطاق)
تهيئة الحقن، بما في ذلك DKIM
تهيئة FBL وOOB
إعداد VirtualMTA والتسمية (وكيف يظهر هذا في تقارير SparkPost Signals لديك)
أخيراً، هناك "ميزة إضافية" تحتوي على كود لضمان توافق أسماء الحملات مع اتفاقيات اسم PowerMTA X-Job.
قم بتكوين موصل PowerMTA
يتم وصف تكوين الإشارات في دليل المستخدم 5.0 القسم 10.1. هنا سنبدأ بحالة الاستخدام #2، والتي تمكّن إشارات لكل حركة مرور من هذا المضيف لـ PowerMTA، وتُمكّن متابعة الارتباطات SparkPost.
# # SparkPost Signals # <signals> api-key ##مفتاح API الخاص بي هنا## upload-url https://api.sparkpost.com/api/v1/ingest/events log-verbose true min-free-space 1G engagement-tracking sparkpost # هذا يقوم بتشغيل تتبع الفتح والنقر في PowerMTA customer-id 123 # رقم حسابك SparkPost هنا </signals> enable-signals true
إليك ما يفعله كل سمة:
api-key
هذا فريد لحسابك على SparkPost، وهو القيمة التي حصلت عليها من SparkPost سابقًا.
upload-url
يجب أن يطابق هذا عنوان خدمة API لـ SparkPost، سواء كانت في الولايات المتحدة أو الاتحاد الأوروبي. لمزيد من المعلومات انظر هنا. القيم المعتادة هي:
SparkPost (الولايات المتحدة): https://api.sparkpost.com/api/v1/ingest/events
SparkPost الاتحاد الأوروبي: https://api.eu.sparkpost.com/api/v1/ingest/events
log-verbose
هذا التوجيه اختياري وعند تمكينه، يوفر مزيدًا من المعلومات في ملف pmta.log، والذي يمكن أن يكون مفيدًا أثناء الإعداد لتأكيد أن كل شيء يعمل بشكل صحيح. كل دقيقة، حتى عندما لا يوجد مرور، سترى:
2019-07-26 11:47:57 إشارات: لم يتم اكتشاف أي ملفات
مع المرور، سترى شيئًا مثل:
2019-07-26 11:50:57 إشارات: تم اكتشاف sp1-0000000000003FBD.json 2019-07-26 11:50:57 إشارات: تم نقل sp1-0000000000003FBD.json بنجاح. 2019-07-26 11:50:57 إشارات: تم اكتشاف ملف واحد، تم نقل ملف واحد بنجاح
min-free-space
هذا يوجه PowerMTA إلى مساحة القرص الحدية التي يجب عندها البدء في حذف أقدم ملفات حدث JSON لـ SparkPost لتوفير مساحة للملفات الجديدة عند انخفاض مساحة القرص.
enable-signals
هذا يدعو PowerMTA للرفع إلى إشارات، في هذه الحالة بشكل عام لجميع الحركات (المزيد من المعلومات هنا، للإصدار 5.0). يمكنك أن تكون أكثر انتقائية بشأن ما هي تدفقات الحركة التي تود رفعها إذا كنت ترغب في ذلك.
يمكنك أيضًا تحديد حركة معينة لـ PowerMTA لتُسجل كجزء من حساب فرعي لـ SparkPost – هذه طريقة أخرى لتمييز تدفق حركة معين عن الآخر.
engagement-tracking، customer-id
تتبع التفاعل في PowerMTA يبدأ افتراضيًا عند مجال تتبع خدمة SparkPost المستضافة في الولايات المتحدة. تحدد معرف العميل الرقمي الخاص بك في SparkPost؛ إليك تعليمات للعثور عليه.
tracking-domain
لحسابات الاتحاد الأوروبي لـ SparkPost، أضف السطر التالي:
tracking-domain pmta.eu.spgo.io # هذه هي النهاية لـ SparkPost الاتحاد الأوروبي
المجال التتبعي المخصص
إذا كنت تفضل استخدام نطاق التتبع الخاص بك (هذا أفضل من حيث التسليم)، افعل التالي:
قم بإنشاء نطاق تتبعي مع مزود DNS الخاص بك بإنشاء سجل CNAME. سيكون هذا عادة نطاق فرعي من نطاق المستوى الأعلى الخاص بك، على سبيل المثال track.mycompany.com .
track.mycompany.com CNAME pmta.spgo.io # إذا كان لديك حساب SparkPost US track.mycompany.com CNAME pmta.eu.spgo.io # إذا كان لديك حساب SparkPost الاتحاد الأوروبي
يمكنك أيضًا استخدام نطاقات تتبع HTTPS، على الرغم من أن هذا أكثر تعقيدًا (انظر خطوات تكوين SparkPost هنا).
سجل نطاق تتبع في حسابك على SparkPost، وقم بالتحقق منه. انتظر بضع دقائق قبل محاولة ذلك، للسماح لديناميكيات DNS الخاصة بك بالانتشار عبر الإنترنت، اعتمادًا على مزود DNS الخاص بك.
قم بتكوين PowerMTA لاستخدام ذلك النطاق بدلاً من الافتراضي، مع
tracking-domain yourdomain.com # ضع نطاقك هنا
يمكنك التحقق من أن رسائلك الإلكترونية المرسلة تحتوي على "بيكسلات فتح" مضافة والروابط مغلفة، من خلال النظر إلى داخل البريد (في Gmail، استخدم القائمة أعلى اليمين واختر "عرض الأصل").

ستلاحظ فتح البيكسلات في بداية ونهاية HTML في البريد الإلكتروني. يتم تغيير كل رابط HTML أيضًا ليحتوي على REF مُشيرا إلى نطاق التتبع.

هذا كل ما تحتاج إليه لجعل SparkPost Signals تعمل مع التتبع المدمج في PowerMTA.
منع تعقب روابط معينة في بريدك الإلكتروني
يمكنك منع PowerMTA من تعقب روابط معينة، من خلال ضبط سمة مخصصة data-msys-clicktrack إلى "0":
<a href="#" data-msys-clicktrack="0">مثال</a>
لن يقوم PowerMTA بتغليف الرابط. كما سيقوم بإزالة تلك السمة قبل إرسال الرسالة إلى المستلم.
اختر حركة مرور PowerMTA التي تريد الإبلاغ عنها إلى Signals
اختبار وصول الأحداث الخاصة بك إلى Signals
إليك نظرة على SparkPost Signals، متصلة بـPowerMTA. يمكنك أن ترى أن درجة الصحة متغيرة.

أسماء الحملة متاحة كأوجه الإبلاغ، جنبًا إلى جنب مع Subaccount، IP Pool، Mailbox Provider، وSending Domain.
إلى جانب النظر إلى سجلات PowerMTA، يمكنك التحقق من أن بيانات الأحداث تصل إلى SparkPost من خلال النظر إلى شاشة تكامل Signals.

في شاشة البحث عن الأحداث الخاصة بـSparkPost، يجب أن ترى الأحداث تظهر في غضون بضع دقائق. ستشمل هذه الأحداث Injection وDelivery، بالإضافة إلى Bounce، وربما Out-of-Band Bounce وSpam Complaint، إذا كنت قد قمت بالفعل بتكوين PowerMTA للتعامل معها نيابةً عنك.
إذا كان تعقب التفاعل ممكَّنًا، فسترى أيضًا أحداث open وinitial_open وclick.
استخدام أسماء ذات معنى تبرز بشكل جيد في التقارير
تعد إعداد أسماء تجمعات PowerMTA VirtualMTA وأسماء الوظائف لتكون ذات معنى وقابلة للقراءة من قبل البشر أمرًا جيدًا. تظهر هذه الأسماء مباشرةً في جوانب SparkPost Signals وتقرير الملخص.
كما ذكرنا سابقًا، لا تحتاج إلى إنشاء هذه التجمعات في حسابك على SparkPost. يلتقط SparkPost هذه الأسماء من تكوين PowerMTA الخاص بك.
إليك كيف تترجم مصطلحات تكوين PowerMTA إلى مصطلحات SparkPost.
مصطلحات PowerMTA مصطلحات SparkPost/ تقارير الإشاراتالنطاق المستلم
(جزء النطاق من حقل "rcpt" في ملف المحاسبة).النطاق المستلمجزء النطاق في رأس "Sender" أو "From" في الرسالة المنقولة بواسطة PowerMTA.
(جزء النطاق في "orig" في ملف المحاسبة).النطاق المرسلVirtualMTA (الاسم)— تجمع VirtualMTA (الاسم)
("vmtaPool" في ملف المحاسبة) تجمع IP (الاسم)المضيف المصدر smtp a.b.c.d
("dlvSourceIp" في ملف المحاسبة)IP المرسل a.b.c.dالوظيفة (الاسم)
("jobId" في ملف المحاسبة)معرف الحملة (الاسم)—النموذج (الاسم)"Subaccount" ليس مفهومًا أصليًا في PowerMTA.
ومع ذلك، يمكن لـ PowerMTA وسم virtualMTAs، تجمعات virtual MTA، أو نطاقات Sender-or-From بمعرف حساب فرعي لأغراض إعداد تقارير SparkPost.
معرف الحساب الفرعي (الرقم)حدث FBL (الحدث)شكوى البريد العشوائي (الحدث)ارتداد بعيد (الحدث)ارتداد خارج النطاق (الحدث)
تمكين إعداد عنوان مضيف مصدر smtp واحد على الأقل يمكن أيضًا من تحديد عنوان IP المرسل بشكل صحيح في SparkPost لكي يظهر في أحداث الحقن والتوصيل، وكذلك في عرض تقرير الملخص.
يتم تعيين أسماء الوظائف في PowerMTA عبر رأس في الرسالة المحقونة. بالإضافة إلى تمكين التحكم الفردي بالوظيفة (إيقاف مؤقت / استئناف إلخ) وهو مفيد بحد ذاته، يقوم PowerMTA بتمرير الأسماء إلى تقارير SparkPost Signals كـ "معرف الحملة". انظر دليل المستخدم الإصدار 5.0 القسم 12.8 "تتبع حملة في PowerMTA باستخدام JobID".
هناك بعض الأمور التي ينبغي الحذر منها بخصوص تسمية الوظائف. في حين أن SparkPost (بتنسيق JSON، وتنسيق JSON الهروب) يسمح بحروف مثل <SPACE> في أسماء الحملات، العناوين البريدية أكثر تقييدًا. الحروف الصالحة المسموح بها في رأس X-Job هي:
A-Za-z0-9!#$%&'()*+,-./:;<=>?@[\]^_{|}~
بمعنى آخر، تشمل الحروف غير المسموح بها <SPACE>، علامات الاقتباس المزدوجة " والهمزة `. إذا كنت معتادًا على العمل مع أسماء X-Job، فلن يكون هذا مفاجئًا، وستعمل أسماء معرفات الحملات الخاصة بك ببساطة في تقارير SparkPost. إذا كنت مثلي، تعلمت SparkPost أولاً، قد تحتاج إلى أداة لضمان أن تكون قيم X-Job الخاصة بك آمنة؛ انظر الميزة الإضافية في نهاية هذا المقال.
فعاليات FBL (شكاوى السبام) وارتدادات عن بُعد (خارج النطاق)
يمكن لـ PowerMTA استقبال ومعالجة أحداث FBL (المعروفة في SparkPost بأنها أحداث شكاوى البريد العشوائي) والارتدادات البعيدة (المعروفة في SparkPost بأنها ارتدادات خارج النطاق، لأن الرد يعود بعد فترة من الوقت، وليس أثناء محادثة SMTP).
هناك مقالات في منتدى دعم Port25 حول كيفية إعداد معالج الارتداد ومعالج FBL. إذا كنت مستخدمًا فعليًا لـ PowerMTA، فمن المحتمل أنك تمتلك هذه بالفعل.
هنا هو التكوين الذي قمت بإنشائه للعرض التوضيحي، بناءً على هذه المقالات وموجه نحو استضافة PowerMTA في Amazon EC2.
إذا كنت على دراية بتكوين PowerMTA في هذا المجال، يمكنك تخطي هذا الجزء حتى الخط الأفقي التالي.
تكوين الحقن
سنستخدم المنفذ 587 للرسائل المدمجة، والتي ستأتي عبر الإنترنت العام من مضيف آخر. نحتاج إلى منع الجهات الخبيثة من اكتشاف وإساءة استخدام هذه الخدمة، لذا نطبق مصادقة اسم المستخدم / كلمة المرور وTLS الاختيارية، على غرار نقاط حقن SparkPost SMTP.
نريد أن نكون قادرين على إرسال الرسائل من مصادر تم التحقق منها بشكل صحيح إلى أي وجهة. كما نريد وجود مستمع منفصل على المنفذ 25 للـFBL واستجابات الارتداد البعيدة التي لا تتطلب مصادقة.
# # عنوان(ات) IP والمنفذ(ات) التي يجب الاستماع إليها للاتصالات الواردة لـSMTP # smtp-listener 0.0.0.0:587 smtp-listener 0.0.0.0:25
في الإعلان التالي <source>، نستخدم مصادقة اسم المستخدم / كلمة المرور وTLS الاختيارية للدفاع ضد حقن الرسائل الغير مصرح بها. نحدد أيضًا معدلات الحدود على الاتصالات التي تقوم بمحاولات كلمة مرور فاشلة.
قد يختلف إعدادك؛ على سبيل المثال، إذا كان لديك شبكة خاصة بين الحاقن وPowerMTA، فلن تحتاج إلى مصادقة كلمة المرور.
# قاعدة مصدر واحدة لجميع الحقن، داخلي أو خارجي. فرض المصادقة، باستثناء الارتجاع وFBLs # <source 0/0> log-connections false log-commands false # تنبيه: تفصيلية! فقط لأغراض التطوير log-data false # تنبيه: أكثر تفصيلًا! smtp-service true # السماح بخدمة SMTP smtp-max-auth-failure-rate 1/min السماح بمصادقة نصية عادية غير مشفرة false السماح ببدء TLS true rewrite-list mfrom </source> <source {auth}> always-allow-relaying yes # فقط إذا نجحت المصادقة default-virtual-mta default process-x-job true </source>
ينطبق الإعلان <source {auth}> (انظر هنا. version 5.0) بمجرد مرور المصادقة. هنا، يسمح بإعادة التوجيه، يضبط مجموعة MTA الافتراضية للاستخدام، ويضيف رأس X-Job (الذي سيتم الإبلاغ عنه بواسطة SparkPost Signals كـ campaign_id).
يحدد قائمة إعادة الكتابة الرسائل المدمجة لاستخدام نطاق MAIL FROM محدد (المعروف أيضًا بنطاق الارتداد أو Return-Path:).
# # إعادة كتابة عنوان MAIL FROM ليطابق نطاق الارتداد # <rewrite-list mfrom> mail-from *@pmta.signalsdemo.trymsys.net *@bounces.pmta.signalsdemo.trymsys.net </rewrite-list>
ثم نقوم بإعداد تكوين TLS واسم المستخدم / كلمة المرور لـSMTP، حسب التوصيات الحالية.
# # تأمين الخدمة الواردة باسم المستخدم، كلمة المرور وTLS. SMT 2020-06-15 # smtp-server-tls-certificate /etc/pmta/pmtasignalsdemo.pem smtp-server-tls-allow-tlsv1 false smtp-server-tls-allow-tlsv1.1 false smtp-server-tls-allow-tlsv1.2 true smtp-server-tls-allow-tlsv1.3 true # # مستخدمو SMTP (مصادق عليهم عبر SMTP AUTH) # <smtp-user SMTP_Injection> password ##PUT YOUR PASSWORD HERE## authentication-method password </smtp-user>
يمكننا التحقق من أن (TLS v1.0 غير الآمن، متهالك) لا يتم قبوله باستخدام أداة اختبار SMTP المفضلة لدي، swaks.
swaks --server pmta.signalsdemo.trymsys.net --port 587 --to test@trymsys.net --from any@sparkpost.com --tls --tls-protocol tlsv1
نرى:
*** فشل بدء TLS (connect(): error:00000000:lib(0):func(0):reason(0)) *** محاولة STARTTLS لكن فشلت
وكذلك بالنسبة لـ –tls-protocol tlsv1_1.
لنعمل أيضًا على تطبيق توقيع DKIM على رسائلنا الصادرة، لأنه يعتبر ممارسات جيدة (اتبعت هذه التعليمات لإعداد المفتاح).
# # DKIM # domain-key mypmta, pmta.signalsdemo.trymsys.net, /etc/pmta/mypmta.pmta.signalsdemo.trymsys.net.pem
إعدادات FBL و OOB
الآن .. أخيرًا .. نعلن عن المجالات المحددة المفتوحة لاستجابات bouncing عن بُعد واستجابات FBL. لا نريد إعادة توجيه تلك الرسائل إلى أي مكان (لمنع هجمات Backscatter), فقط معالجة هذه الاستجابات داخليًا.
# # تفعيل معالجة bouncing وFBL على نطاقات محددة # نطاق إعادة التوجيه pmta.signalsdemo.trymsys.net نطاق إعادة التوجيه bounces.pmta.signalsdemo.trymsys.net نطاق إعادة التوجيه fbl.pmta.signalsdemo.trymsys.net <معالج الارتداد> تسليم البريد غير المتطابق لا تسليم البريد المطابق لا <قائمة العناوين> النطاق pmta.signalsdemo.trymsys.net النطاق bounces.pmta.signalsdemo.trymsys.net </قائمة العناوين> </معالج الارتداد> <معالج حلقة التغذية المرتجعة> تسليم البريد غير المتطابق لا تسليم البريد المطابق لا <قائمة العناوين> النطاق fbl.pmta.signalsdemo.trymsys.net </قائمة العناوين> </معالج حلقة التغذية المرتجعة>
يمكنك أن ترى أنني قمت بإعداد نطاقين للارتداد، بينما كنت ألعب باستخدام / عدم استخدام قاعدة إنشاء mfrom.
عادةً ما يتم تسجيل نطاق FBL مع خدمات خارجية مثل Microsoft SNDS; انظر هذه المقالة لمزيد من المعلومات. بالنسبة لهذا العرض التوضيحي، ستأتي FBLs من Bouncy Sink, لذلك لا داعي للتسجيل.
اختبار مستمع SMTP
من المهم اختبار أن مستمع SMTP الخاص بك يتطلب تفويضًا لأي وجهات عامة، ورفض أي رسائل ليست موجهة خصيصًا إلى مجالات FBL و remote-bounce.
swaks --server pmta.signalsdemo.trymsys.net --port 25 --to test@strange.pmta.signalsdemo.trymsys.net --from any@sparkpost.com
الاستجابة، كما هو متوقع، تُظهر أن إعادة التوجيه مرفوضة:
550 5.7.1 مرفوض إعادة التوجيه للمستلم في "RCPT TO:<test@strange.pmta.signalsdemo.trymsys.net>
(نهاية وصف إعداد العرض التوضيحي).
إعداد وتسمية VirtualMTA
PowerMTA VirtualMTAs (وVirtualMTA pools) هي ميزات قوية لإدارة تدفقات الرسائل، وتعمل ميزات التقارير PowerMTA / SparkPost Signals بأفضل شكل مع تشغيل هذه المزايا.
# # توجيه كل حركة المرور الصادرة عبر هذا المسبار الافتراضي / المجموعة. # تحديد عنوان IP للتوصيل هنا، بحيث تتمكن إشارات SparkPost من استيعاب أحداث الحقن (المعروفة أيضًا باسم "الاستقبال") # ستحمل السمة الصحيحة sending_IP <virtual-mta mta1> smtp-source-host 172.31.25.101 pmta.signalsdemo.trymsys.net </virtual-mta> <virtual-mta-pool default> virtual-mta mta1 <domain *> max-smtp-out 20 # الحد الأقصى للاتصالات *لكل مجال* bounce-after 4d12h # 4 أيام، 12 ساعة retry-after 10m # 10 دقائق dkim-sign yes </domain> </virtual-mta-pool>
يتم الإبلاغ عن إعداد virtual-mta-pool في SparkPost كـ "IP Pool"، وهو متاح كخاصية تقرير SparkPost Signals (قائمة منسدلة تحت الرسوم البيانية).

يعرض تقرير الملخص أيضًا IP Pool كخاصية تقرير "Group By".

كما تمت الإشارة في هذا المقال من قبل، فإن إعداد عنوان smtp-source-host واحد على الأقل يمكّن SparkPost من تحديد عنوان IP المرسل بشكل صحيح، بحيث يظهر في أحداث الحقن والتوصيل، وعلى تقرير الملخص:

هذا كل ما تحتاج إليه للحصول على تكامل أساسي يعمل بين PowerMTA وSparkPost Signals. يمكنك العثور على مثال ملف التكوين الكامل هنا.
قبل أن تذهب، إليك الميزة الإضافية التي ذكرتها.
ميزة إضافية: التحقق من اسم X-Job/التصفية
لضمان أن أي سلسلة أحرف آمنة للاستخدام كاسم PowerMTA X-Job، هنا وظيفة بايثون بسيطة لتعيين أي أحرف غير آمنة إلى شرطة سفلية "_"
import re def pmtaSafeJobID(s): """ :param s: str :return: str تعيين سلسلة معرف الحملة العشوائية إلى الأحرف المسموح بها لرأس PMTA X-Job. راجع https://download.port25.com/files/UsersGuide-5.0.html#tracking-a-campaign-in-powermta-with-a-jobid عدم السماح بشكل خاص بـ <sp> " ` ولكن السماح بمعظم الأحرف الأخرى. """ # لاحظ أنه يجب هروب الأحرف ' - [ ] ومضاعفة هروب \ - راجع https://docs.python.org/3/library/re.html disallowedChars = '[^A-Za-z0-9!#$%&\'()*+,\-./:;<=>?@\[\\\\\]^_{|}~]' return re.sub(disallowedChars, '_', s)
هذا يستخدم تعبيرات بايثون العادية بطريقة محددة. إنه يعلن عن مجموعة الأحرف غير المسموح بها باستخدام عامل "تكامل المجموعة" ^ بدلاً من إدراج جميع الأحرف المسموح بها. هذا يعني أننا نلتقط (ونجعل آمنًا) الأحرف التي تتجاوز مجموعة 7 بت المعتادة. يمكننا توضيح ذلك باستخدام هذا الجزء التجريبي:
s='' for i in range(32, 256): s += chr(i) print(pmtaSafeJobID(s))
إعطاء
_!_#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^__abcdefghijkl mnopqrstuvwxyz{|}~___________________________________________________________ ______________________________________________________________________
يمكنك أن ترى أن <SPACE>، مزدوج الاقتباس “، وعلامة العكس `، وكذلك جميع الأحرف بعد ~ يتم تعيينها إلى شرطة سفلية.