الجزء الرابع من S/MIME: جمع المفاتيح العامة للمستلم بطريقة سهلة – باستخدام SparkPost Inbound Relay Webhooks

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

1 min read

الجزء الرابع من S/MIME: جمع المفاتيح العامة للمستلم بطريقة سهلة – باستخدام SparkPost Inbound Relay Webhooks

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

1 min read

الجزء الرابع من S/MIME: جمع المفاتيح العامة للمستلم بطريقة سهلة – باستخدام SparkPost Inbound Relay Webhooks

في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME عملية بسيطة إلى حد ما. إرسال بريد مشفر باستخدام S/MIME أكثر تعقيدًا لأنه يتطلب الحصول على المفاتيح العامة للمستلمين. الأمر بسيط عندما تستخدم عميل بريد إلكتروني للبشر مثل Thunderbird – ولكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني المولدة بواسطة التطبيقات؟

في الجزء 1، أجرينا جولة سريعة على S/MIME، واستعرضنا التوقيع وتشفير تدفقات الرسائل الخاصة بنا عبر مجموعة من عملاء البريد. الجزء 2 قادنا من خلال أداة سطر أوامر بسيطة للتوقيع على الرسائل وتشفيرها، ثم إرسالها عبر SparkPost. أظهر الجزء 3 كيفية إدخال تدفقات بريد آمنة في المنصات المحلية مثل Port25 PowerMTA وMomentum.

في هذه السلسلة، رأينا كيف أن تضمين توقيع S/MIME أمر بسيط نسبيًا. إرسال بريد مشفر باستخدام S/MIME أكثر تعقيدًا لأنك تحتاج إلى الحصول على مفاتيح عامة للمستلمين. هذا شيء عندما تستخدم عميل بريد للبشر مثل Thunderbird – ولكن كيف يمكن أن يعمل ذلك مع تدفقات البريد الإلكتروني التي تُنشأ بواسطة التطبيقات؟

لكن انتظر – هناك طريقة أخرى للوصول إلى موردور للحصول على تلك المفاتيح. يمكن لخدمتك دعوة عملائك (عبر البريد الإلكتروني، بالطبع) لإرسال بريد موقع إليك مجددًا إلى عنوان خدمة العملاء المعروف. باستخدام القوى السحرية لـSparkPost Inbound Relay webhooks، سنستخرج المفتاح العام ونخزنه لتستخدمه.

يمكننا تلخيص هذا في حالة استخدام بسيطة:

  • بصفتي مستلِما للرسائل، أقدم لخدمتك توقيع بريدي الإلكتروني الشخصي عبر البريد الإلكتروني، بحيث يمكن إرسال الرسائل إليّ في المستقبل في شكل مشفر باستخدام S/MIME.

من هذا، دعونا نستخلص بعض المتطلبات الأكثر تفصيلًا:




  • نحتاج إلى خدمة بريد إلكتروني واردة موثوقة ومستمرة لتلقي تلك الرسائل الموقعة.

  • لا ينبغي أن تكون هناك متطلبات خاصة على صيغة البريد، بخلاف أن يحمل توقيع S/MIME.

  • لأن أي شخص يمكن أن يحاول إرسال بريد إلى هذه الخدمة، يجب تصميمها بشكل دفاعي، على سبيل المثال، لرفض الرسائل "المزيفة" من الفاعلين السيئين. سوف تكون هناك حاجة إلى طبقات عديدة من الفحص.

  • إذا تم التحقق من كل شيء بنجاح، ستقوم الخدمة بتخزين الشهادة في ملف، باستخدام تنسيق Privacy-Enhanced Mail (PEM).

هناك بعض المتطلبات غير الوظيفة:

  • قد يكون من الصعب رؤية خدمات الويب التي تتعامل بشكل آلي فقط من الاستجابات لما يحدث داخليًا. ينبغي أن توفر الخدمة سجلات على مستوى التطبيق قابلة للقراءة البشرية بشكل واسع. وبالأخص، ينبغي تسجيل عمليات تحليل وفحص الشهادات.

  • نضيف حالات اختبار لأجزاء التطبيق الداخلية، باستخدام إطار العمل الجميل Pytest، ونقوم بتشغيل تلك الاختبارات تلقائيًا عند التسجيل باستخدام تكامل Travis CI مع GitHub.

حسنًا – دعونا نبدأ!

1. نظرة عامة على الحل

إليك كيف ستبدو الحلول العامة.

2. تثبيت، تكوين وبدء تشغيل التطبيق الويب

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

تطبيق الويب مضمّن في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، فأنت لديك بالفعل. إليك الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة بريد إلكتروني وتحليل شهادات المستخدم والمتوسطة.

  • برنامج webapp.py – تطبيق ويب بسيط متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • webapp.ini – ملف التكوين للجزء أعلاه. يتيح ملف التكوين تمرير نفس القيم بسهولة إلى التطبيقات الخاصة بسطر الأوامر والويب.




