نشر الإشارات للأنظمة المحلية: تكامل PowerMTA

Bird

30‏/08‏/2019

البريد الإلكتروني

1 min read

نشر الإشارات للأنظمة المحلية: تكامل PowerMTA

Bird

30‏/08‏/2019

البريد الإلكتروني

1 min read

نشر الإشارات للأنظمة المحلية: تكامل PowerMTA

لنلقي نظرة على تفاصيل إعداد 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

تم وصف تكوين Signals في دليل المستخدم 5.0 القسم 10.1. هنا سنبدأ مع "حالة الاستخدام رقم 2"، والتي تُمكّن Signals لجميع الحركة من مضيف 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 EU:    https://api.eu.sparkpost.com/api/v1/ingest/events

log-verbose

هذا التوجيه اختياري وعندما يتم تمكينه، يعرض المزيد من المعلومات في ملف pmta.log، وهو ما يمكن أن يكون مفيدًا أثناء إعداد التشغيل للتأكد من أن كل شيء يعمل بشكل صحيح. ستشاهد كل دقيقة، حتى عندما لا توجد حركة، ما يلي:

2019-07-26 11:47:57 Signals: تم اكتشاف 0 ملفات

مع الحركة، ستشاهد شيئًا مثل:

2019-07-26 11:50:57 Signals: تم اكتشاف sp1-0000000000003FBD.json 2019-07-26 11:50:57 Signals: تم نقل sp1-0000000000003FBD.json بنجاح. 2019-07-26 11:50:57 Signals: تم اكتشاف 1 ملف، نقل 1 ملف بنجاح

min-free-space

هذا يخبر PowerMTA بعتبة مساحة القرص التي ينبغي عندها البدء في حذف أقدم ملفات حدث JSON لـ SparkPost لفسح المجال لملفات جديدة عندما تنفد مساحة القرص.

enable-signals

