Не удалось отправить электронное письмо в django rest framework - PullRequest
1 голос
/ 11 марта 2020

Я разрабатываю часть проекта для сброса пароля. Я использую django_rest_passwordreset для восстановления пароля. Я использую mailjet smtp. Я не смог отправить электронное письмо пользователю.

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'in-v3.mailjet.com'
# EMAIL_PORT = 465
EMAIL_PORT = 587
EMAIL_USE_TLS = True
# EMAIL_USE_SSL = True
EMAIL_HOST_USER = '5e4329460b3c88f1d24d19c3e7374548aa213da%asasd1asd'
EMAIL_HOST_PASSWORD = 'a6c5ab2515d6ae761253a396453530ba$42asasdasdaasdasd'

Если я изменил EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' на EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend', он печатает его на консоль. Я понятия не имею, почему он не работает.

часть кода, где я пытаюсь отправить электронное письмо.

@receiver(reset_password_token_created)
def password_reset_token_created(sender, instance, reset_password_token, *args, **kwargs):
    # send an e-mail to the user
    context = {
        'current_user': reset_password_token.user,
        'username': reset_password_token.user.firstname,
        'email': reset_password_token.user.email,
        'reset_password_url': "{}?token={}".format(reverse('password_reset:reset-password-request'), reset_password_token.key)
    }
    # just checking if it works
    send_mail('Hello from something', 'hello there', 'abdukhashimov@yandex.ru',
              [reset_password_token.user.email, ], fail_silently=False)
    # render email text
    email_html_message = render_to_string('user_reset_password.html', context)
    email_plaintext_message = render_to_string(
        'user_reset_password.txt', context)

    msg = EmailMultiAlternatives(
        # title:
        "Password Reset for {title}".format(title="Some website title"),
        # message:
        email_plaintext_message,
        # from:
        "noreply@somehost.local",
        # to:
        [reset_password_token.user.email]
    )
    msg.attach_alternative(email_html_message, "text/html")
    msg.send()

1 Ответ

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

Я придумал другое решение. Я использовал службу SMTP Google. Я следовал инструкциям на этом kinsta.com - шагам по настройке google smtp .

Step1: Самое первое, что вам нужно сделать, это убедиться, что В вашей основной учетной записи Gmail включена двухэтапная проверка. Важное замечание: Если вы этого не сделаете, вы получите ошибку неверного пароля ниже при попытке аутентификации вашего адреса электронной почты. Итак, сначала go и включите двухэтапную проверку.

Step2: Затем вам нужно будет сгенерировать пароль приложения. Затем вы используете пароль приложения вместо вашего личного пароля Gmail, который приведен ниже. Это единственный способ, которым этот процесс будет работать.

Шаг 3: Теперь вернитесь в Gmail, go к настройкам и можете нажать «Учетные записи и импорт». Затем нажмите «Добавить другой адрес вашей электронной почты». В основном в Gmail и войдите в свою учетную запись и go в настройках.

Шаг 4: Введите свое дополнительное фирменное наименование и служебную электронную почту, которые находятся в настраиваемом домене.

An image from kinsta.com showing how to add another email account (дополнительная информация). Я обычно пользуюсь почтой яндекса и добавляю ее, после чего генерируются следующие данные:

My generated information

Step5: Затем будет отправлено подтверждение по электронной почте код для письма, которое вы только что добавили. Вам нужно будет щелкнуть ссылку в письме, чтобы подтвердить его, или вручную ввести код (это доказывает, что вы на самом деле являетесь владельцем дополнительной учетной записи электронной почты). И это все!

Исходя из моего опыта, вам может понадобиться настроить некоторые параметры из Google, если он не работает для вас. Например, я читаю из другого источника, вам может понадобиться разрешить менее безопасные приложения от Google. Я не сделал этого, как я использовал почту Яндекса, я думаю.

В случае, если вы не уверены, что положить в settings.py

EMAIL_HOST = 'smtp.yandex.ru' # in my case
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'added account'
EMAIL_HOST_PASSWORD = 'your password'

Кредиты на Кинста .com

...