问题描述
代码:
运行结果:
从上面两张图可以发现问题所在,就是邮件里的HTML标签被当成了字符串了!
解决方法
def send_email(email, request):
subject = '个人博客找回密码'
user = UserProfile.objects.filter(email=email)[0]
ran_code = uuid.uuid4() # 产生随机的码
ran_code = str(ran_code).replace('-', '')
request.session[ran_code] = user.id # 将随机码与用户关联起来,用随机码获取用户
html_message = f"<p>可爱的用户:</p> 您好!此链接用于用户找回密码,请点击链接:" \
f"<a href='http://127.0.0.1:8000/retrieve_pwd?code={ran_code}'>找回密码</a>,<br/>" \
f"如果链接不能点击,请复制:http://127.0.0.1:8000/retrieve_pwd?code={ran_code}<br/>" \
f"个人博客团队"
message = '''
可爱的用户:
您好!此链接用于用户找回密码,请点击链接:<a href='http://127.0.0.1:8000/retrieve_pwd?code=%s'>找回密码</a>,
如果链接不能点击,请复制:http://127.0.0.1:8000/retrieve_pwd?code=%s
个人博客团队
''' % (ran_code, ran_code)
result = send_mail(subject, '', EMAIL_HOST_USER, [email, ], html_message=html_message)
# result = send_mail(subject, message, EMAIL_HOST_USER, [email, ], html_message=html_message)
return result
我第一次用message发送的邮件,出现上述问题!因为在Python中三引号可以保存字符串的排版格式,所以我图省事就用它了!但是不行,在含有HTML标签时我们应该用html_message定义邮件内容,用单引号或双引号,并且在send_mail函数的第二个参数写
''
就行了,在最后让html_message=html_message
就行了!
其实大家可以检查send_mail的底层代码会发现有个
html_message
的参数
def send_mail(subject, message, from_email, recipient_list,
fail_silently=False, auth_user=None, auth_password=None,
connection=None, html_message=None):
connection = connection or get_connection(
username=auth_user,
password=auth_password,
fail_silently=fail_silently,
)
mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)
if html_message:
mail.attach_alternative(html_message, 'text/html')
return mail.send()