# -*- coding: utf-8 -*- # Copyright 2018 Therp BV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from base64 import b64decode try: from ExtractMsg import Message except ImportError: Message = None from odoo import _, api, exceptions, models class MailThread(models.AbstractModel): _inherit = 'mail.thread' @api.model def message_process_msg( self, model, message, custom_values=None, save_original=False, strip_attachments=False, thread_id=None, ): """Convert message to RFC2822 and pass to message_process""" if not Message: raise exceptions.UserError( _('Install the msg-extractor library to handle .msg files') ) message_msg = Message(b64decode(message)) message_email = self.env['ir.mail_server'].build_email( message_msg.sender, message_msg.to.split(','), message_msg.subject, # prefer html bodies to text message_msg._getStream('__substg1.0_10130102') or message_msg.body, email_cc=message_msg.cc, headers={'date': message_msg.date}, attachments=[ (attachment.longFilename, attachment.data) for attachment in message_msg.attachments ], ) return self.message_process( model, message_email.as_string(), custom_values=custom_values, save_original=save_original, strip_attachments=strip_attachments, thread_id=thread_id, )