كيفية تلقي رسائل البريد الإلكتروني باستخدام Flask Framework لـ Python

نشرت: 2020-04-30

على الرغم من وجود الكثير من البرامج التعليمية على الإنترنت حول إرسال رسائل البريد الإلكتروني ، إلا أن هناك القليل جدًا من المعلومات حول كيفية تكوين تطبيق لاستلامها ومعالجتها. هذه مهمة يمكن أن تكون صعبة للغاية إذا كنت تحاول إعداد كل شيء بنفسك ، ولكنها سهلة مثل تلقي طلب ويب عند استخدام ميزة التحليل الداخلي لـ Twilio SendGrid .

في هذا البرنامج التعليمي القصير ، ستتعلم كيفية قيام Twilio SendGrid بإعادة توجيه رسائل البريد الإلكتروني الخاصة بك مباشرةً إلى تطبيق الويب الخاص بك ، باستخدام Python وإطار عمل Flask للويب.

متطلبات

هذه هي متطلبات إكمال هذا البرنامج التعليمي:

  • Python 3: إذا كان نظام التشغيل الخاص بك لا يوفر مترجم Python 3 ، فيمكنك الانتقال إلى python.org لتنزيل برنامج التثبيت.
  • حساب Twilio SendGrid: إذا كنت جديدًا في Twilio SendGrid ، يمكنك إنشاء حساب مجاني ، والذي يسمح لك بإرسال 100 بريد إلكتروني يوميًا إلى الأبد.
  • المجال الذي ستتلقى فيه رسائل البريد الإلكتروني: خلال هذه المقالة ، سأستخدم yourdomainhere.com . ستحتاج إلى استبداله باسم المجال الخاص بك.
  • ngrok : سنستخدم هذه الأداة المفيدة لتوصيل تطبيق Flask الذي يعمل محليًا على جهاز الكمبيوتر الخاص بك بعنوان URL عام يمكن لـ SendGrid إرسال الطلبات إليه. يعد هذا ضروريًا لإصدار تطوير التطبيق لأنه من المحتمل أن يكون جهاز الكمبيوتر الخاص بك خلف جهاز توجيه أو جدار حماية ، لذلك لا يمكن الوصول إليه مباشرة على الإنترنت. إذا لم يكن برنامج ngrok مثبتًا لديك ، فيمكنك تنزيل نسخة لنظام التشغيل Windows أو MacOS أو Linux .

مصادقة المجال

قبل أن يتمكن Twilio SendGrid من قبول رسائل البريد الإلكتروني على مجالك ، يجب عليك مصادقته ، حتى يعرف Twilio SendGrid أن المجال تحت سيطرتك.

بدء مصادقة المجال

لمصادقة المجال الخاص بك ، قم بتسجيل الدخول إلى حساب SendGrid الخاص بك ، وفي شريط التنقل الموجود على الجانب الأيسر ، افتح "الإعدادات" لتحديد " مصادقة المرسل " .

في صفحة مصادقة المرسل ، انقر فوق الزر "البدء" في قسم "مصادقة المجال".

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

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

انقر فوق الزر "التالي" للمتابعة إلى الصفحة التالية.

في الصفحة التالية سيُطلب منك تقديم اسم المجال الخاص بك. لقد قمت بإدخال yourdomainhere.com ، وسوف تحتاج إلى إدخال المجال الذي تنوي استخدامه. لا تحتاج إلى تغيير أي شيء في قسم "الإعدادات المتقدمة".

انقر فوق الزر "التالي" للمتابعة.

ستعرض الصفحة الآن 3 سجلات DNS جديدة تحتاج إلى إضافتها إلى تكوين المجال الخاص بك ، ولكل منها نوع واسم مضيف وقيمة. من أجل راحتك ، يمكن نسخ المضيف والقيم جميعًا إلى الحافظة. أدناه يمكنك رؤية الإعدادات التي أعطيت لي. ستكون متشابهة ، ولكن مع اسم المجال الخاص بك فيها:

إضافة إدخالات DNS إلى المجال الخاص بك