تحتاج إلى التأكد من أن المضيف الخاص بك يحتوي على رقم منفذ TCP الصحيح مفتوحًا للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال الرسائل عبر POST إلى تطبيقك. إذا كنت تستضيف على AWS EC2، على سبيل المثال، ستحتاج إلى تكوين مجموعة الأمان للمثال الخاص بك.

تُعطى التعليمات الخاصة بتكوين وتشغيل تطبيق الويب هنا – إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:

curl -X POST https://app.trymsys.net:8855/

يجب أن ترى استجابة مثل:

{"message":"Unknown Content-Type in request headers"}

هذا شيء جيد – تطبيقك يعمل!

في webapp.log على المضيف الخاص بك، سترى ناتجًا مشابهًا لهذا:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك فورًا، يمكنك استيراد طلب Postman المحدد من مستودع المشروع. هذا يحاكي ما سيقوم به حسابك في SparkPost، أي أنه يرسل طلب https POST يحتوي على بريد إلكتروني مع شهادة صالحة ومحددة (تنتمي إلى حساب اختبار خاص بي) إلى تطبيقك.

كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتماشى مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة الرأس في Postman لتطابقه.

إذا كان تطبيقك يعمل، سترى استجابة "200 OK" في Postman. سيحتوي ملف webapp.log الخاص بمضيفك على ناتج مثل هذا:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| شهادة: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| شهادة: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

للحصول على فحص سريع للتأكد، ابحث عن السطر الأخير – إذا تم الإشارة إلى "ملف مكتوب"، فأنت بخير. ما تبقى يعرض عملية التحقق من DKIM والعملية التحققية للشهادة.

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

تطبيق الويب مضمّن في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، فأنت لديك بالفعل. إليك الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة بريد إلكتروني وتحليل شهادات المستخدم والمتوسطة.

  • برنامج webapp.py – تطبيق ويب بسيط متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • webapp.ini – ملف التكوين للجزء أعلاه. يتيح ملف التكوين تمرير نفس القيم بسهولة إلى التطبيقات الخاصة بسطر الأوامر والويب.




تحتاج إلى التأكد من أن المضيف الخاص بك يحتوي على رقم منفذ TCP الصحيح مفتوحًا للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال الرسائل عبر POST إلى تطبيقك. إذا كنت تستضيف على AWS EC2، على سبيل المثال، ستحتاج إلى تكوين مجموعة الأمان للمثال الخاص بك.

تُعطى التعليمات الخاصة بتكوين وتشغيل تطبيق الويب هنا – إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:

curl -X POST https://app.trymsys.net:8855/

يجب أن ترى استجابة مثل:

{"message":"Unknown Content-Type in request headers"}

هذا شيء جيد – تطبيقك يعمل!

في webapp.log على المضيف الخاص بك، سترى ناتجًا مشابهًا لهذا:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك فورًا، يمكنك استيراد طلب Postman المحدد من مستودع المشروع. هذا يحاكي ما سيقوم به حسابك في SparkPost، أي أنه يرسل طلب https POST يحتوي على بريد إلكتروني مع شهادة صالحة ومحددة (تنتمي إلى حساب اختبار خاص بي) إلى تطبيقك.

كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتماشى مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة الرأس في Postman لتطابقه.

إذا كان تطبيقك يعمل، سترى استجابة "200 OK" في Postman. سيحتوي ملف webapp.log الخاص بمضيفك على ناتج مثل هذا:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| شهادة: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| شهادة: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

للحصول على فحص سريع للتأكد، ابحث عن السطر الأخير – إذا تم الإشارة إلى "ملف مكتوب"، فأنت بخير. ما تبقى يعرض عملية التحقق من DKIM والعملية التحققية للشهادة.

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

تطبيق الويب مضمّن في نفس مشروع GitHub مثل الأجزاء 1 – 3، لذا إذا كنت قد تابعت تلك الأجزاء، فأنت لديك بالفعل. إليك الأجزاء الجديدة:

  • برنامج readSMIMEsig.py – قراءة بريد إلكتروني وتحليل شهادات المستخدم والمتوسطة.

  • برنامج webapp.py – تطبيق ويب بسيط متوافق مع Flask للاستخدام مع SparkPost Inbound Relay Webhooks.

  • webapp.ini – ملف التكوين للجزء أعلاه. يتيح ملف التكوين تمرير نفس القيم بسهولة إلى التطبيقات الخاصة بسطر الأوامر والويب.




تحتاج إلى التأكد من أن المضيف الخاص بك يحتوي على رقم منفذ TCP الصحيح مفتوحًا للطلبات الواردة من العالم الخارجي حتى يتمكن SparkPost من إرسال الرسائل عبر POST إلى تطبيقك. إذا كنت تستضيف على AWS EC2، على سبيل المثال، ستحتاج إلى تكوين مجموعة الأمان للمثال الخاص بك.

