影响 PowerEmail for OpenERP 0.6.3及以下版本. 听说 0.7 版本已修正...
解决方案由 广州-hugo(150672834) 提供. mrshelly做相关整理
poweremail_core.py 文件
save_header
save_fullmail
complete_mail
三个方法中. 对于 vals['pem_from'], vals['pem_to'], vals['pem_subject'] 三个值做处理
其中 vals['pem_from'] vals['pem_to'] 使用 email.utils.parseaddr() 方法处理, 并获取出里面的邮件地址回存.
相关代码:
<br />....<br /> 'pem_from':email.utils.parseaddr(mail['From'])[1],<br /> 'pem_to':email.utils.parseaddr(mail['To'])[1] or 'no recepient',<br />....<br />
vals['pem_subject'] 则将 Quoted Printable 格式转成正常的 unicode 串.
相关代码:
<br />....<br /> h = email.Header.Header(mail['subject']) <br /> dh = email.Header.decode_header(h) <br /> subject = dh[0][0]<br />....<br />....<br /> 'pem_subject':subject,<br />....<br />
get_payloads
这个方法中, 主要在处理 multipart 的附加内容时 没有进行 Quoted Printable -->Unicode String 的转换. 所以 转换后. 附件就处理正常了.
相关代码:
<br />....<br /> for part in mail.walk():<br /> mail_part_type = part.get_content_type()<br /> if mail_part_type == 'text/plain':<br /> parsed_mail['text'] = tools.ustr(part.get_payload(decode=True))<br /> elif mail_part_type == 'text/html':<br /> parsed_mail['html'] = tools.ustr(part.get_payload(decode=True))<br /> elif not mail_part_type.startswith('multipart'):<br /> parsed_mail['attachments'].append((mail_part_type, tools.ustr(email.Header.decode_header(part.get_filename())[0][0]), part.get_payload(decode=True)))<br /> return parsed_mail<br />....<br />