Django 不使用 mail.ru 的 SMTP 服务器发送电子邮件

问题描述 投票:0回答:1

我面临着在 Django 上发送电子邮件的问题。我认为我的设置、视图和模型是正确的,但尽管如此,邮件仍未发送。当我在控制台上尝试时没有问题

Django 版本 == 4.2.1 Python版本==3.10

设置.py:

`EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = 'smtp.mail.ru'
EMAIL_PORT = 465
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = '*****'
EMAIL_USE_SSL = True`

models.py:

`class EmailVerification(models.Model):
    code = models.UUIDField(unique=True)
    user = models.ForeignKey(to=User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    expiration = models.DateTimeField()

    def __str__(self):
        return f'Email verification for user {self.user.email}'

    def send_verification_email(self):
        link = reverse('users:email_verification', kwargs={'email': self.user.email, 'code': self.code})
        verification_link = f'{settings.DOMAIN_NAME}{link}'
        subject = f'Verification for {self.user.username}'
        message = f'Click to the link to verify your account {self.user.email} {verification_link} '
        send_mail(
            subject=subject,
            message=message,
            from_email=settings.EMAIL_HOST_USER,
            recipient_list=[self.user.email],
            fail_silently=False
        )

    def is_expired(self):
        return True if now() >= self.expiration else False`

views.py:

`class EmailVerificationView(TemplateView):

    template_name = 'users/email_verification.html'

    def get(self, request, *args, **kwargs):
        code = kwargs['code']
        user = User.objects.get(email=kwargs['email'])
        email_verifications = EmailVerification.objects.filter(user=user, code=code)

        if email_verifications.exists() and not email_verifications.first().is_expired():
            user.is_verified_email = True
            user.save()
            return super(EmailVerificationView, self).get(request, *args, **kwargs)
        else:
            return HttpResponseRedirect(reverse('index'))`

forms.py:

`    def save(self, commit=True):
        user = super(UserRegistrationForm, self).save(commit=True)
        expiration = now() + timedelta(hours=48)
        record = EmailVerification.objects.create(code=uuid.uuid4(), user=user, expiration=expiration)`

造成这个问题的核心是什么?有什么办法解决这个问题吗?谢谢

python django email smtp
1个回答
0
投票

尝试打印发送邮件的结果并检查错误消息。

response = send_mail(
            subject=subject,
            message=message,
            from_email=settings.EMAIL_HOST_USER,
            recipient_list=[self.user.email],
            fail_silently=False
        )
print(response)
© www.soinside.com 2019 - 2024. All rights reserved.