diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 40824ba5427..76cb942b327 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -447,11 +447,62 @@ class mail_thread(osv.osv): return msgs - def message_catchall(self, cr, uid, message, context=None): - """TODO proper docstring, inspired by messsage_process()""" - # TODO - pass + def _get_user(self, cr, uid, alias, context): + """ + param alias: browse record of alias. + return: int user_id. + """ + user_obj = self.pool.get('res.user') + user_id = 1 + if alias.alias_user_id: + user_id = alias_id.alias_user_id.id + #if user_id not defined in the alias then search related user using name of Email sender + else: + from_email = msg.get('from') + user_ids = user_obj.search(cr, uid, [('name','=',from_email)], context) + if user_ids: + user_id = user_obj.browse(cr, uid, user_ids[0], context).id + return user_id + + def message_catchall(self, cr, uid, message, context=None): + """ + Process incoming mail and call messsage_process using details of the mail.alias model + else raise Exception so that mailgate script will reject the mail and + send notification mail sender that this mailbox does not exist so your mail have been rejected. + """ + + alias_obj = self.pool.get('mail.alias') + user_obj = self.pool.get('res.user') + mail_message = self.pool.get('mail.compose.message') + + if isinstance(message, xmlrpclib.Binary): + message = str(message.data) + + # Parse Message + # Warning: message_from_string doesn't always work correctly on unicode, + # we must use utf-8 strings here :-( + if isinstance(message, unicode): + message = message.encode('utf-8') + msg_txt = email.message_from_string(message) + msg = mail_message.parse_message(msg_txt, save_original=save_original) + + alias_name = msg.get('to') + alias_ids = mail_alias.search(cr, uid, [('alias_name','=',alias_name)],context) + alias_id = mail_alias.browse(cr, uid, alias_ids[0], context) + #if alias found then call message_process method. + if alias_id: + user_id = self._get_user(self, cr, uid, alias_id, context) + self.message_process(self, cr, user_id, alias_id.alias_model_id.id, message, custom_values = alias_id.alias_defaults or {}, thread_id = alias_id.alias_force_thread_id or {}, context) + #if alis not found give Exception + else: + #_logger.warning("This mailbox does not exist so mail gate will reject this mail.") + from_email = user_obj.browse(cr, uid, uid, context).user_email + sub = "Mail Rejection" + msg.get('subject') + message = "Respective mailbox does not exist so your mail have been rejected" + msg + mail_message.send_mail(cr, uid, {'email_from': from_email,'email_to': msg.get('from'),'subject': sub, 'body_text': message}, context) + + return True #------------------------------------------------------ # Email specific