أحاول حالياً تطوير موقع ويب بلغة بايثون باستخدام 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>
بما أنكِ تستخدمين Flask، يمكنكِ الاعتماد على Flask-Mail كحل بسيط وسريع، أو استخدام SMTP مباشرة عبر Gmail إذا كان عدد الرسائل قليلاً. ولكن إذا كنتِ بحاجة إلى إرسال عدد كبير من الرسائل، فمن الأفضل استخدام خدمات مثل SendGrid أو Mailgun لتجنب مشاكل الحظر والتأخير. كذلك، إذا كانت الإشعارات تُرسل بشكل متكرر، يمكنكِ الاستعانة بـ Celery لإرسالها بطريقة غير متزامنة دون التأثير على أداء الموقع.
أسهل و أفضل طريقة مجانية هي إستخدام بروتوكول smtp حيث إذا كان لديك إستضافة أو حتى بريد إلكتروني من google فهما يوفران بروتوكول smpt من خلالها تستطيع إرسال رسائل من خلال الكود من بريدك الإلكتروني هذا .
إذا أردت إرسال رسالة من خلال gmail مباشرة يمكنك إستخدام مكتبة EZGmail ويمكنك قراءة المقال التالي حول كيفية تحقيق ذلك :
ولكن لو أردت إرسال البريد من خلال أى خادم بواسطة بروتوكول smtp يمكنك تنزيل مكتبة Flask-Mail
pip install Flask-Mail
وإليك الكود الخاص بإرسال رسائل البريد من خلال المكبتة السابقة وتطبيق flask :
from flask import Flask, render_template, request
from flask_mail import Mail, Message
app = Flask(__name__)
# إعدادات البريد الإلكتروني
app.config['MAIL_SERVER'] = 'smtp.gmail.com' # استخدم الخادم الذي تفضله
app.config['MAIL_PORT'] = 465 # المنفذ الافتراضي للبريد المشفر (SSL)
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'your-email@gmail.com' # البريد الإلكتروني
app.config['MAIL_PASSWORD'] = 'your-email-password' # كلمة المرور
app.config['MAIL_DEFAULT_SENDER'] = 'your-email@gmail.com'
mail = Mail(app)
@app.route('/send_email')
def send_email():
msg = Message(
'Hello from Flask',
recipients=['recipient@example.com']
)
msg.body = 'This is a test email sent from Flask.'
try:
mail.send(msg)
return 'Email sent successfully!'
except Exception as e:
return f'Failed to send email: {e}'
وهكذا تستطيع إرسال رسائل البريد من خلال توفير خادم smtp الذي توفره الإضافة أو من خلال خادم جوجل مباشرة. وإضافة إسم المستخدم وكلمة المرور .
وإذا أردت كيفية تفعيل كملة المرور الخاصة بالبريد في google يمكنك قراءة الإجابة التالية بالخطوات التي توضح لك كيفية تفعيل جوجل لإرسال رسائل البريد من خلال بروتوكول smtp :
التعليقات