Могу ли я использовать файл 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")