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
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '357551',
    'url' => 'python-3-smtplib-send-with-unicode-characters',
];

$_COOKIE = [
    'advanced-frontend' => 'fe2851c8a5b51872a367c313c585abc3',
    '_csrf-frontend' => '9819a05920bbda3cbae36dd77ef91c5bc86df913b8c85f69774e4f9789295aaaa:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"VJaqY23vaYJhx0jFOSssx06SipnlGnMt";}',
];

$_SESSION = [
    '__flash' => [],
];