تُعطى التعليمات الخاصة بتكوين وتشغيل تطبيق الويب هنا – إنه سهل للغاية. للتحقق مما إذا كان تطبيقك يعمل ويمكن الوصول إليه من العالم الخارجي، يمكنك إرسال طلبات (فارغة) من مضيف آخر باستخدام curl، على سبيل المثال:

curl -X POST https://app.trymsys.net:8855/

يجب أن ترى استجابة مثل:

{"message":"Unknown Content-Type in request headers"}

هذا شيء جيد – تطبيقك يعمل!

في webapp.log على المضيف الخاص بك، سترى ناتجًا مشابهًا لهذا:

2019-01-15 00:11:07,575,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unknown Content-Type: None

لمساعدتك في التعامل مع البيانات الحقيقية في تطبيقك فورًا، يمكنك استيراد طلب Postman المحدد من مستودع المشروع. هذا يحاكي ما سيقوم به حسابك في SparkPost، أي أنه يرسل طلب https POST يحتوي على بريد إلكتروني مع شهادة صالحة ومحددة (تنتمي إلى حساب اختبار خاص بي) إلى تطبيقك.

كل ما عليك فعله هو تغيير عنوان الهدف في الطلب (في المربع الرمادي أعلاه) ليتماشى مع تثبيتك. إذا قمت بتغيير قيمة الرمز المميز في webapp.ini، قم بتعديل قيمة الرأس في Postman لتطابقه.

إذا كان تطبيقك يعمل، سترى استجابة "200 OK" في Postman. سيحتوي ملف webapp.log الخاص بمضيفك على ناتج مثل هذا:

2019-01-15 00:11:48,554,root,INFO,Request from 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM passed 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Cryptographic Signature 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| شهادة: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| شهادة: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

للحصول على فحص سريع للتأكد، ابحث عن السطر الأخير – إذا تم الإشارة إلى "ملف مكتوب"، فأنت بخير. ما تبقى يعرض عملية التحقق من DKIM والعملية التحققية للشهادة.

3. إعداد Webhooks استقبال SparkPost

أولاً، نختار نطاقًا لاستخدامه كعنوان رسائلنا الواردة – هنا، سيكون inbound.thetucks.com. قم بإعداد النطاق الخاص بك وفقًا لهذا الدليل. الخطوات التي استخدمتها بالتفصيل:




3.1 إضافة سجلات MX

ستحتاج إلى الوصول إلى حساب مزود خدمة الإنترنت الخاص بك. عند الانتهاء، يمكنك التحقق منها باستخدام dig – ها هو الأمر الخاص بنطاقي.

dig +short MX inbound.thetucks.com

يجب أن ترى:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.




3.2 إنشاء نطاق وارد

استخدم مجموعة SparkPost Postman API، تحديد النطاقات الواردة / إنشاء .. الاتصال. يحتوي جسم طلب POST على النطاق الخاص بك، على سبيل المثال:

{    "domain": "inbound.thetucks.com" }




3.3 إنشاء Webhook ترحيل

قم بإنشاء Webhook ترحيل وارد باستخدام الاتصال Postman المناسب. يحتوي جسم الرسالة في حالتي على:

{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }

كما ذكر من قبل، أوصي بتعيين auth_token إلى القيمة السرية الخاصة بك، كما هو موضح في ملف webapp.ini على مضيفك.

يحتاج قيمة "target" لمطابقة عنوان مضيفك والمنفذ TCP الذي ستستضيف فيه تطبيق الويب.

يحتاج قيمة "domain" لمطابقة سجلات MX التي تم إعدادها في الخطوة 1.







هذا هو! تم الانتهاء من الأعمال الداخلية. يجب أن تكون الآن قادرًا على إرسال الشهادات إلى العنوان الوارد الخاص بك، سيتم معالجتها وتظهر على مضيف تطبيق الويب الخاص بك – في هذه الحالة، ملف باسم bob.lumreeker@gmail.com.crt.

الآن يمكنك إرسال رسائل بريد إلكتروني مشفرة إلى Bob، باستخدام الأدوات الموصوفة في الجزئين 2 و3 من هذه السلسلة.

يمكنك فحص محتويات الشهادة باستخدام:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

4. الداخلية: التحقق من DKIM، التحقق من الشهادة

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

تلخيص...

لقد رأينا كيف يمكن جمع مفاتيح المستلمين العامة بسهولة باستخدام بريد إلكتروني إلى عنوان ويب هوكس للاستقبال. بمجرد الانتهاء من ذلك، يمكن لهؤلاء المستلمين تلقي رسائلهم في شكل مشفر باستخدام S/MIME.

هذا كل شيء في الوقت الحالي! إرسال سعيد.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

R

وصول

G

نمو

م

إدارة

A

أتمتة

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

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

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

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