[ADD] added message_catchall method.

bzr revid: tpa@tinyerp.com-20120621061405-uofftetkrptjo6mu
This commit is contained in:
Turkesh Patel (Open ERP) 2012-06-21 11:44:05 +05:30
parent e12390e51d
commit 4d1a89e006
1 changed files with 54 additions and 4 deletions

View File

@ -447,11 +447,61 @@ 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):
"""
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):
"""
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