تقنيات نور التعليمية تقنيات نور التعليمية

آخر الأخبار

جاري التحميل ...

💎 الدرس الخامس: عرض المشتركين من ملف Excel + إرسال رسالة تأكيد عبر البريد الإلكتروني

🎯 أهداف الدرس:

  • قراءة ملف Excel وعرضه داخل صفحة HTML بشكل منسق.
  • إرسال رسالة تأكيد عبر البريد الإلكتروني بعد الاشتراك.
  • تنظيم الكود في Flask بطريقة احترافية أكثر.
عرض المشتركين من ملف Excel


⚙️ الخطوة 1: تثبيت المتطلبات

قبل البدء، تأكد من تثبيت المكتبتين التاليتين:

pip install openpyxl flask-mail

🧠 الخطوة 2: إعداد ملف التطبيق app.py

from flask import Flask, render_template, request
from openpyxl import Workbook, load_workbook
from flask_mail import Mail, Message
import os

app = Flask(__name__)

# إعداد البريد الإلكتروني
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = 'YOUR_EMAIL@gmail.com'     # ضع بريدك هنا
app.config['MAIL_PASSWORD'] = 'YOUR_APP_PASSWORD'         # استخدم App Password من إعدادات جوجل

mail = Mail(app)

EXCEL_FILE = "subscribers.xlsx"

# إنشاء ملف Excel إن لم يكن موجودًا
def create_excel_file():
    if not os.path.exists(EXCEL_FILE):
        wb = Workbook()
        ws = wb.active
        ws.title = "Subscribers"
        ws.append(["الاسم", "البريد الإلكتروني"])
        wb.save(EXCEL_FILE)

create_excel_file()

@app.route('/')
def home():
    return """
    <h1>مرحبًا بك في موقع Flask التجريبي!</h1>
    <p><a href='/subscribe'>الاشتراك في النشرة البريدية</a></p>
    <p><a href='/subscribers'>عرض المشتركين</a></p>
    """

@app.route('/subscribe', methods=['GET', 'POST'])
def subscribe():
    if request.method == 'POST':
        name = request.form['name']
        email = request.form['email']

        # حفظ البيانات في Excel
        wb = load_workbook(EXCEL_FILE)
        ws = wb.active
        ws.append([name, email])
        wb.save(EXCEL_FILE)

        # إرسال رسالة تأكيد للمشترك
        try:
            msg = Message("تأكيد الاشتراك في النشرة البريدية",
                          sender=app.config['MAIL_USERNAME'],
                          recipients=[email])
            msg.body = f"مرحبًا {name}!\n\nشكرًا لاشتراكك في نشرتنا البريدية. سنبقيك على اطلاع بكل جديد."
            mail.send(msg)
            status = f"✅ تم إرسال رسالة تأكيد إلى {email}"
        except Exception as e:
            status = f"⚠️ حدث خطأ أثناء إرسال البريد: {e}"

        return f"""
        <h2>شكرًا لك {name} على الاشتراك!</h2>
        <p>{status}</p>
        <a href='/'>عودة إلى الصفحة الرئيسية</a>
        """

    return render_template('subscribe.html')

# صفحة عرض المشتركين
@app.route('/subscribers')
def show_subscribers():
    wb = load_workbook(EXCEL_FILE)
    ws = wb.active
    data = list(ws.values)
    headers = data[0]
    rows = data[1:]
    return render_template('subscribers.html', headers=headers, rows=rows)

if __name__ == '__main__':
    app.run(debug=True)

🧾 الخطوة 3: صفحة عرض المشتركين templates/subscribers.html

<!DOCTYPE html>
<html lang="ar">
<head>
    <meta charset="UTF-8">
    <title>قائمة المشتركين</title>
    <style>
        table {
            border-collapse: collapse;
            width: 60%;
            margin: 30px auto;
            text-align: center;
        }
        th, td {
            border: 1px solid #666;
            padding: 8px;
        }
        th {
            background-color: #ddd;
        }
        h1 {
            text-align: center;
        }
    </style>
</head>
<body>
    <h1>قائمة المشتركين في النشرة البريدية</h1>
    <table>
        <tr>
            {% for header in headers %}
                <th>{{ header }}</th>
            {% endfor %}
        </tr>
        {% for row in rows %}
        <tr>
            {% for cell in row %}
                <td>{{ cell }}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </table>
</body>
</html>

✉️ ملاحظات حول البريد الإلكتروني:

  • يجب تفعيل App Passwords في حساب Gmail حتى تتمكن من الإرسال بأمان.

اذهب إلى:
🔗 https://myaccount.google.com/apppasswords
ثم أنشئ كلمة مرور للتطبيق وضعها في:

app.config['MAIL_PASSWORD'] = 'كلمة_المرور_الخاصة_بالتطبيق'
  • لا تستخدم كلمة مرور الحساب العادية مطلقًا ⚠️

✅ النتيجة النهائية:

  1. عند التسجيل في /subscribe يتم حفظ بيانات المشترك في Excel.
  2. تُرسل رسالة تأكيد إلى بريده الإلكتروني.
  3. يمكن عرض جميع المشتركين في /subscribers بجدول منسق.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

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

جميع الحقوق محفوظة

تقنيات نور التعليمية