Django注册邮箱验证:如何发送带超链接的验证邮件
解决Django邮箱验证链接无法正常显示的问题
你的代码存在两个关键问题,导致超链接无法正确渲染:
字符串格式化未生效
html.format(link=verify_link)执行后没有将结果重新赋值给html变量——Python字符串是不可变类型,格式化操作会返回新字符串,原变量不会自动更新。未发送HTML格式邮件
Django的send_mail默认发送纯文本邮件,HTML标签会被当作普通文本显示,必须通过html_message参数传递HTML内容,同时保留纯文本版本作为兼容 fallback。
修正后的代码如下:
from django.core.mail import send_mail from django.conf import settings def send_email_verification_mail(email, first_name, verify_link, exp): # 完成字符串格式化并赋值 html = f""" <a href="{verify_link}">Click to verify</a> """ subject = 'Your accounts need to be verified' # 纯文本版本(供不支持HTML的邮箱客户端) plain_message = f'Hi {first_name.capitalize()},\n\nClick on the link to verify your account \n \n{verify_link}\n \nThis link will expire in {exp}' # HTML版本 html_message = f'Hi {first_name.capitalize()},<br><br>Click on the link to verify your account <br><br>{html}<br><br>This link will expire in {exp}' email_from = settings.EMAIL_HOST_USER recipient_list = [email] # 传递html_message参数发送HTML邮件 send_mail(subject, plain_message, email_from, recipient_list, html_message=html_message) return True
额外说明
- 同时提供纯文本和HTML版本,能兼容所有邮箱客户端,避免部分客户端无法显示HTML内容的情况。
- 若邮件内容复杂,建议使用Django模板系统加载模板文件渲染,比直接拼接字符串更易维护。
内容的提问来源于stack exchange,提问作者Nikhil V
相关产品推荐
相关产品推荐

