Форма Django отправляет письма в консоль, но не в мой почтовый ящик
Я получаю некоторую практику в использовании Django и теперь я застрял, пытаясь заставить контактную форму работать.
Я пытаюсь сделать следующее: после нажатия кнопки "Submit" я должен получить данные формы в электронном письме, приходящем на адрес электронной почты, связанный с моим сайтом. Вместо этого происходит следующее: как только я нажимаю на кнопку "Submit", страница загружается некоторое время и в конце я получаю ошибку SMTPServerDisconnected.
Можете ли вы сказать мне, сделал ли я ошибку в написании логики или это проблема, которую я должен решить с моим хостингом?
Это forms.py:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(label='Your name', max_length=200,
widget=forms.TextInput(attrs={'class': 'form-control', 'id': 'name'}))
from_email = forms.EmailField(label='Your email', max_length=200, widget=forms.TextInput(
attrs={'class': 'form-control', 'id': 'email'}))
subject = forms.CharField(label='Enter a subject', max_length=200,
widget=forms.TextInput(attrs={'class': 'form-control', 'id': 'subject'}))
message = forms.CharField(label='Write here your message', max_length=500,
widget=forms.TextInput(attrs={'class': 'form-control', 'id': 'message'}))
Вот view.py (я заменил каждый адрес на фиктивные адреса):
def home(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
body = {
'first_name': form.cleaned_data['name'],
'email_from': form.cleaned_data['from_email'],
'message': form.cleaned_data['message'],
}
message = "\n".join(body.values())
try:
send_mail(subject, message, 'example@example.com',
['mydomainemail@example.net'], fail_silently=True)
except BadHeaderError:
return HttpResponse('Invalid header found')
form = ContactForm()
return render(request, 'index.html', {'form': form})
А это settings.py:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'mail.mydomain.net'
EMAIL_PORT = SmtpPort
EMAIL_HOST_USER = 'mydomainemail@example.net'
EMAIL_HOST_PASSWORD = 'my email password'
Я попытался посмотреть, работает ли в терминале VS Code форма, и поэтому я заменил
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
с
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
и это работает.
Так что я попытался заменить EMAIL_PORT на IMAP PORT и POP3 PORT, но ничего не произошло.
Одной из причин, почему это не работает, является то, что многие почтовые провайдеры используют двухступенчатую аутентификацию. В моем случае проблема была в outlook. Я предлагаю создать учетную запись gmail и добавить пароль приложения и использовать эту почту для отправки писем. Здесь вы можете найти, как это сделать.