#django #email #sendmail
#django #Адрес электронной почты #отправить почту
Вопрос:
Я пытаюсь просмотреть электронное письмо отправителя, которое отправляется на хост электронной почты. Я могу отправлять электронные письма на email_host_user, используя переменные среды, и разрешил доступ для менее защищенных приложений в учетной записи Yahoo. Однако, когда я выполняю «from_email», я получил сообщение об ошибке: SMTPSenderRefused—(550, ошибка запроса b; Почтовый ящик недоступен’, ‘bill@yahoo.com ‘)—‘bill@yahoo.com это просто случайное электронное письмо отправителя, хотя я не могу отправить на email_host. Я думаю, что должны быть некоторые проблемы с моим views.py ? Я ценю ваш отзыв!
settings.py
EMAIL_HOST='smtp.mail.yahoo.com'
EMAIL_HOST_USER=os.environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD=os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
print(os.environ.get('EMAIL_HOST_USER'))
print(os.environ.get('EMAIL_HOST_PASSWORD'))
print(os.environ.get('SECRET_KEY'))
views.py
def contact(request):
if request.method=='POST':
message=request.POST.get('message', '')
from_email=request.POST.get('from_email', '')
send_mail('Contact Form',
message,
from_email,
[settings.EMAIL_HOST_USER],
fail_silently=False
)
return render(request, 'first_app/contact.html')
contact.html
<form action="/contact" method="POST">
{% csrf_token %}
<input type="email" name="from_email" placeholder="Your email">
<textarea name="message" placeholder="Message...">
</textarea>
<input type="submit">
</form>
Ответ №1:
Yahoo не позволит вам отправлять электронную почту с неавторизованного адреса электронной почты. Вы можете использовать только свой EMAIL_HOST_USER
адрес электронной почты для отправки электронных писем.
Что вы можете сделать, это установить EMAIL_HOST_USER
в качестве отправителя и добавить Reply-To
заголовок с адресом электронной почты, указанным в форме.
Вы должны использовать EmailMessage
для этого
from django.core.mail import EmailMessage
def contact(request):
if request.method=='POST':
message=request.POST.get('message', '')
from_email=request.POST.get('from_email', '')
email = EmailMessage(
subject='Contact Form',
message=message,
from_email=settings.EMAIL_HOST_USER,
recipient_list=[settings.EMAIL_HOST_USER'],
reply_to=[from_email]
)
email.send(fail_silently=False)
return render(request, 'first_app/contact.html')
Комментарии:
1. Спасибо, Аман, за подробный отзыв. Я отредактировал: « email = Сообщение электронной почты ( тема = ‘Контактная форма’, тело = сообщение, from_email= настройки. EMAIL_HOST_USER, кому=[настройки. EMAIL_HOST_USER], reply_to=[‘from_email’] ) email.send(fail_silently = False)« Электронное письмо удалось отправить — хотя, когда я нажимаю «Ответить», отображается «Кому: из_емейла», и Yahoo указывает, чтобы исправить адрес электронной почты
2. На самом деле, nvm-[from_email] должен был быть переменной, а не строкой, как вы советовали. Это работает! Как вы думаете, это может быть проблемой, поскольку мой почтовый узел, пароль и секретный ключ находятся в переменных среды, которые будут развернуты в AWS? Или мне нужно внести какие-либо дополнительные изменения в настройки во время развертывания?
3.
from_email
это переменная .. посмотрите внимательно.4. Вы можете сохранить настройки как переменные среды, или вы можете сохранить их в отдельном файле, к которому никто не сможет получить доступ.