【问题标题】:django - gmail shows the raw html of an email (ie the tag)django - gmail 显示电子邮件的原始 html(即标签)
【发布时间】:2012-09-28 01:44:46
【问题描述】:

我正在使用 django 辅助方法 send_mail,这可能是问题所在,但我无法从文档中判断是否是这种情况。

所以 - 这是我的方法:

send_mail('Alert!', theEmail.format(user.username),'admin@site.com',
        [user.email], fail_silently=False)

电子邮件看起来像这样:

电子邮件 = """ 嗨{0}!
这是一封提醒电子邮件
这是一个链接:时间链接

但是当我运行此代码时,电子邮件发送正常 - 但在 gmail 中,消息打印时所有标签都可见。

我是否打算做某种“以 html 格式发送”的事情?

【问题讨论】:

    标签: django


    【解决方案1】:

    尝试类似:

    from django.core.mail import EmailMessage
    
    msg = EmailMessage(subject, html, from_email, [recipients])
    msg.content_subtype = 'html'
    msg.send()
    

    【讨论】:

    • 根据文档:(docs.djangoproject.com/en/1.11/topics/email/…),我们必须在调用 EmailMessage() 时发送 4 个参数,第三个是 from_email。我不知道这是否有必要,但由于某种原因我收到了错误。也许这会对某人有所帮助。
    【解决方案2】:

    您可以在发送之前使用一些 Django 的内置函数来转义 html 字符串(也许 gmail 会自己进行一些转义/取消转义),例如:

    from django.utils.safestring import mark_for_escaping
    my_html = mark_for_escaping(my_raw_html)
    

    from django.utils.safestring import mark_safe
    my_html = mark_safe(my_raw_html)
    

    send_mail 不支持“以 html 格式发送”之类的功能。

    【讨论】:

    • +1 用于字符串转义,但它并没有解决我遇到的问题。
    【解决方案3】:

    尝试使用html_message 参数:

    send_mail('Alert!', '', 'admin@site.com', [user.email], html_message=theEmail.format(user.username), fail_silently=False)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多