اتصال به ایمیل‌سرور در برنامه‌های Django


پروژه و کدهای مورد استفاده در ویدیوی فوق در اینجا قابل مشاهده و دسترسی هستند.

برای استفاده از سرویس ایمیل در برنامه‌های Django، کافیست تا طبق مستندات SMTP، یک دسترسی SMTP و طبق مستندات افزودن نشانی، یک نشانی برای ایمیل‌سرور خود، ایجاد کنید. در ادامه نیز، بایستی اطلاعات مربوط به ایمیل‌سرور خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:
کپی
MAIL_HOST=smtp.c1.liara.email
MAIL_PORT=465
MAIL_USER=hopeful_zhukovsky_9daqpv
MAIL_PASSWORD=fbef30d7-f852-428e-9573-bc73381c7d4d
MAIL_FROM_ADDRESS=info@example.com

مقدار فیلد MAIL_FROM_ADDRESS باید یکی از نشانی‌های اضافه شده در سرویس ایمیل باشد.

حال، بایستی ماژول مورد نیاز برنامه را با اجرای دستور زیر نصب کنید:
کپی
pip install python-decouple
در ادامه، کافیست قطعه کدی مشابه قطعه کد زیر را به فایل settings.py خود، اضافه کنید:
کپی
from decouple import config

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = config('MAIL_HOST')
EMAIL_PORT = config('MAIL_PORT', cast=int)
EMAIL_HOST_USER = config('MAIL_USER')
EMAIL_HOST_PASSWORD = config('MAIL_PASSWORD')
EMAIL_USE_TLS = False # Disable STARTTLS 
EMAIL_USE_SSL = True  # Force TLS
DEFAULT_FROM_EMAIL = f"{config('MAIL_FROM_NAME')} <{config('MAIL_FROM_ADDRESS')}>"
تمامی کارها انجام شده است و شما می‌توانید از ایمیل‌سرور خود استفاده کنید؛ به عنوان مثال، می‌توانید یک app جدید ایجاد کنید و views.py آن را همانند قطعه کد زیر، بنویسید:
کپی
from django.core.mail import EmailMessage
from django.http import JsonResponse

def send_email(request):
    subject = "Test Email"
    message = "This is a test email sent using TLS."
    recipient_list = ["recipient@example.com"]
    headers = {"x-liara-tag": "test-tag"}  # Custom headers

    try:
        email = EmailMessage(
            subject=subject,
            body=message,
            from_email=None,  # Uses DEFAULT_FROM_EMAIL from settings.py
            to=recipient_list,
            headers=headers,
        )
        email.send()
        return JsonResponse({"status": "success", "message": "Email sent successfully!"})
    except Exception as e:
        return JsonResponse({"status": "error", "message": str(e)})