[ADD] added message_catchall method.
authorTurkesh Patel (Open ERP) <tpa@tinyerp.com>
Thu, 21 Jun 2012 06:14:05 +0000 (11:44 +0530)
committerTurkesh Patel (Open ERP) <tpa@tinyerp.com>
Thu, 21 Jun 2012 06:14:05 +0000 (11:44 +0530)
bzr revid: tpa@tinyerp.com-20120621061405-uofftetkrptjo6mu

addons/mail/mail_thread.py

index 40824ba..08eaad8 100644 (file)
@@ -447,11 +447,61 @@ class mail_thread(osv.osv):
         return msgs
 
 
+    def _get_user(self, cr, uid, alias, context):
+        """
+            return user_id based on alias
+            else return id of admin
+        """
+
+        user_obj = self.pool.get('res.user')
+        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 if:
+            frm = msg.get('from')
+            user_ids = user_obj.search(cr, uid, [('name','=',frm)], context)
+            if user_ids:
+                user_id = user_obj.browse(cr, uid, user_ids[0], context).id
+        return user_id or 1
+
     def message_catchall(self, cr, uid, message, context=None):
-        """TODO proper docstring, inspired by messsage_process()"""
-        # TODO
-        pass
+        """
+            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, alias_id.alias_defaults or False , False, False, alias_id.alias_force_thread_id or False, context)
+        #if alis not found give Exception
+        else:
+            _logger.warning("This mailbox does not exist so mail gate will reject this mail.")
+            frm = 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': frm,'email_to': msg.get('from'),'subject': sub, 'body_text': message}, context)
+
+        return True
 
     #------------------------------------------------------
     # Email specific