0

私はPythonでMIMEエンコードされた電子メールを構築していますが、AmazonのSESでエンコードされたMIMEと同じ電子メールと違いが出てきます。電子メールで印刷可能なエンコーディングが混乱しています

私はutf-8とquoted-printableを使ってエンコードしています。文字 "A" の場合

(つまり、文字 "A" 上に小さな丸付きです)、私のエンコーディングが

= E5

を生成し、他のエンコーディングが

を生成

= C3 = A5

彼らの両方が見えるO私のGmailのk、しかし私はそれが奇妙なエンコーディングが異なることがわかります。これらの権利の1つと他の1つは何らかの形で間違っていますか?

以下は私の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

utf-8ではなくiso-8859-1でエンコードされたテキストを入力したようです。 – ArturFH

答えて

1

[OK]を、私は、アルトゥールさんのコメントのおかげでこれを理解することができました。

文字のutf-8エンコーディングは2バイトであり、1バイトではないので、2つの引用符で囲まれた印字可能なエンコーディングを参照する必要があります(AWS SESエンコーディングは正しくありません)。

utf-8ではなく、unicodeのテキストを送信していました。 Gmailがユニコードをサポートしているので、うまくいきました。

私の質問では、私は手動でutf-8としてテキストをエンコードする必要があります。私はMIMETextが私のためにそれをすると思っていたが、そうではない。

+0

[Unicodeはエンコーディングではなく文字セットです](https://stackoverflow.com/a/13212528/1695906)、@ArturFHと一致するので、エンコーディングは実際は[ISO-8859-1](https ://en.m.wikipedia.org/wiki/ISO/IEC_8859-1)(aka * Latin1 *)、 "Unicode"ではありません。 [* "ISO-8859-1(Unicodeの最初の256文字)の報告書は、UTF-8(すべてのUnicode文字)の適切なサブセットですが、U + 0080〜U + 00FF 'は2つのエンコーディングで異なってエンコードされます。" *(https://stackoverflow.com/a/10021934/1695906) –

関連する問題