الجزء الرابع من 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 – ولكن كيف يعمل ذلك مع تدفقات البريد الإلكتروني المولدة من التطبيق؟

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

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

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

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

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

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

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

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

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

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

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

حسنًا – لنبدأ!

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

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

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

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

سنبدأ بهذا الجزء، لذلك لدينا اختبار كامل قبل توجيه تقني للمواجهة بكسل الوارد.

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

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

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

  • webapp.ini – ملف تكوين للبرنامج المذكور. ملف التكوين يمكن نفس القيم من التمرير بكل سهولة إلى كل من التطبيقات الخطية والويب.

تحتاج إلى ضمان أن المضيف الخاص بك لديه رقم منفذ TCP الصحيح مفتوح أمام الطلبات الواردة من الخارج حتى تتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على 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,طلب من 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,طلب من 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,| من=bob.lumreeker@gmail.com,DKIM تم قبوله 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,| اسم الملف=smime.p7s,البايتات=3998 2019-01-15 00:11:48,601,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=['bob.lumreeker@gmail.com'],غير صالحة قبل=2018-10-03 00:00:00,كلمة مرور بعد=2019-10-03 23:59:59,خوارزمية التجزئة=sha256,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=[],غير صالحة قبل=2013-01-10 00:00:00,كلمة مرور بعد=2028-01-09 23:59:59,خوارزمية التجزئة=sha384,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,البايتات=1870,موافق=True

للتحقق السريع، انظر إلى السطر الأخير – إذا كان يقول “ملف مكتوب”، فأنت جيد. الباقي يظهر عملية تحقق DKIM وعملية التحقق من الشهادة.

سنبدأ بهذا الجزء، لذلك لدينا اختبار كامل قبل توجيه تقني للمواجهة بكسل الوارد.

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

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

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

  • webapp.ini – ملف تكوين للبرنامج المذكور. ملف التكوين يمكن نفس القيم من التمرير بكل سهولة إلى كل من التطبيقات الخطية والويب.

تحتاج إلى ضمان أن المضيف الخاص بك لديه رقم منفذ TCP الصحيح مفتوح أمام الطلبات الواردة من الخارج حتى تتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على 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,طلب من 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,طلب من 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,| من=bob.lumreeker@gmail.com,DKIM تم قبوله 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,| اسم الملف=smime.p7s,البايتات=3998 2019-01-15 00:11:48,601,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=['bob.lumreeker@gmail.com'],غير صالحة قبل=2018-10-03 00:00:00,كلمة مرور بعد=2019-10-03 23:59:59,خوارزمية التجزئة=sha256,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=[],غير صالحة قبل=2013-01-10 00:00:00,كلمة مرور بعد=2028-01-09 23:59:59,خوارزمية التجزئة=sha384,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,البايتات=1870,موافق=True

للتحقق السريع، انظر إلى السطر الأخير – إذا كان يقول “ملف مكتوب”، فأنت جيد. الباقي يظهر عملية تحقق DKIM وعملية التحقق من الشهادة.

سنبدأ بهذا الجزء، لذلك لدينا اختبار كامل قبل توجيه تقني للمواجهة بكسل الوارد.

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

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

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

  • webapp.ini – ملف تكوين للبرنامج المذكور. ملف التكوين يمكن نفس القيم من التمرير بكل سهولة إلى كل من التطبيقات الخطية والويب.

تحتاج إلى ضمان أن المضيف الخاص بك لديه رقم منفذ TCP الصحيح مفتوح أمام الطلبات الواردة من الخارج حتى تتمكن SparkPost من إرسال رسائل إلى تطبيقك. إذا كنت مستضافًا على 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,طلب من 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,طلب من 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,| من=bob.lumreeker@gmail.com,DKIM تم قبوله 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,| اسم الملف=smime.p7s,البايتات=3998 2019-01-15 00:11:48,601,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=['bob.lumreeker@gmail.com'],غير صالحة قبل=2018-10-03 00:00:00,كلمة مرور بعد=2019-10-03 23:59:59,خوارزمية التجزئة=sha256,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| الشهادة: البريد الإلكتروني subject email_address=[],غير صالحة قبل=2013-01-10 00:00:00,كلمة مرور بعد=2028-01-09 23:59:59,خوارزمية التجزئة=sha384,مفتاح بالحجم=2048 بايت, المصدر={'اسم الدولة': 'GB', 'اسم الولاية أو المحافظة': 'Greater Manchester', 'اسم المنطقة': 'Salford', 'اسم المؤسسة': 'COMODO CA Limited', 'اسم عام': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| ملف مكتوب ./bob.lumreeker@gmail.com.crt,البايتات=1870,موافق=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 إنشاء نطاق وارد

استخدم مجموعة Postman الخاصة بـSparkPost API، وحدد مكالمة Inbound Domains / Create .. يحتوي المحتوى الأساسي لطلب POST على نطاقك، على سبيل المثال:

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

Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


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.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


هذا هو! تم الانتهاء من التوصيل. يجب أن تكون قادرًا الآن على إرسال الشهادات إلى عنوانك الوارد، حيث سيتم معالجتها وتظهر على مضيف تطبيق الويب الخاص بك - في هذه الحالة، ملف باسم 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 في 30 دقيقة.

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

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

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

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

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

R

وصول

G

نمو

م

إدارة

A

أتمتة

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

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