2013-04-15 2 views
0

я отправить сообщение с моего счета Google на мой GAE электронной почты:Как регистрировать данные электронной почты в консоли администратора AppEngine?

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

Затем используйте следующий код:

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

В результате я вижу следующее в консоли:

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

Т.е. предмет доступен для чтения, но тело - нет.

Когда я проверяю, что я получаю, я вижу следующее:

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 

Если я:

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

затем тело сообщения отображается правильно. Но как я должен извлечь кодировку?

ответ

0

В результате, я использовал следующее решение:

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

и для того, чтобы отобразить текст на русском языке правильно в консоли администратора разработчика (под 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) 
Смежные вопросы