好吧,我想这是我在 Stack Overflow 上的第一个答案。
找到这篇文章后,我继续尝试寻找解决方案,并在这里找到了它:https://github.com/foo290/Django-Verify-Email/issues/6#issuecomment-782689288
虽然该帖子确实具有启发性,但简单地复制粘贴代码是行不通的。所以这就是我所做的详细说明。
首先你需要扩展类:
from django.template.loader import render_to_string
from django.core.mail import send_mail
from django.core.mail import BadHeaderError
from smtplib import SMTPException
from django.utils.html import strip_tags
class VerifyEmail(_VerifyEmail):
def send_verification_link(self, request, user):
try:
useremail = user.email
verification_url = self.token_manager.generate_link(request, user, useremail)
subject = self.settings.get("subject")
msg = render_to_string(
self.settings.get("html_message_template", raise_exception=True),
{"link": verification_url},
)
try:
send_mail(
subject,
strip_tags(msg),
from_email=self.settings.get("from_alias"),
recipient_list=[useremail],
html_message=msg,
)
return user
except (BadHeaderError, SMTPException):
# user.delete()
return False
except Exception as error:
# user.delete()
if self.settings.get("debug_settings"):
raise Exception(error)
如您所见,该方法需要一个请求对象。这实际上是必不可少的,因为它用于生成链接。最快的方法是实际创建一个视图。以下示例或多或少是我需要的页面 - 我必须找到一种方法来验证和激活所有尚未激活的用户(在此之前我们根本没有激活它们),所以脚本所做的是循环所有标记为非活动的用户对象并发送验证电子邮件:
from django.views import View
from VerifyEmail import VerifyEmail
from django.http import HttpResponse, HttpResponseForbidden
class VerifyInactiveUsersSender(View):
def get(self, request):
if(request.user.is_staff or request.user.is_superuser):
inactive_users = User.objects.filter(is_active=False)
for u in inactive_users:
inactive_user = VerifyEmail().send_verification_link(request, u)
return HttpResponse("Go check")
else:
return HttpResponseForbidden()
鉴于此代码会向我需要添加安全检查 if(request.user.is_staff or request.user.is_superuser): 的所有非活动帐户发送一封电子邮件,但这对于简单地创建一个用户可以获得第二封电子邮件的表单来说根本不需要。希望这对任何人都有帮助。