ستكون الخطوة التالية مختلفة اعتمادًا على مزود DNS الخاص بك. قم بزيارة صفحة تكوين المجال الخاص بك وابحث عن مكان تعديل إعدادات DNS.

لقطات الشاشة أدناه تخص Google Domains . يمكنك أن ترى كيف أضفت أول سجلات DNS الثلاثة في الصورة التالية. لاحظ أن السجلات الثلاثة بأسماء @ و ftp و www لا علاقة لها بهذا البرنامج التعليمي وقد تم تعيينها بالفعل على نطاقي.

كن حذرًا بشأن كيفية إدخال اسم سجل DNS. بينما يتوقع بعض المزودين اسمًا مؤهلًا بالكامل لسجلات DNS الخاصة بك ، كما هو موضح بواسطة SendGrid ، يتوقع البعض الآخر فقط الجزء الموجود قبل اسم المجال. على سبيل المثال ، يجب إدخال السجل الذي أظهره SendGrid على أنه em3329.yourdomainhere.com كـ em3329 على Google Domains. تحقق من سجلات DNS الأخرى وكن متسقًا في كيفية إدخال هذه السجلات الجديدة.

إليك كيفية رعاية سجلات DNS الثلاثة الجديدة بعد أن قمت بإدخالها:

التحقق من المجال

عد الآن إلى صفحة مصادقة المرسل SendGrid ، حيث سيظهر مجالك على أنه معلق. انقر فوقه لمتابعة عملية المصادقة.

في الشاشة التالية ، سترى 3 سجلات DNS. انقر فوق الزر "تحقق" في الجزء العلوي الأيمن من الصفحة لجعل SendGrid يسحب سجلات DNS الخاصة بك وتأكيد أنك قد أضفت الإدخالات المطلوبة.

إذا كان SendGrid قادرًا على التحقق من مجالك ، فستحصل على رسالة الخطأ "لقد نجحت!" صفحة:

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

بمجرد حصولك على "لقد نجحت!" أنت على ما يرام في طريقك لإرسال رسائل البريد الإلكتروني إلى تطبيق الويب Flask الخاص بك.

تطبيق البريد الإلكتروني Flask

نحن الآن جاهزون لكتابة تطبيق ويب Flask بسيط حيث يمكن لـ SendGrid إعادة توجيه رسائل البريد الإلكتروني الخاصة بنا.

قم بإنشاء بيئة افتراضية للغة Python

باتباع أفضل ممارسات Python ، سنقوم بإنشاء دليل منفصل لمشروعنا ، وداخله سننشئ بيئة افتراضية . سنقوم بعد ذلك بتثبيت إطار عمل Flask عليه.

إذا كنت تستخدم نظام التشغيل Unix أو Mac OS ، فافتح Terminal وأدخل الأوامر التالية للقيام بالمهام الموضحة أعلاه:

إذا كنت تتبع البرنامج التعليمي على Windows ، فأدخل الأوامر التالية في نافذة موجه الأوامر:

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

لنكتب الآن تطبيق Flask الذي سيتلقى رسائل البريد الإلكتروني الواردة. يظهر رمز التطبيق الكامل أدناه. ضع هذا الرمز في ملف يسمى app.py.

يحتوي التطبيق على مسار ويب واحد فقط متصل بـ / عنوان URL للبريد الإلكتروني. سيكون لدينا SendGrid استدعاء هذا الطريق لتمرير رسائل البريد الإلكتروني الواردة إلينا. سيحتوي الطلب الذي يرسلونه على جميع التفاصيل المتعلقة بالبريد الإلكتروني المرسل كنشرة نموذج HTTP قياسية. هذا يعني أنه من Flask يمكننا الوصول بسهولة إلى كل هذه التفاصيل من قاموس "request.form".

تعتبر متغيرات النموذج التالية ذات أهمية خاصة:

  • "request.form ['from']`: مرسل البريد الإلكتروني
  • `request.form ['to']`: مستلم (مستلمون) البريد الإلكتروني
  • `request.form ['subject']`: موضوع البريد الإلكتروني
  • `request.form ['text']` نص الرسالة الإلكترونية بتنسيق نص عادي
  • `request.form ['html']` نص الرسالة بتنسيق HTML

