لنقم ببناء نموذج اتصال بسيط يرسل بريدًا إلكترونيًا من خلال موقع ويب Django .
يمكننا الاستفادة من email support المدمج في Django لجعل هذا الأمر أسهل ثم إرسال رسائل البريد الإلكتروني بشكل حقيقي باستخدام خدمة البريد الإلكتروني SendGrid.
الإعدادات الأولية
الخطوة الأولى هي إنشاء دليل مخصص للأكواد . و كما أقول دائما فإن المكان المناسب هو سطح المكتب لسهولة الوصول إلى الأكواد.
من سطر الأوامر، قم بتنفيذ الأوامر التالية للانتقال إلى سطح المكتب وإنشاء مجلد جهات اتصال جديد.
# Windows
$ cd onedrive\desktop\code
$ mkdir helloworld
$ cd helloworld
يمكننا الآن إنشاء وتنشيط بيئة افتراضية تسمى .venv
ثم قم بتثبيت أحدث إصدار من Django.
# Windows
$ python -m venv .venv
$ .venv\Scripts\Activate.ps1
(.venv) $ python -m pip install django
بعد ذلك، سنقوم بإنشاء مشروع Django جديد يسمى config
وداخله تطبيق يسمى sendemail
:
(.venv) $ django-admin startproject config .
(.venv) $ python manage.py startapp sendemail
للتأكد من أن كل شيء تم تثبيته بشكل صحيح، سنقوم بتشغيل السيرفر المحلي runserver
.
(.venv) $ python manage.py migrate
(.venv) $ python manage.py runserver
إذا قمت بفتح متصفحك على 127.0.0.1:8000، فيجب أن تشاهد الشاشة التالية:
تحديث ملف settings.py
لقد أنشأنا تطبيقًا جديدًا لذا نحتاج إلى إضافته إلى مشروع Django الخاص بنا. ضمن ملف settings.py
، و تحت قسم r INSTALLED_APPS
، أضف sendemail
في الأعلى.
# config/settings.py
INSTALLED_APPS [
"sendemail.apps.SendemailConfig",
...
]
ثم ضمن نفس ملف settings.py
، حدد DEFAULT_FROM_EMAIL
، وهو test@pyarabic.com
بالنسبة لي. ثم قم بتحديث EMAIL_BACKEND
لتحديد الواجهة الخلفية للبريد الإلكتروني التي سنستخدمها، ووحدة التحكم، بحيث يتم إخراج البريد الإلكتروني إلى سطر الأوامر.
# config/settings.py
DEFAULT_FROM_EMAIL = "test@pyarabic.com"
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
تحديث ملف urls.py
نحن بحاجة إلى تحديث ملف django_project/urls.py
، سنقوم بإستدعاء include
و إضافة نمط URL جديد للتطبيق:
# django_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("sendemail.urls")),
]
قم بعد ذلك بإنشاء ملف جديد sendemail/urls.py
وأضف الكود التالي بحيث يكون نموذج الاتصال الرئيسي على email/
ويعيد الإرسال الناجح التوجيه إلى success/
.
# sendemail/urls.py
from django.contrib import admin
from django.urls import path
from .views import contactView, successView
urlpatterns = [
path("contact/", contactView, name="contact"),
path("success/", successView, name="success"),
]
إنشاء Forms.py
نبقى دائما داخل تطبيق sendemail
، أنشئ ملفًا جديدًا باسم sendemail/forms.py
.
سيحتوي هذا الملف على الحقول الموجودة في نموذج الاتصال، وهي ثلاثة: from_email
, subject
, و message
.
# sendemail/forms.py
from django import forms
class ContactForm(forms.Form):
from_email = forms.EmailField(required=True)
subject = forms.CharField(required=True)
message = forms.CharField(widget=forms.Textarea, required=True)
نحن نستخدم واجهة برمجة التطبيقات Forms API المدمجة في Django لإنشاء ثلاثة حقول بسرعة.
إنشاء ملف views.py
لنقم الآن بإنشاء العرض الذي سيقوم بالجزء الأكبر من العمل لنموذج الاتصال. قم بتحديث ملف sendemail/views.py
:
# sendemail/views.py
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import ContactForm
def contactView(request):
if request.method == "GET":
form = ContactForm()
else:
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data["subject"]
from_email = form.cleaned_data["from_email"]
message = form.cleaned_data['message']
try:
send_mail(subject, message, from_email, ["admin@example.com"])
except BadHeaderError:
return HttpResponse("Invalid header found.")
return redirect("success")
return render(request, "email.html", {"form": form})
def successView(request):
return HttpResponse("Success! Thank you for your message.")
الكثير تحدث هنا! نبدأ باستيراد send_mail وBadHeaderError لأسباب أمنية.
بعد ذلك قمنا بالإشارة إلى ContactForm الذي أنشأناه للتو في ملف forms.py
.
إنشاء القالب
الخطوة النهائية وهي إنشاء قوالب لصفحات البريد الإلكتروني. أحب إنشاء مجلد templates
على مستوى المشروع ووضع كافة القوالب الخاصة بي هناك.
لذا قم بإنشاء دليل جديد يسمى templates
في دليل المشروع.
(.venv) $ mkdir templates
قم بعد ذلك بتحديث ملف settings.py
حتى نخبر Django عن مكان البحث عن القوالب.
# django_project/settings.py
TEMPLATES = [
{
...
"DIRS": [BASE_DIR / "templates"],
...
},
]
الآن قم بإنشاء ملف جديد يسمى templates/email.html
وقم بتحديثه بالكود التالي:
<!-- templates/email.html -->
<h1>Contact Us</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<div class="form-actions">
<button type="submit">Send</button>
</div>
</form>
إرسال البريد الإلكتروني الأول
تأكد من أن الخادم يعمل باستخدام python manage.py runserver
ثم إفتح المتصفح على http://127.0.0.1:8000/email/ واملأ النموذج، وانقر فوق الزر “إرسال”.
بعد ذلك ستتم إعادة توجيهك إلى http://127.0.0.1:8000/success/ إذا تم إرسال البريد الإلكتروني.
خدمة البريد الإلكتروني
لإرسال رسائل بريد إلكتروني فعلية، ستحتاج إلى خدمة مواقع مثل SendGrid أو mailgun أو SES. لحسن الحظ، يتعامل Django مع هذه الخدمات بكل سهولة.
في هذا الدرس سنستخدم SendGrid، قم بإنشاء حساب مجاني وحدد خيار SMTP، وهو أسهل في الإعداد من نهج Web API.
تتطلب الشاشة التالية تسمية اسم مفتاح API الخاص بك، والذي أسميته newspaper
ولكن يمكن تسميته بأي شيء. بعد ذلك انقر فوق الزر الأزرق “إنشاء مفتاح”.
قم بتحديث settings.py
على النحو التالي، من خلال التبديل من console
إلى smtp
لـ EMAIL_BACKEND
، مع إضافة عدة حقول جديدة.
قم أيضا بتحديث EMAIL_HOST_PASSWORD
بكلمة مرور التي قمت بإنشاءها على SendGrid.
# django_project/settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" # new
DEFAULT_FROM_EMAIL = "test@pyarabic.com"
EMAIL_HOST = "smtp.sendgrid.net" # new
EMAIL_HOST_USER = "apikey" # new
EMAIL_HOST_PASSWORD = "<sendgrid_password>" # new
EMAIL_PORT = 587 # new
EMAIL_USE_TLS = True # new
هناك أيضًا خطوة إضافية مهمة، وهي التحقق من المرسل. و هي في الأساس خطوة إضافية لمساعدة SendGrid على الالتزام بقوانين مكافحة البريد العشوائي.
قم بإتباع تعليمات SendGrid للتحقق من حساب البريد الإلكتروني.
في السابق كان من الممكن إرسال رسائل بريد إلكتروني من عنوان مجاني على خدمات مثل gmail.com أو yahoo.com، اما الأن لم يعد هذا هو الحال بسبب بروتوكول مصادقة البريد الإلكتروني DMARC.
إلى هنا ستكون قادرًا على إرسال رسائل بريد إلكتروني حقيقية من تطبيق Django. غالبًا ما يتم استخدام هذا عندما يقوم المستخدم بالتسجيل لأول مرة، ويحتاج إلى إعادة تعيين كلمة المرور.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.