Django发送带有HTML标签的邮件不能正常显示

18 篇文章 1 订阅
14 篇文章 1 订阅

问题描述


代码:
代码图片
运行结果:
显示图片

从上面两张图可以发现问题所在,就是邮件里的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>&emsp;您好!此链接用于用户找回密码,请点击链接:" \
                   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()

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值