لاحظ أن هذه ليست الحقول الوحيدة التي أرسلتها SendGrid. راجع القائمة الكاملة لمعلمات البريد الإلكتروني في وثائق SendGrid.

نظرًا لأن معالجة رسائل البريد الإلكتروني تعتمد إلى حد كبير على كل تطبيق ، على سبيل المثال تطبيق Flask ، فكل ما نقوم به هو طباعة حقول البريد الإلكتروني إلى وحدة التحكم.

بعد حفظ app.py ، يمكنك بدء تطبيق Flask كما يلي:

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

خطاف الويب لتحليل SendGrid الوارد

يتمثل آخر هذا البرنامج التعليمي في تكوين SendGrid لإعادة توجيه رسائل البريد الإلكتروني الواردة على مجالك إلى تطبيق Flask.

بدء نجروك

تقوم أداة ngrok بإنشاء عنوان URL متاح للجمهور وتعيينه إلى تطبيق قيد التشغيل محليًا. هذه تقنية شائعة تستخدم لفضح الخدمات على الإنترنت للتطوير والاختبار. بمجرد اكتمال تطبيق Flask الخاص بك ، ستقوم بنشره للإنتاج على خادم مناسب ولن يكون هذا ضروريًا بعد الآن.

إذا لم تكن قد قمت بذلك بعد ، فقم بتثبيت ngrok على نظامك. اترك تطبيق Flask قيد التشغيل وافتح نافذة طرفية ثانية لبدء ngrok على النحو التالي:

هذا يخبر ngrok بإنشاء "نفق" من الإنترنت العام إلى المنفذ 5000 في جهازك المحلي ، حيث ينتظر تطبيق Flask طلبات الويب. سيبدو إخراج ngrok على النحو التالي:

لاحظ الأسطر التي تبدأ بـ "Forwarding" في شاشة ngrok. تُظهر هذه عناوين URL عامة يتم إنشاؤها عشوائيًا والتي يستخدمها ngrok لإعادة توجيه الطلبات إلى خدمتنا. سنستخدم https: // URL لأنه يستخدم التشفير.

تسجيل عنوان URL الخاص بخطاف الويب مع SendGrid

ارجع إلى لوحة تحكم SendGrid وضمن الإعدادات ، حدد التحليل الداخلي ، ثم انقر على "إضافة مضيف وعنوان URL".

في الصفحة التالية ، أدخل النطاق الفرعي الذي ستتلقى رسائل البريد الإلكتروني عليه. يمكن أن يكون هذا أي مجال فرعي لم يتم استخدامه بعد على نطاقك ، أو إذا كنت تفضل تلقي رسائل البريد الإلكتروني مباشرة على نطاق المستوى الأعلى الخاص بك ، فيمكن تركه فارغًا. في الصورة أدناه ، استخدمت تحليل النطاق الفرعي ، مما يعني أن رسائل البريد الإلكتروني التي تقبلها SendGrid ستكون بالتنسيق < أي شيء> @ parse.yourdomainhere.com . ترك حقل النطاق الفرعي فارغًا سيسمح لـ SendGrid بقبول رسائل البريد الإلكتروني لـ <anything> @ yourdomainhere.com ، والتي قد تكون مفضلة في بعض الحالات.

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

الحقل التالي مخصص لعنوان URL المقصود لخطاف الويب الخاص بك. هذا هو عنوان URL الذي تم إنشاؤه بواسطة ngrok والذي تم إلحاقه بعنوان Flask URL / البريد الإلكتروني . في حالتي كان هذا https://bbf1b72b.ngrok.io/email . سيكون لديك عنوان URL مشابه ، لكن الجزء الأول من اسم مضيف ngrok سيكون مختلفًا.

انقر على "إضافة" لتهيئة الرد التلقائي على الويب.

سترى الآن إدخالاً للخطاف الخطاف على الويب في صفحة التحليل الداخلي الرئيسية:

