في هذا الدرس سنتعلم كيف نضيف ميزة رائعة لتطبيقنا:
📩 إرسال رسالة تأكيد تلقائية إلى المشترك بعد تسجيله في النشرة البريدية.
🎯 هدف الدرس:
تعلم كيفية إعداد خدمة البريد الإلكتروني في Flask باستخدام مكتبة Flask-Mail وإرسال بريد تأكيد ديناميكي بعد نجاح التسجيل.
1️⃣ تثبيت المكتبة المطلوبة
قبل أي شيء، قم بتثبيت مكتبة البريد عبر pip:
pip install Flask-Mail
2️⃣ إعداد إعدادات البريد داخل التطبيق
افتح ملف app.py
وأضف إعدادات البريد (يفضل أن تكون في الأعلى بعد إنشاء التطبيق):
from flask_mail import Mail, Message
# إعداد Flask-Mail
app.config['MAIL_SERVER'] = 'smtp.gmail.com' # سيرفر البريد (Gmail مثال)
app.config['MAIL_PORT'] = 587 # المنفذ المستخدم
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False
app.config['MAIL_USERNAME'] = 'youremail@gmail.com' # بريدك
app.config['MAIL_PASSWORD'] = 'your_app_password' # كلمة مرور التطبيق (وليس كلمة المرور العادية!)
app.config['MAIL_DEFAULT_SENDER'] = ('فريق الموقع', 'youremail@gmail.com')
mail = Mail(app)
⚠️ ملاحظة هامة: إذا كنت تستخدم Gmail، يجب إنشاء كلمة مرور خاصة بالتطبيق من إعدادات أمان حسابك (App Passwords)،
لأن Gmail لا يسمح بإرسال البريد من برامج خارجية بكلمة المرور العادية.
3️⃣ تعديل دالة الاشتراك لإرسال البريد بعد التسجيل
ابحث عن دالة /subscribe
في مشروعك، وعدّلها بحيث تُرسل بريد تأكيد عند نجاح التسجيل:
@app.route('/subscribe', methods=['GET', 'POST'])
def subscribe():
if request.method == 'POST':
name = request.form.get('name', '').strip()
email = request.form.get('email', '').strip().lower()
if not name or not email:
flash("الرجاء ملء جميع الحقول.", "warning")
return redirect(url_for('subscribe'))
existing = Subscriber.query.filter_by(email=email).first()
if existing:
flash("هذا البريد مسجل بالفعل.", "danger")
return redirect(url_for('subscribe'))
new_sub = Subscriber(name=name, email=email)
db.session.add(new_sub)
db.session.commit()
# إرسال رسالة تأكيد بالبريد الإلكتروني
try:
msg = Message(
subject="تأكيد اشتراكك في نشرتنا البريدية",
recipients=[email],
body=f"مرحبًا {name}!\n\nشكرًا لاشتراكك في نشرتنا البريدية. سنرسل لك أحدث الأخبار قريبًا.\n\nتحياتنا،\nفريق الموقع"
)
mail.send(msg)
flash("تم إرسال رسالة تأكيد إلى بريدك الإلكتروني.", "success")
except Exception as e:
flash(f"تم التسجيل، لكن فشل إرسال البريد: {str(e)}", "warning")
return redirect(url_for('subscribers_list'))
return render_template('subscribe.html')
4️⃣ تجربة الإرسال
بعد تشغيل التطبيق عبر:
python app.py
قم بتسجيل اشتراك جديد عبر صفحة /subscribe
،
وستظهر رسالة تفيد بأنه تم إرسال بريد التأكيد.
افتح صندوق بريدك للتحقق من وصول الرسالة ✉️
5️⃣ تحسين واجهة البريد (اختياري)
يمكننا لاحقًا جعل الرسالة بتنسيق HTML أكثر جمالاً:
msg = Message(
subject="🎉 أهلاً بك في نشرتنا!",
recipients=[email],
html=f"""
<h2>مرحبًا {name}!</h2>
<p>شكرًا لانضمامك إلى نشرتنا البريدية. نحن متحمسون لمشاركة آخر التحديثات معك.</p>
<hr>
<p>تحياتنا،<br>فريق <b>موقع Flask</b></p>
"""
)
mail.send(msg)
✅ تمرين الدرس السابع:
المطلوب:
أضف في تطبيقك إعدادًا جديدًا يرسل بريدًا إداريًا (Admin Alert) إلى بريد المدير
كل مرة يتم فيها اشتراك مستخدم جديد.
📩 مثال:
"تم تسجيل مشترك جديد بالاسم: أحمد، البريد: ahmed@example.com"
💡 تلميح للحل:
1- أنشئ متغيرًا جديدًا في الإعدادات:app.config['ADMIN_EMAIL'] = 'admin@yourdomain.com'
2- بعد إرسال البريد للمشترك، أرسل بريدًا ثانيًا للمدير بنفس الدالة:
admin_msg = Message(
subject="مشترك جديد!",
recipients=[app.config['ADMIN_EMAIL']],
body=f"مشترك جديد بالاسم: {name}\nالبريد الإلكتروني: {email}"
)
mail.send(admin_msg)