أحاول حالياً تطوير موقع ويب بلغة بايثون باستخدام flask ، هذا الموقع قد يحتاج أحياناً لإرسال إشعارات إلى المستخدمين عبر البريد الإلكتروني، ما هي أفضل طريقة للقيام بذلك؟
استفسار: ما هو الخيار الأفضل لإرسال البريد الإلكتروني من مواقع الويب؟
يتوفر مكتبة Flask-Mail لذلك، أولاً قم بالتثبيت:
pip install Flask-Mail
ثم في ملف تطبيق Flask أيًا كان اسمه وبشكل إفتراضي app.py، عليك كتابة الإعدادات الأساسية، وهي إعدادات البريد الإلكتروني من خلال مزود خدمة مثل Mailtrap فعند التسجيل ستجد تلك البيانات في حسابك من خلال الضغط على email testing من القائمة الجانبية ثم inboxes ثم اضغط على أيقونة الترس في الجانب الأيمن.
from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) app.config['MAIL_SERVER'] = 'smtp.Mailtrap.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USE_TLS'] = True app.config['MAIL_USERNAME'] = 'اسم المستخدم على منصة Mailtrap' app.config['MAIL_PASSWORD'] = 'كلمة المرور هنا لحسابك على Mailtrap' app.config['MAIL_DEFAULT_SENDER'] = 'ضع هنا البريد الذي تريد أن يظهر للمستخدمين في الرسالة أي بريد الراسل' mail = Mail(app)
ومن الأفضل لو استخدمت متغيرات البيئة أي تجنب تخزين كلمات المرور في الكود مباشرةً واستخدم ملف .env مع مكتبة python-dotenv.
ثم أنشئ دالة لإرسال البريد، كإشعار ترحيبي:
from flask import render_template def send_welcome_email(user_email, username): msg = Message( subject="مرحبًا بك في موقعنا!", recipients=[user_email], html=render_template('email/welcome.html', username=username) mail.send(msg) @app.route('/notify/<email>') def notify(email): send_welcome_email(email, "هذا إشعار تجريبي!") return "تم إرسال الإشعار!"
وكممارسة جيدة الأفضل تعديل الكود السابق واستخدم معالجة غير متزامنة Async لتجنب تأخير استجابة التطبيق من خلال Thread كالتالي:
from threading import Thread def send_async_email(app, msg): with app.app_context(): mail.send(msg) def send_email_async(user_email, username): msg = Message( subject="مرحبًا بك في موقعنا!", recipients=[user_email], html=render_template('email/welcome.html', username=username) Thread(target=send_async_email, args=(app, msg)).start()
ثم أنشئ ملف templates/email/welcome.html لمحتوى البريد:
<!DOCTYPE html> <html> <body> <h1>مرحبًا {{ username }}!</h1> <p>شكرًا لانضمامك إلى موقعنا.</p> </body> </html>
التعليقات