为什么我的django应用无法将电子邮件发送给注册用户?

时间:2019-03-21 06:23:40

标签: django gmail django-admin

我正在尝试向用户发送包含邀请/确认链接的电子邮件。命令提示符显示正在发送电子邮件,但用户未收到任何电子邮件。我正在使用我的gmail帐户,还允许不安全的应用程序对其进行访问帐户?可能是什么错误? 这是我的设置文件:-

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

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'someone@gmail.com'
EMAIL_HOST_PASSWORD = 'password'

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

我认为它有用的时候如下:-

@csrf_protect
def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            mail_subject = 'Activate your blog account.'
            message = render_to_string('acc_active_email.html', {
            'user': user,
            'domain': current_site.domain,
            'uid':urlsafe_base64_encode(force_bytes(user.pk)).decode(),
            'token':account_activation_token.make_token(user),
        })
            to_email = form.cleaned_data.get('email')
            email = EmailMessage(
                    mail_subject, message, to=[to_email]
        )
            email.send()
            return JsonResponse({'success':True})
   else:
        form=SignupForm()
    return JsonResponse({'errors': [(k, v[0]) for k, v in form.errors.items()]})

奇怪的是,我的控制台正在显示电子邮件,但目标用户没有收到该电子邮件。

enter image description here

1 个答案:

答案 0 :(得分:1)

罪魁祸首是您的配置这一行:

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

来自django documentation on console.EmailBackend

     
    

控制台后端不发送真实的电子邮件,而只是写     将会发送到标准输出的电子邮件。

  

如果您要发送真实的电子邮件,请选择合适的后端。由于您似乎正在尝试使用smtp,因此您最可能想使用django的smtp.EmailBackend,如下所示:

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