电子邮件引用可打印编码混淆

时间:2017-06-18 22:18:35

标签: python email character-encoding amazon-ses quoted-printable

我正在使用Python构建MIME编码的电子邮件,而且我对使用亚马逊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 https://stackoverflow.com/a/16792713/136598
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))

1 个答案:

答案 0 :(得分:1)

好的,由于阿图尔的评论,我能够弄清楚这一点。

字符的utf-8编码是两个字节而不是一个,所以你应该看到两个引用的可打印编码,而不是一个,所以AWS SES编码是正确的(毫不奇怪)。

我发送的是unicode文本而不是utf-8,这只会导致一个引用的可打印字符。事实证明它有效,因为gmail支持unicode。

对于我的问题中的Python代码,我需要手动将文本编码为utf-8。我当时认为foreach( get_categories(['hide_empty' => false]) as $category) { $image = do_shortcode('[wp_custom_image_category onlysrc="false" size="full" term_id="'.$category->term_id.'" ]'); echo $image.'<br/>'; // $id = 4; $options['template'] = '[terms] <div class="col-sm-3 news-cat-links" id="[term_id]"> <a href="[term_link]">[term_name]</a><img src="'.$image.'" /></a> </div>[/terms]'; } 会为我做这件事,但事实并非如此。