2013-04-15 3 views
0

J'envoie un message de mon compte Google à mon adresse e-mail GAE:Comment consigner les détails d'un e-mail dans la console d'administration AppEngine?

Content-Type: text/plain; charset=KOI8-R 
Content-Transfer-Encoding: base64 

Ensuite, utilisez le code suivant:

logging.debug('Received personal inbound mail from: %s, to: %s, subject: %s' % (mail_message.sender, mail_message.to, mail_message.subject)) 
body = '' 
for b in mail_message.bodies('text/plain'): 
    body_type, pl = b # content encoding, plain text 
    if pl.encoding: 
     body = pl.payload.decode(pl.encoding) 
    else: 
     body = pl.payload 
if body: 
    logging.debug('Inbound personal mail body: %s' % (body)) 

En conséquence, je vois ce qui suit dans la console:

Received personal inbound mail from: Test <[email protected]>, to: [email protected], subject: Readable russian text 
Inbound personal mail body: ������, ��� �������� ��������� 

Ie le sujet est lisible, mais le corps ne l'est pas.

Quand je vérifie ce que je reçois, je vois ce qui suit:

text/plain, From nobody Mon Apr 15 17:15:34 2013 
content-transfer-encoding: base64 
MIME-Version: 1.0 
Content-Type: text/plain; charset="koi8-r" 

8NLJ18XULCDc1M8g1MXT1M/Xz8Ug08/Pwt3 

Si je fais:

body = pl.payload.decode(pl.encoding).decode('koi8-r') 

alors le corps du message est affiché correctement. Mais comment dois-je extraire l'encodage?

Répondre

0

En conséquence, j'ai utilisé la solution suivante:

if msg.is_multipart(): 
    for part in msg.walk(): 
     if part.get_content_type() and part.get_content_type()=='text/plain': # ignore text/html 
      charset = part.get_content_charset() 
      body = part.get_payload(decode=True).decode(charset) 
else: 
    body = msg.get_payload(decode=True) 
    body = body.decode('utf-8') 

et pour afficher le texte russe correctement dans la console d'administration de développeur (sous Windows 7):

def logging_debug(what): 
    ''' Function to support cp866 encoding in developers admin console 
    ''' 
    if os.environ.get('SERVER_SOFTWARE','').startswith('Devel'): 
     logging.debug(what.encode('cp866')) 
    else: 
     logging.debug(what) 
Questions connexes