ملاحظة: تتغير عناوين URL الخاصة بـ ngrok في كل مرة يتم فيها إيقاف تشغيل ngrok وإعادة تشغيله ، لذلك أثناء التطوير ، ستحتاج إلى تعديل خطاف الويب لتحديث عنوان URL في كل مرة تقوم فيها بإعادة تشغيل ngrok. عندما تنشر خطاف الويب الخاص بك للاستخدام الإنتاجي ، فسوف تستضيفه مباشرة على عنوان URL عام ، لذلك لن يتم استخدام ngrok.

تسجيل المجال الفرعي التحليل

يجب تحديد النطاق الفرعي الذي حددته لتلقي رسائل البريد الإلكتروني في القسم السابق في تكوين DNS لمجالك باستخدام سجل "MX". قيمة هذا السجل هي نفسها لجميع عملاء SendGrid: `mx.sendgrid.net.` (لاحظ النقطة اللاحقة بعد" net ").

في تكوين Google Domains DNS الخاص بي ، قمت بتعريف نطاق التحليل الفرعي الخاص بي على النحو التالي:

تذكر أنه بناءً على موفر المجال الذي تستخدمه ، قد تحتاج إلى إدخال اسم المضيف الكامل لسجل DNS هذا ، لذلك في هذه الحالة سيكون parse.yourdomainhere.com .

إذا قررت عدم تحديد نطاق فرعي في القسم السابق ، فسيكون اسم مضيفك هو yourdomainhere.com ، والذي يجب أن يُعطى لبعض موفري DNS كـ " @".

تذكر أن تغيير DNS هذا سيحتاج أيضًا إلى الانتشار ، لذلك قد لا تتمكن من تلقي رسائل البريد الإلكتروني على الفور.

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

أثناء تشغيل كل من تطبيق Flask و ngrok ، افتح عميل البريد الإلكتروني وأرسل بريدًا إلكترونيًا تجريبيًا. في الحقل "إلى:" ، يمكنك إدخال أي اسم مستخدم تريده ، حيث يلتقط SendGrid جميع أسماء المستخدمين. ما يحدث بعد @ يحتاج إلى أن يكون مجال استلام البريد الإلكتروني الكامل الخاص بك.

في المثال أدناه ، أرسلت بريدًا إلكترونيًا إلى [email protected] :

انتظر دقيقة أو دقيقتين حتى تتلقى SendGrid البريد الإلكتروني وإعادة توجيهه إلى عنوان URL الخاص بخطاف الويب ngrok ، والذي بدوره سيمرره إلى نقطة نهاية Flask / البريد الإلكتروني . كما رأيت أعلاه ، تطبع نقطة النهاية البسيطة التي كتبتها في تطبيق Flask بيانات البريد الإلكتروني المستلمة إلى وحدة التحكم:

هذا هو الأمر ، نحن الآن نتلقى رسائل بريد إلكتروني كطلبات ويب في تطبيق Flask الخاص بنا!

نشر الإنتاج

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

عمليات النشر بدون نجروك

كما ذكرنا أعلاه ، لا تعد ngrok أداة إنتاج ولا يجب استخدامها مطلقًا في نشر الإنتاج. بدلاً من ذلك ، ستقوم بنشر تطبيق Flask الخاص بك على خادم متصل مباشرة بالإنترنت. هناك العديد من خيارات النشر التي تمت مناقشتها في وثائق Flask.

أمان Webhook

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

من الإجراءات الجيدة لمنع هذا النوع من الهجوم تنفيذ المصادقة الأساسية على نقطة نهاية Flask. يمكن أن يكون امتداد Flask-HTTPAuth مفيدًا في تنفيذ هذا النوع من الأمان.

إذا قمت بإضافة المصادقة إلى نقطة النهاية الخاصة بك ، فأنت بحاجة إلى تضمين اسم المستخدم وكلمة المرور في عنوان URL الخاص بخطاف الويب المعطى لـ SendGrid. يجب إعطاء خطاف الويب الذي استخدمته أعلاه كـ https: // username: [email protected]/email.

خاتمة

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

نحن متشوقون لمعرفة ما تقوم بإنشائه باستخدام التحليل الداخلي!