2013-04-16 1 views
0

Поскольку я having problems с функцией электронной почты стандартного GAE, когда электронная почта является предметом UTF-8 кодируются, я пытаюсь справиться с этим вручную:Как разобрать исходящий адрес GAE вручную?

msg_encoding = self.request.headers['Content-Type'].split('charset=')[1] # message/rfc822; charset=UTF-8 
msg = email.message_from_string(self.request.body) 
if msg: 
    logging.debug(msg.get_content_charset()) # None 
    logging.debug(msg['to']) 
    logging.debug(msg['from']) 
    logging.debug(msg['Subject'].decode(msg_encoding)) 

ли я сделать это правильно? Должен ли я расшифровать тему? Или это делается парсером электронной почты автоматически?

ответ

2

Следующая упрощенный код (текст/равнину только, без вложений) хорошо работает для меня:

class InboundMailHandler(InboundMailHandler): 
    def post(self): 
     msg = email.message_from_string(self.request.body) 
     if msg: 
      charset = 'utf-8' 
      from_realname, from_emailaddr = email.utils.parseaddr(msg['from']) 
      to_realname, to_emailaddr = email.utils.parseaddr(msg['to']) 
      # parse e-mail body, look for text/plain part only 
      body = '' 
      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(part.get_content_charset()) 
      else: 
       body = msg.get_payload(decode=True) 
       body = body.decode('utf-8') 
      subject, encoding = email.header.decode_header(msg['subject'])[0] 
      if encoding != None: 
       subject = subject.decode(encoding) 
      else: 
       subject = subject.decode('utf-8') 
+0

Как мы можем справиться с ситуацией, когда вложение там? Я не могу расшифровать приложение. Мое намерение заключается в загрузке почтового приложения в blobstore. Можете ли вы помочь мне в выполнении этой работы ?. Заранее спасибо. – sufinsha

+0

@sufinsha, я думал о сохранении вложений в blobstore, но еще не закодировал его, поэтому не могу помочь вам здесь ... –