Могу ли я использовать файл views.py для фактической отправки электронной почты?

Я пытаюсь создать контактную форму в Django, которая действительно отправляет электронные письма. Могу ли я поместить все конфигурации электронной почты в сам файл views.py? Я хочу сделать это, потому что я хочу, чтобы только законные владельцы электронной почты могли реально отправлять письма. Я не хочу, чтобы люди отправляли мне письма, используя email своих друзей

Да, конечно, можно, но убедитесь, что учетные данные электронной почты хранятся в файле settings.py в безопасности. Идеальный вариант - сохранить учетные данные электронной почты как переменные среды В вашем settings.py файле

EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = "from@example.com"
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# If you are using any other smtp host. 
# Search documentation for other smtp host name and port number
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587
EMAIL_HOST_USER = "from@example.com"
EMAIL_HOST_PASSWORD = "SUPER_SECRET_PASSWORD"

Ваше представление, которое вы хотите использовать для отправки электронной почты views.py

from django.core.mail import EmailMessage

def email_send_view(request):
    if request.method == "POST":
       # Get email information via post request
       to_email = request.POST.get("to", "")
       subject = request.POST.get("subject", "")
       message = request.POST.get("message", "")
       if to_email and message:
           email = EmailMessage(subject=subject,body=body,to=[to])
           email.send()
       # Complete your view
       # ...
       return redirect("REDIRECT_VIEW")

Если вы хотите отправлять html template или image по электронной почте Email Template через ваше django приложение

from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from YourProject.settings import EMAIL_HOST_USER
def email_send_view(request):
    if request.method == "POST":
       # Get email information via post request
       to_email = request.POST.get("to", "")
       subject = request.POST.get("subject", "")
       message = request.POST.get("message", "")
       if to_email and message:
           # Gets HTML from template
           # Make sure in this case you have 
           # html template saved in your template directory
           html_message = render_to_string('template.html', 
                                          {'context': 'Special Message'})
           # Creates HTML Email
           email = EmailMultiAlternatives(subject, 
                                        from_email=EMAIL_HOST_USER, 
                                        to=[to])
           # Send Email
           email.attach_alternative(html_message, "text/html")
           email.send()
       # Complete your view
       # ...
       return redirect("REDIRECT_VIEW")

Вернуться на верх