Форма 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 и добавить пароль приложения и использовать эту почту для отправки писем. Здесь вы можете найти, как это сделать.

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