المنتج

حلول

الموارد

شركة

المنتج

حلول

الموارد

شركة

نشر الإشارات للأنظمة المحلية: تكامل 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 في قسم 10.1 في دليل المستخدم 5.0. هنا سنبدأ بـ "حالة الاستخدام #2"، والتي تمكن Signals لجميع المرور من هذا المضيف PowerMTA، وتفعيل تتبع مشاركة SparkPost.

# # SparkPost Signals # <signals> api-key ##my ingest API key here## 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 EU

مجال التتبع المخصص

إذا كنت تفضل استخدام مجال التتبع الخاص بك (هذا أفضل من ناحية الإيصال)، قم بما يلي:

  • إنشاء مجال التتبع مع مزود DNS الخاص بك عن طريق إنشاء سجل CNAME. عادة ما يكون هذا اسم فرعي لمجالك الرئيسي، على سبيل المثال track.mycompany.com .

track.mycompany.com CNAME pmta.spgo.io # إذا كان لديك حساب SparkPost في الولايات المتحدة track.mycompany.com CNAME pmta.eu.spgo.io # إذا كان لديك حساب SparkPost في الاتحاد الأوروبي

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

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

  • تهيئة PowerMTA لاستخدام هذا المجال بدلاً من الافتراضي، ب

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

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

Show original option highlighted


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

HTML code highlighted


هذا كل ما تحتاجه لتشغيل SparkPost Signals مع تتبع المشاركة المدمج في 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 اختياري، مشابه لنقاط حقن SMTP الخاصة بـSparkPost.

نريد أن نكون قادرين على إرسال الرسائل من مصادر مصادق عليها بشكل صحيح إلى أي وجهة. نريد أيضًا مستمعًا منفصلًا على المنفذ 25 للاستجابات المرتدة وأنواع FBL التي لا تتطلب المصادقة.

# # عنوان(عناوين) IP والمنفذ(المنافذ) الذي نستمع عليه للاتصالات الواردة لـ SMTP # smtp-listener 0.0.0.0:587 smtp-listener 0.0.0.0:25

في التصريحات التالية <source> ، نستخدم مصادقة اسم المستخدم/كلمة المرور وTLS اختياري للدفاع ضد حقن الرسائل المارقة. كما نضع حدود السرعة للاتصالات التي تقوم بمحاولات كلمة المرور الفاشلة.

قد يكون إعدادك مختلفًا؛ على سبيل المثال، إذا كان لديك شبكة خاصة بين المُحقن وPowerMTA، فلن تحتاج إلى مصادقة كلمة المرور.

# قاعدة مصدر واحدة لجميع حقن، داخلي أو خارجي. فرض المصادقة، باستثناء الردود المرتدة وأنواع FBL # <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 كمعرف الحملة).

تقوم قائمة إعادة الكتابة بتعيين الرسائل المُدخلة لاستخدام مجال 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

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

# # تفعيل معالجة الارتداد و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 مع خدمات خارجية مثل مايكروسوفت 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>، مزدوج الاقتباس “، وعلامة العكس `، وكذلك جميع الأحرف بعد ~ يتم تعيينها إلى شرطة سفلية.

أخبار أخرى

اقرأ المزيد من هذه الفئة

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

المنتج

حلول

الموارد

اجتماعي

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

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

اشتراك

A person is standing at a desk while typing on a laptop.

منصة AI-native الكاملة التي تتماشى مع نمو عملك.

المنتج

حلول

الموارد

اجتماعي

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

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

اشتراك