Как правильно настроить Gmail для отправки электронной почты с помощью Django. Официальная конфигурация не работает для меня
Я готовлю онлайн-портфолио, сделанное на Django, и одной из функций является форма, с помощью которой вы можете связаться со мной по E-mail. Чтобы убедиться, что эта функциональность работает правильно, я тестировал ее с MailTrap и она отлично работает, теперь для производственной версии я хочу, чтобы письма попадали на мою почту Gmail, но несмотря на то, что в теории я выполнил все шаги, у меня ничего не получилось, это сработало только с MailTrap
В моем аккаунте Gmail я уже активировал двухэтапную проверку и создал специальный пароль для приложения. Опция пониженной безопасности, очевидно, не существует с мая этого года.
Вот конфигурация моего Settings.py:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "my-e-mail@gmail.com"
EMAIL_HOST_PASSWORD = 'smbumqjiurmqrywn'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Этот пароль - просто пример, он просто показывает, как он устанавливается.
А это метод для отправки E-mail. Я использую EmailMessage, но с send_mail результат тот же:
def contact(request):
contact_form = ContactForm()
if request.method == 'POST':
contact_form = ContactForm(data = request.POST)
if contact_form.is_valid():
name = request.POST.get('name', '')
email = request.POST.get('email', '')
content = request.POST.get('content', '')
# Send E-mail.
email = EmailMessage(
'New message from {} <{}>'.format(name, email),
'From {} <{}>\n\nWrote:\n\n{}'.format(name, email, content),
email,
[settings.EMAIL_HOST],
reply_to = [email]
)
try:
# E-mail OK.
email.send()
return redirect(reverse('contact') + '?OK')
except:
# E-mail FAIL.
return redirect(reverse('contact') + '?FAIL')
return render(request, 'core/contact.html', {'form' : contact_form})
Как я уже сказал, если я изменю учетные данные в Settings.py на MailTrap, он работает без изменения чего-либо еще, но Gmail не работает, и я не знаю, в чем может быть проблема.
В конце метода я поместил email.send() в попытку, чтобы легче было понять, когда это не удалось, а когда нет, с конфигурацией Gmail он всегда вводит except.
Я несколько раз заходил в раздел, где создаются специальные пароли в моем аккаунте Gmail после попытки отправить E-mail и часть, где написано "Последнее использование" пуста, я не знаю, связано ли это с проблемой.