Django - электронное письмо не отправлено, но его объект создан в БД - PullRequest
0 голосов
/ 23 марта 2020

Когда я пытаюсь отправить электронное письмо через django, я замечаю, что объект электронной почты создан, и все поля (электронная почта, заголовок, тело) находятся в нем, но фактическое электронное письмо не отправляется. Когда я проверяю журналы сельдерея, я вижу следующее сообщение:

SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted.
Learn more `at\n5.7.8  https://support.google.com/mail/?p=BadCredentials` 

, но я на 100% уверен, что использую правильные учетные данные, и мой почтовый ящик не защищен двухфакторной аутентификацией

Код в

settings.py

EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_USE_SSL = False
EMAIL_PORT = 587
EMAIL_HOST_USER = '*******@gmail.com' # my email, I'm sure it's correct
EMAIL_HOST_PASSWORD = '********' # my password, I'm sure it's correct

Код в

views.py

( контактная форма, где я собираю необходимую информацию - электронная почта, название, тело)

class ContactUs(CreateView):
    template_name = 'my_profile.html'
    queryset = Contact.objects.all()
    fields = ('email', 'title', 'body')
    success_url = reverse_lazy('index')

    def form_valid(self, form):
        response = super().form_valid(form)

        message = form.cleaned_data.get('body')
        subject = form.cleaned_data.get('title')
        email_from = form.cleaned_data.get('email')
        recipient_list = [settings.EMAIL_HOST_USER, ]

        send_email_async.delay(subject, message, email_from, recipient_list)

        return response

Код в

tasks.py

(для сельдерея)

@shared_task()
def send_email_async(subject, message, email_from, recipient_list):
    send_mail(subject, message, email_from, recipient_list, fail_silently=False)

но это не имеет значения, если это сельдерей или нет - электронная почта не отправляется сама, но я вижу объект этого письма в моем Postgres DB

Django версия 2.2.10

1 Ответ

1 голос
/ 23 марта 2020

Вы установили консольный бэкэнд, который просто записывает электронные письма на консоль:

EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"

Вам необходимо использовать бэкэнд smtp:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
...