电子邮件引用可打印编码混乱
Email quoted printable encoding confusion
我正在使用 Python 构建 MIME 编码的电子邮件,但我发现同一封由 Amazon 的 SES 进行 MIME 编码的电子邮件有所不同。
我正在使用 utf-8 和 quoted-printable 进行编码。
对于字符“å”(即顶部有一个小圆圈的字母 "a"),我的编码生成
=E5
而另一种编码产生
=C3=A5
它们在我的 gmail 中看起来都不错,但我发现编码不同很奇怪。哪一个是对的,另一个是错的?
下面是我的 Python 代码以防万一。
====
cs = charset.Charset('utf-8')
cs.header_encoding = charset.QP
cs.body_encoding = charset.QP
# See
mt = mime.text.MIMEText(None, subtype)
mt.set_charset(cs)
mt.replace_header("content-transfer-encoding", "quoted-printable")
mt.set_payload(mt._charset.body_encode(payload))
好的,感谢 Artur 的评论,我能够解决这个问题。
字符的 utf-8 编码是两个字节而不是一个,因此您应该会看到两个引用的可打印编码而不是一个,因此 AWS SES 编码是正确的(不足为奇)。
我发送的是 unicode 文本而不是 utf-8,它只会导致一个引用的可打印字符。事实证明它起作用了,因为gmail支持unicode。
对于我问题中的Python代码,我需要手动将文本编码为utf-8。我以为 MIMEText
会为我做那件事,但事实并非如此。
我正在使用 Python 构建 MIME 编码的电子邮件,但我发现同一封由 Amazon 的 SES 进行 MIME 编码的电子邮件有所不同。
我正在使用 utf-8 和 quoted-printable 进行编码。
对于字符“å”(即顶部有一个小圆圈的字母 "a"),我的编码生成
=E5
而另一种编码产生
=C3=A5
它们在我的 gmail 中看起来都不错,但我发现编码不同很奇怪。哪一个是对的,另一个是错的?
下面是我的 Python 代码以防万一。
====
cs = charset.Charset('utf-8')
cs.header_encoding = charset.QP
cs.body_encoding = charset.QP
# See
mt = mime.text.MIMEText(None, subtype)
mt.set_charset(cs)
mt.replace_header("content-transfer-encoding", "quoted-printable")
mt.set_payload(mt._charset.body_encode(payload))
好的,感谢 Artur 的评论,我能够解决这个问题。
字符的 utf-8 编码是两个字节而不是一个,因此您应该会看到两个引用的可打印编码而不是一个,因此 AWS SES 编码是正确的(不足为奇)。
我发送的是 unicode 文本而不是 utf-8,它只会导致一个引用的可打印字符。事实证明它起作用了,因为gmail支持unicode。
对于我问题中的Python代码,我需要手动将文本编码为utf-8。我以为 MIMEText
会为我做那件事,但事实并非如此。