Python 3 smtplib send mit Unicode-Zeichen

8

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?

    
foosion 15.09.2009, 19:22
quelle

3 Antworten

11

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:

%Vor%

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).

    
Alex Martelli 16.09.2009, 02:00
quelle
2

_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 .

    
SilentGhost 15.09.2009 19:39
quelle
1

Gus Mueller hatte ein ähnliches Problem: Ссылка

    
Paul D. Waite 14.02.2010 21:12
quelle