diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 55746b11678..dad69fd8be3 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -87,13 +87,21 @@ class mail_alias(osv.Model): "messages will be attached, even if they did not reply to it. " "If set, this will disable the creation of new records completely."), 'alias_domain': fields.function(_get_alias_domain, string="Alias domain", type='char', size=None), + 'alias_contact': fields.selection([ + ('everyone', 'Everyone'), + ('partners', 'Authenticated Partners'), + ], string='Contact policy', required=True, + help="Allows to restrict the access to the alias. If set to partners, only emails coming " + "from a partner are accepted. Unknown emails are bounced. If set to everyone, every " + "incoming email is accepted for this alias."), } _defaults = { 'alias_defaults': '{}', - 'alias_user_id': lambda self,cr,uid,context: uid, + 'alias_user_id': lambda self, cr, uid, context: uid, # looks better when creating new aliases - even if the field is informative only - 'alias_domain': lambda self,cr,uid,context: self._get_alias_domain(cr, SUPERUSER_ID,[1],None,None)[1] + 'alias_domain': lambda self, cr, uid, context: self._get_alias_domain(cr, SUPERUSER_ID, [1], None, None)[1], + 'alias_contact': 'everyone', } _sql_constraints = [ diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index 7ca9fcb7b53..12e280594d4 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -553,9 +553,26 @@ class mail_thread(osv.AbstractModel): mail_alias = self.pool.get('mail.alias') alias_ids = mail_alias.search(cr, uid, [('alias_name', 'in', local_parts)]) if alias_ids: + # TDE note: at this stage, message parsing is not done yet - parse the from of the message + author_ids = self._message_find_partners(cr, uid, message, ['From'], context=context) routes = [] for alias in mail_alias.browse(cr, uid, alias_ids, context=context): user_id = alias.alias_user_id.id + + if alias.alias_contact == 'partners' and not author_ids: + # TDE TODO: bounce + _logger.info('Routing mail with Message-Id %s: alias %s does not accept unknown emails, skipping', message_id, alias.alias_name) + mail_id = self.pool.get('mail.mail').create(cr, uid, { + 'body_html': '
Hello,
' + 'The following email sent to %s cannot be accepted because this address' + 'is private. Only known contacts are allowed to contact this address.
' + '