Ich habe ein Problem beim Versenden von Unicode-Zeichen mit smtplib in Python 3. Das scheitert in 3.1.1, funktioniert aber in 2.5.4:
%Vor%Ich habe ein Beispiel aus der Dokumentation ausprobiert, das ebenfalls fehlgeschlagen ist. Ссылка , das Beispiel zum Senden des Inhalts eines Verzeichnisses als MIME-Nachricht
Irgendwelche Vorschläge?
Der Schlüssel befindet sich in den Dokumenten :
%Vor%Eine Unterklasse von MIMENonMultipart, der Die MIMEText-Klasse wird zum Erstellen von MIME verwendet Objekte des Haupttyps Text. _text ist die Zeichenfolge für die Nutzlast. _subtype ist der Minor-Typ und der Standardwert ist einfach. _charset ist der Zeichensatz des Textes und wird als a weitergegeben Parameter zum MIMENonMultipart Konstrukteur; es ist standardmäßig us-ascii. Es wird kein Raten oder Kodieren durchgeführt auf den Textdaten.
Was Sie also brauchen, ist klar, nicht msg = MIMEText('€10')
, sondern:
Obwohl dies nicht alles klar dokumentiert ist, braucht sendmail eine Byte-Zeichenfolge, keine Unicode-Eins (das ist, was das SMTP-Protokoll angibt); schau dir an, wie msg.as_string()
für jede der zwei Möglichkeiten aussieht, es zu erstellen - angesichts des "Kein Ratens oder Encodierens" hat dein Weg immer noch diesen Euro-Charakter drin (und keine Möglichkeit für sendmail, ihn in eine Bytestring zu verwandeln) meins nicht (und utf-8 ist eindeutig überall angegeben).
_charset
Parameter von MIMEText
wird standardmäßig auf us-ascii
entsprechend der Dokumente . Da €
nicht von us-ascii gesetzt ist, funktioniert es nicht.
Beispiel in den Dokumenten, die Sie ausprobiert haben, sagt deutlich:
Nehmen Sie in diesem Beispiel an, dass die Textdatei nur ASCII-Zeichen enthält.
Sie können die Methode .get_charset
auf Ihrem Computer verwenden Nachricht, um den Zeichensatz zu untersuchen, gibt es übrigens auch .set_charset
.
Tags und Links python unicode python-3.x email smtplib