[FIX] mail.thread: avoid wrongly matching model,id from a foreign OpenERP system
When emails transit from an OpenERP system to another there is a chance of wrongly considering the foreign model,id pair as local, possibly attaching a reply to a wrong parent message. This naive heuristic ignore the foreign identifiers unless the hostname of the message-id mentioned in the In-Reply-To header matches the local one. This may fail after a change of local hostname but is still better than the alternative. In OpenERP v8 we should stop including the model,res_id in outgoing Message-Id headers and only rely on the stored, opaque, unique Message-Ids, preventing any future mismatch. bzr revid: odo@openerp.com-20140411101349-h3jmkdzvbr7lut26
This commit is contained in:
parent
63e9150cff
commit
4ed8413dc7
|
@ -26,6 +26,7 @@ import email
|
|||
import logging
|
||||
import pytz
|
||||
import re
|
||||
import socket
|
||||
import time
|
||||
import xmlrpclib
|
||||
from email.message import Message
|
||||
|
@ -539,8 +540,12 @@ class mail_thread(osv.AbstractModel):
|
|||
if ref_match:
|
||||
thread_id = int(ref_match.group(1))
|
||||
model = ref_match.group(2) or model
|
||||
our_hostname = socket.gethostname()
|
||||
reply_to_hostname = ref_match.group(3)
|
||||
# do not match forwarded emails from another OpenERP system (thread_id collision!)
|
||||
is_reply_to_local = (our_hostname == reply_to_hostname)
|
||||
model_pool = self.pool.get(model)
|
||||
if thread_id and model and model_pool and model_pool.exists(cr, uid, thread_id) \
|
||||
if thread_id and is_reply_to_local and model and model_pool and model_pool.exists(cr, uid, thread_id) \
|
||||
and hasattr(model_pool, 'message_update'):
|
||||
_logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s',
|
||||
email_from, email_to, message_id, model, thread_id, custom_values, uid)
|
||||
|
|
Loading…
Reference in New Issue