هذا يخبر PowerMTA بالتحميل إلى Signals، في هذه الحالة عالميًا لجميع الحركة (مزيد من المعلومات هنا، للإصدار 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 في الولايات المتحدة track.mycompany.com CNAME pmta.eu.spgo.io # إذا كان لديك حساب لـ SparkPost في الاتحاد الأوروبي

يمكنك أيضًا استخدام نطاقات تتبع HTTPS، مع أن هذا أكثر تعقيدًا (انظر خطوات تكوين SparkPost هنا).

  • قم بتسجيل نطاق التتبع في حسابك في SparkPost، وتحقق منه. انتظر بضع دقائق قبل محاولة ذلك، للسماح بتغييرات الـ DNS الخاص بك بالانتشار عبر الإنترنت، اعتمادًا على مزود الـ DNS الخاص بك.

  • قم بتكوين PowerMTA لاستخدام هذا النطاق بدلاً من النطاق الافتراضي، مع

tracking-domain yourdomain.com # ضع نطاقك الخاص هنا

يمكنك التحقق من أن رسائل البريد الإلكتروني المرسلة تحتوي على "بكسلات مفتوحة" مضمنة والروابط ملفوفة، بالنظر إلى داخل البريد (في Gmail، استخدم القائمة في أعلى اليمين واختر "عرض الأصلية") .

Show original option highlighted


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

HTML code highlighted


هذا كل ما تحتاجه لتفعيل Signals لـ SparkPost مع تتبع التفاعل المدمج في PowerMTA.

منع تتبع روابط معينة في بريدك الإلكتروني html

يمكنك منع PowerMTA من تتبع روابط معينة، بتعيين السمة المخصصة data-msys-clicktrack إلى "0" :

<a href="#" data-msys-clicktrack="0">مثال</a>

لن يقوم PowerMTA بلف الرابط. كما سيزيل تلك السمة قبل إرسال الرسالة إلى مستلمك.

اختر حركة مرور PowerMTA التي تريد الإبلاغ عنها إلى Signals

يمكنك اختيار تشغيل الإشارات:

  • عالميًا (هذا ما استخدمناه في المثال أعلاه)

  • لبعض الـMTAs الافتراضية وليس للآخرين

  • لبعض مجموعات الـMTA الافتراضية وليس للآخرين

  • لعناوين "المرسل" أو "من" المحددة التي يتم تحويلها بواسطة PowerMTA، بالتزامن مع اختيارات الـMTA الافتراضية / مجموعة الـMTA الافتراضية

هذا التكوين قوي جدًا ويتم توضيحه من خلال سلسلة من أمثلة حالات الاستخدام (v5.0) في دليل المستخدم.

يمكنك اختيار تشغيل الإشارات:

  • عالميًا (هذا ما استخدمناه في المثال أعلاه)

  • لبعض الـMTAs الافتراضية وليس للآخرين

  • لبعض مجموعات الـMTA الافتراضية وليس للآخرين

  • لعناوين "المرسل" أو "من" المحددة التي يتم تحويلها بواسطة PowerMTA، بالتزامن مع اختيارات الـMTA الافتراضية / مجموعة الـMTA الافتراضية

هذا التكوين قوي جدًا ويتم توضيحه من خلال سلسلة من أمثلة حالات الاستخدام (v5.0) في دليل المستخدم.

يمكنك اختيار تشغيل الإشارات:

  • عالميًا (هذا ما استخدمناه في المثال أعلاه)

  • لبعض الـMTAs الافتراضية وليس للآخرين

  • لبعض مجموعات الـMTA الافتراضية وليس للآخرين

  • لعناوين "المرسل" أو "من" المحددة التي يتم تحويلها بواسطة PowerMTA، بالتزامن مع اختيارات الـMTA الافتراضية / مجموعة الـMTA الافتراضية

هذا التكوين قوي جدًا ويتم توضيحه من خلال سلسلة من أمثلة حالات الاستخدام (v5.0) في دليل المستخدم.

اختبار وصول الأحداث الخاصة بك إلى Signals

إليك نظرة على SparkPost Signals، المتصل بـ PowerMTA. يمكنك أن ترى أن درجة الصحة تتغير.

Health score dashboard


أسماء الحملات متاحة كأوجه تقارير، جنبًا إلى جنب مع الحساب الفرعي، تجمع IP، مقدم خدمة البريد، واسم النطاق المرسل.

بالإضافة إلى النظر في سجلات PowerMTA، يمكنك التحقق من وصول بيانات الأحداث إلى SparkPost من خلال النظر في شاشة تكامل الإشارات.

Signals integration screen

في شاشة بحث الأحداث في SparkPost الخاصة بك، يجب أن ترى الأحداث تظهر في غضون بضع دقائق. ستتضمن هذهّ الأحداث الحقن والتسليم، وأيضًا ارتدادات، وربما ارتدادات خارج النطاق وشكاوى الرسائل غير المرغوب فيها، إذا كنت قد قمت بتكوين PowerMTA للتعامل معها.
إذا كان تتبع التفاعل مفعلاً، سترى أيضًا فتح، فتح أولي، ونقر الأحداث.

استخدام أسماء ذات معنى تبرز بشكل جيد في التقارير

إعداد أسماء تجمعات PowerMTA VirtualMTA وأسماء المهام لتكون ذات معنى وقابلة للقراءة البشرية يستحق الجهد. تظهر هذه الأسماء مباشرة في Facets الإشارات في SparkPost والتقرير الملخص.

كما ذُكر سابقًا، لا تحتاج إلى إنشاء هذه التجمعات في حسابك في SparkPost. تلتقط SparkPost هذه التجمعات من تكوين PowerMTA الخاص بك.

إليك كيف تترجم مصطلحات تكوين PowerMTA إلى مصطلحات SparkPost.

مصطلح PowerMTAمصطلح تقارير / إشارات SparkPostنطاق المستلم
(جزء النطاق في حقل “rcpt” في ملف المحاسبة).نطاق المستلمجزء النطاق من رأس “المرسل” أو “From” في الرسالة التي يتم تمريرها بواسطة PowerMTA.
(جزء النطاق من “orig” في ملف المحاسبة).نطاق الإرسالVirtualMTA (name)—VirtualMTA Pool (name)
(“vmtaPool” في ملف المحاسبة)اسم تجمع العناوين البريدية IP smtp-source-host a.b.c.d
(“dlvSourceIp” في ملف المحاسبة)إرسال IP a.b.c.dاسم المهمة (name)
(“jobId” في ملف المحاسبة)معرف الحملة (name)—Template (name)“Subaccount” ليس مفهومًا أصليًا لـ PowerMTA.

ومع ذلك، يمكن لـ PowerMTA وضع علامة على virtualMTAs، تجمعات virtual MTA، أو مجالات المرسل أو المجال From بمعرف حساب فرعي لأغراض SparkPost.

معرف الحساب الفرعي (الرقم)FBL (الحدث)شكوى بريد مزعج (الحدث)ارتداد عن بُعد (الحدث)ارتداد خارج النطاق (الحدث)

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

تُحدد أسماء المهام في PowerMTA عبر رأس في الرسالة المحقونة. بالإضافة إلى تمكين التحكم الفردي في المهام (إيقاف مؤقت / استئناف وما إلى ذلك) وهو مفيد في حد ذاته، فإن PowerMTA ينقل الأسماء إلى تقارير إشارات SparkPost على شكل “معرف الحملة”. راجع دليل المستخدم القسم 12.8 من إصدار 5.0 “تتبع حملة في 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 allow-unencrypted-plain-auth false allow-starttls true rewrite-list mfrom </source> <source {auth}> always-allow-relaying yes # فقط إذا نجحت المصادقة default-virtual-mta default process-x-job true </source>

ينطبق تصريح <source {auth}>  (انظر هنا. v5.0) بمجرد مرور المصادقة. هنا، يسمح بالتوجيه إلى الأمام، ويضع مجموعة MTA الافتراضية للاستخدام، ويضيف عنوان X-Job (الذي سيتم الإبلاغ عنه بواسطة SparkPost Signals كـ campaign_id).

تقوم قائمة إعادة الكتابة بتعيين الرسائل المحقونة لاستخدام مجال MAIL FROM محدد (أو مجال الارتداد أو مسار العودة:).

# # إعادة كتابة عنوان 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 ## وضع كلمة المرور الخاصة بك هنا ## 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

الآن .. أخيرًا .. نعلن عن المجالات المحددة التي تكون مفتوحة لاستقبال الردود البعيدة و FBL. نحن لا نريد إعادة توجيهها إلى أي مكان (لمنع هجمات الباكسكاتر)، فقط نعمل على معالجة تلك الردود داخليًا.

# # تمكين معالجة الارتدادات و FBL على مجالات محددة # relay-domain pmta.signalsdemo.trymsys.net relay-domain bounces.pmta.signalsdemo.trymsys.net relay-domain fbl.pmta.signalsdemo.trymsys.net <bounce-processor> تسليم البريد الإلكتروني غير المطابق لا تسليم البريد الإلكتروني المطابق لا <address-list> domain pmta.signalsdemo.trymsys.net domain bounces.pmta.signalsdemo.trymsys.net </address-list> </bounce-processor> <feedback-loop-processor> تسليم البريد الإلكتروني غير المطابق لا تسليم البريد الإلكتروني المطابق لا <address-list> domain fbl.pmta.signalsdemo.trymsys.net </address-list> </feedback-loop-processor>

يمكنك أن ترى أنني قمت بتعيين مجالين للارتداد، حيث كنت أجرب استخدام / عدم استخدام قاعدة إعادة كتابة 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 (and VirtualMTA pools) قوية لإدارة تدفقات الرسائل، وميزات الإبلاغ PowerMTA / SparkPost Signals تعمل بشكل أفضل مع هذه الحالة النشطة.

# # وجه كل حركة المرور الصادرة عبر هذا الافتراضي mta / pool. # أعلن عن عنوان 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 (القائمة المنسدلة تحت الرسوم البيانية).

Health score dashboard


كما يظهر تقرير الملخص أيضًا IP Pool كجانب إبلاغ "Group By".

Summary report dashboard


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

Summary report with the group by filter set to "Sending 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>، مزدوج الاقتباس “، وعلامة العكس `، وكذلك جميع الأحرف بعد ~ يتم تعيينها إلى شرطة سفلية.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

دعنا نوصلك بخبير من Bird.
رؤية القوة الكاملة لـ Bird في 30 دقيقة.

بتقديمك طلبًا، فإنك توافق على أن تقوم Bird بالاتصال بك بشأن منتجاتنا وخدماتنا.

يمكنك إلغاء الاشتراك في أي وقت. انظر بيان الخصوصية الخاص بـ Bird للتفاصيل حول معالجة البيانات.

R

وصول

G

نمو

م

إدارة

A

أتمتة

النشرة الإخبارية

ابقَ على اطلاع مع Bird من خلال التحديثات الأسبوعية إلى بريدك الوارد.