summaryrefslogtreecommitdiff
path: root/addons/mail/mail_thread.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-01-19 17:15:56 +0100
committerChristophe Simonis <chs@odoo.com>2015-01-19 17:15:56 +0100
commit18e22be138f4d273ce8f63c0ff2c8a437cf6ce5d (patch)
tree63bd658de7b6fa0e91d521ca19322dd68bdc1492 /addons/mail/mail_thread.py
parentf6e5bf847b1a7107c09b009a757823b0f9514fa4 (diff)
parent0aab81cd3ac6881b2b64ccedb901b55badd421d4 (diff)
[MERGE] forward port of branch 8.0 up to 0aab81c
Diffstat (limited to 'addons/mail/mail_thread.py')
-rw-r--r--addons/mail/mail_thread.py38
1 files changed, 28 insertions, 10 deletions
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 254cd193285..4e3e77f1dd8 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -1443,18 +1443,34 @@ class mail_thread(osv.AbstractModel):
if follower.email == email_address:
partner_id = follower.id
# second try: check in partners that are also users
+ # Escape special SQL characters in email_address to avoid invalid matches
+ email_address = (email_address.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_'))
+ email_brackets = "<%s>" % email_address
if not partner_id:
- ids = partner_obj.search(cr, SUPERUSER_ID, [
- ('email', 'ilike', email_address),
- ('user_ids', '!=', False)
- ], limit=1, context=context)
+ # exact, case-insensitive match
+ ids = partner_obj.search(cr, SUPERUSER_ID,
+ [('email', '=ilike', email_address),
+ ('user_ids', '!=', False)],
+ limit=1, context=context)
+ if not ids:
+ # if no match with addr-spec, attempt substring match within name-addr pair
+ ids = partner_obj.search(cr, SUPERUSER_ID,
+ [('email', 'ilike', email_brackets),
+ ('user_ids', '!=', False)],
+ limit=1, context=context)
if ids:
partner_id = ids[0]
# third try: check in partners
if not partner_id:
- ids = partner_obj.search(cr, SUPERUSER_ID, [
- ('email', 'ilike', email_address)
- ], limit=1, context=context)
+ # exact, case-insensitive match
+ ids = partner_obj.search(cr, SUPERUSER_ID,
+ [('email', '=ilike', email_address)],
+ limit=1, context=context)
+ if not ids:
+ # if no match with addr-spec, attempt substring match within name-addr pair
+ ids = partner_obj.search(cr, SUPERUSER_ID,
+ [('email', 'ilike', email_brackets)],
+ limit=1, context=context)
if ids:
partner_id = ids[0]
partner_ids.append(partner_id)
@@ -1474,13 +1490,15 @@ class mail_thread(osv.AbstractModel):
partner_id = partner_ids[idx]
partner_info = {'full_name': email_address, 'partner_id': partner_id}
result.append(partner_info)
-
# link mail with this from mail to the new partner id
if link_mail and partner_info['partner_id']:
+ # Escape special SQL characters in email_address to avoid invalid matches
+ email_address = (email_address.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_'))
+ email_brackets = "<%s>" % email_address
message_ids = mail_message_obj.search(cr, SUPERUSER_ID, [
'|',
- ('email_from', '=', email_address),
- ('email_from', 'ilike', '<%s>' % email_address),
+ ('email_from', '=ilike', email_address),
+ ('email_from', 'ilike', email_brackets),
('author_id', '=', False)
], context=context)
if message_ids: