- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
从我的 Django 应用程序发送电子邮件时,我正在使用 django.core.mail.EmailMultiAlternatives,以确保在电子邮件客户端不支持 HTML 时邮件降级为文本。
这是我的 send_email 方法:
def send_email(self, from_address, to_list, subject, msg_text, msg_html):
subject=subject.replace('\r','').replace('\n',' ')
self.msg = EmailMultiAlternatives(subject, msg_text, from_address, to_list)
self.msg.attach_alternative(msg_html, "text/html")
self.msg.content_subtype = "html"
self.msg.send()
它适用于 Gmail、Hotmail 和许多其他电子邮件客户端 - 可以毫无问题地显示 HTML 内容。但它不会在 Win2003 上运行的 Outlook 2003 中显示 HTML 内容 - 仅显示文本版本。
如果我强行将 HTML 放入 EmailMultiAlternatives 调用中,即使用 msg_html 而不是 msg
_text,如下所示:
self.msg = EmailMultiAlternatives(subject, msg_html, from_address, to_list)
然后它在所有客户端中都能正常工作;但这意味着对于不支持 HTML 或(更有可能)已禁用对它的支持的客户端,没有文本回退。
我认为值得一提的是,电子邮件是在 Mac OS X 上运行的 django 应用程序上生成的(以防万一它与操作系统之间的行终止符差异有关)。
我看到了 people using other languages outlook也遇到过类似的问题...
我想知道是否有人知道为什么 outlook 的行为会有所不同,是否有可以在我的代码中应用的简单修复?
最佳答案
我没有 Outlook 安装可用于对此进行测试,所以我想知道您函数中第五行的原因。
self.msg.content_subtype = "html"
我不太了解多部分电子邮件的内部结构,但在我的系统上,该行导致邮件的两部分都具有文本/html 的内容类型。将其保留在第一部分会产生一条消息,其中第一部分为“Content-Type:text/plain”,第二部分为“Content-Type:text/html”。
无论如何,关于 Java 的问题的答案之一提到将字符集更改为 iso-8859-1。我认为您应该能够使用 django.core.mail 做到这一点。
EmailMessage 类(EmailMultiAlternatives 从中继承)有一个名为“encoding”的属性,它设置要使用的字符集。默认情况下它是 None 所以使用默认的 utf-8 字符集(除非在设置中被覆盖)。
换句话说,在问题中列出的函数的发送行之前添加如下内容:
self.msg.content_subtype = "iso-8859-1"
不幸的是,这只会改变第一部分指定的编码(上面函数中的 msg_text)。附加替代内容的函数似乎没有使用编码属性。我不确定这是正确的方法,但我将 EmailMultiAlternatives 子类化以覆盖相关函数,它似乎工作正常。
class EmailMultiAlternativesWithEncoding(EmailMultiAlternatives):
def _create_attachment(self, filename, content, mimetype=None):
"""
Converts the filename, content, mimetype triple into a MIME attachment
object. Use self.encoding when handling text attachments.
"""
if mimetype is None:
mimetype, _ = mimetypes.guess_type(filename)
if mimetype is None:
mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
basetype, subtype = mimetype.split('/', 1)
if basetype == 'text':
encoding = self.encoding or settings.DEFAULT_CHARSET
attachment = SafeMIMEText(smart_str(content,
settings.DEFAULT_CHARSET), subtype, encoding)
# original text being replaced above (not last argument)
# attachment = SafeMIMEText(smart_str(content,
# settings.DEFAULT_CHARSET), subtype, settings.DEFAULT_CHARSET)
else:
# Encode non-text attachments with base64.
attachment = MIMEBase(basetype, subtype)
attachment.set_payload(content)
Encoders.encode_base64(attachment)
if filename:
attachment.add_header('Content-Disposition', 'attachment',
filename=filename)
return attachment
我不确定“smart_str(content, settings.DEFAULT_CHARSET)”部分是否也应该引用“encoding”而不是“settings.DEFAULT_CHARSET”,但这是处理文本的消息正文(django.core.mail. EmailMessage.消息)。
正如我所说,我没有 Outlook,所以我无法实际测试 Outlook 方面,但它似乎确实将两个部分的字符集更改为 iso-8859-1。
关于python - Django EmailMultiAlternatives 和 HTML 电子邮件在 Win2003 上的 Outlook 2003 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959985/
以下 Outlook 的命令适用于 Outlook 2010: outlook.exe /c ipm.note /m "&subject=abc" /a "c:\attach.txt" 但它不适用于
我有 2 个电子邮件帐户,一个是 Gmail,另一个是 Outlook。我想在邮件到达时自动将进入 Outlook 的邮件接收到 Gmail。我该怎么做?Outlook 是否存在任何可能阻碍此操作的安
Outlook 加载项如何在邮件上设置 MAPI 属性(例如正文内容),但仅将其保存在本地缓存中(而不发送回 Exchange 服务器)?我见过使用一些加密插件来完成此操作。 我愿意使用几乎任何可以实
有什么方法可以在 Outlook 的模板主题或正文中插入今天的日期吗?这样,每当我打开保存的模板时,今天的日期就会自动显示在主题和正文中。 有什么内置功能吗?像 Date() 这样的东西? 最佳答案
我有一个时事通讯系统,可以跟踪阅读它的人。尽管此功能仅在允许下载图像的情况下才有效。但这不是我现在的问题。 我的问题是,当我在 Outlook (2010) 中打开新闻稿并授予下载图像的权限时,我的系
我需要从 Outlook msg 文件中读取内容。目前我正在使用来自 CodeProject.com 的类(class)项目来实现这一点,因为在服务器上部署 VSTO 和 Outlook 不是一种选择
我正在开发可与共享邮箱一起使用的 Outlook 加载项。目前,office 插件在委托(delegate)场景中不可用,但 MS 已经发布了支持这些场景的预览版本。https://learn.mic
我正在开发可与共享邮箱一起使用的 Outlook 加载项。目前,office 插件在委托(delegate)场景中不可用,但 MS 已经发布了支持这些场景的预览版本。https://learn.mic
我开发了一个运行良好的 Outlook Web 插件。它是一个任务 Pane ,可在约会的组合模式下使用,它收集事件数据、添加一些数据并将其发送到某个地方的 API。 我现在想做的是将经过身份验证的用
在 Outlook for Mac 中,office.js Outlook 加载项在我假设是 Safari Web 控件的任务 Pane 中运行。我无法确定您如何从任务 Pane 中运行的加载项中清除
Marshal.GetActiveObject("Outlook.Application") 在 Outlook 启动并继续运行时抛出 操作不可用(HRESULT 异常:0x800401E3 (MK_
我有一个 VSTO Outlook 2007 加载项。我必须检查 Outlook 是否与交换服务器脱机/联机。我正在使用如下代码: NameSpace ns = Application.GetNam
我正在尝试在图像上方添加文本,如下所示。它适用于除 Outlook 2010、Outlook 2007、Outlook 2013 之外的所有电子邮件客户端。所有这三个客户端都忽略了填充。我到处都试过了
有没有办法处理 Outlook 邮件项中收件人的悬停事件?我想在悬停时显示一个弹出窗口,其中包含有关收件人的一些信息,并想知道是否可以通过 Outlook 加载项实现。 最佳答案 因为 Inspect
我正在尝试在 Outlook 2007 中创建、更新和删除事件(但最好它适用于所有版本)。创建和删除事件工作正常。我关注了 several threads但由于某种原因更新操作失败。 当我双击 ICS
我在 ms Outlook 中有 2 个帐户('user1@test.com' - 默认配置文件,'user2@test.com'),我正在尝试使用非默认帐户通过 python 发送消息。这是我的代码
我有一个我最近继承的Outlook 2007加载项,目前在生产中存在一个问题,有些用户正在周期性地,似乎是随机地禁用其加载项。外接程序中没有日志,并且在外接程序代码中的每个方法/事件调用周围都存在tr
是否可以为 创建 HTML 电子邮件签名? 2003年展望或以上不引用外部图像? 也就是说,使用那些特殊的“cid”引用,但将图像本身嵌入到签名中,而不是嵌入到文件系统或网络中。 这适用于根据用户的各
似乎没有太多信息或任何好的代码示例用于以编程方式设置 Outlook 2007 MailItem 的类别。 MSDN has a limited page ,并提到使用 VB 的 拆分 功能,或多或少
Outlook 2007 在 Outlook 中撰写新邮件时,可以创建指向其他邮件的链接吗? Whww 我正在撰写一封新邮件,我想创建一个指向已发送项目的链接,单击此链接应该会打开邮件。 这能做到吗?
我是一名优秀的程序员,十分优秀!