[FIX] mail: partners with missing/invalid emails must not halt notifications to others
This commit is contained in:
parent
42cdf0071e
commit
2fb2d9f956
|
@ -305,8 +305,23 @@ class mail_mail(osv.Model):
|
||||||
object_id = mail.res_id and ('%s-%s' % (mail.res_id, mail.model)),
|
object_id = mail.res_id and ('%s-%s' % (mail.res_id, mail.model)),
|
||||||
subtype = 'html',
|
subtype = 'html',
|
||||||
subtype_alternative = 'plain')
|
subtype_alternative = 'plain')
|
||||||
res = ir_mail_server.send_email(cr, uid, msg,
|
try:
|
||||||
mail_server_id=mail.mail_server_id.id, context=context)
|
res = ir_mail_server.send_email(
|
||||||
|
cr, uid,
|
||||||
|
msg,
|
||||||
|
mail_server_id=mail.mail_server_id.id,
|
||||||
|
context=context
|
||||||
|
)
|
||||||
|
except AssertionError as error:
|
||||||
|
if error.message == ir_mail_server.NO_VALID_RECIPIENT:
|
||||||
|
# No valid recipient found for this particular
|
||||||
|
# mail item -> ignore error to avoid blocking
|
||||||
|
# delivery to next recipients, if any. If this is
|
||||||
|
# the only recipient, the mail will show as failed.
|
||||||
|
_logger.warning("Ignoring invalid recipients for mail.mail %s: %s",
|
||||||
|
mail.message_id, email.get('email_to'))
|
||||||
|
else:
|
||||||
|
raise
|
||||||
if res:
|
if res:
|
||||||
mail.write({'state': 'sent', 'message_id': res})
|
mail.write({'state': 'sent', 'message_id': res})
|
||||||
mail_sent = True
|
mail_sent = True
|
||||||
|
|
|
@ -146,11 +146,15 @@ def encode_rfc2822_address_header(header_text):
|
||||||
|
|
||||||
addresses = getaddresses([tools.ustr(header_text).encode('utf-8')])
|
addresses = getaddresses([tools.ustr(header_text).encode('utf-8')])
|
||||||
return COMMASPACE.join(map(encode_addr, addresses))
|
return COMMASPACE.join(map(encode_addr, addresses))
|
||||||
|
|
||||||
|
|
||||||
class ir_mail_server(osv.osv):
|
class ir_mail_server(osv.osv):
|
||||||
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
|
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
|
||||||
_name = "ir.mail_server"
|
_name = "ir.mail_server"
|
||||||
|
|
||||||
|
NO_VALID_RECIPIENT = ("At least one valid recipient address should be "
|
||||||
|
"specified for outgoing emails (To/Cc/Bcc)")
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Description', size=64, required=True, select=True),
|
'name': fields.char('Description', size=64, required=True, select=True),
|
||||||
'smtp_host': fields.char('SMTP Server', size=128, required=True, help="Hostname or IP of SMTP server"),
|
'smtp_host': fields.char('SMTP Server', size=128, required=True, help="Hostname or IP of SMTP server"),
|
||||||
|
@ -397,7 +401,7 @@ class ir_mail_server(osv.osv):
|
||||||
email_cc = message['Cc']
|
email_cc = message['Cc']
|
||||||
email_bcc = message['Bcc']
|
email_bcc = message['Bcc']
|
||||||
smtp_to_list = filter(None, tools.flatten(map(extract_rfc2822_addresses,[email_to, email_cc, email_bcc])))
|
smtp_to_list = filter(None, tools.flatten(map(extract_rfc2822_addresses,[email_to, email_cc, email_bcc])))
|
||||||
assert smtp_to_list, "At least one valid recipient address should be specified for outgoing emails (To/Cc/Bcc)"
|
assert smtp_to_list, self.NO_VALID_RECIPIENT
|
||||||
|
|
||||||
# Do not actually send emails in testing mode!
|
# Do not actually send emails in testing mode!
|
||||||
if getattr(threading.currentThread(), 'testing', False):
|
if getattr(threading.currentThread(), 'testing', False):
|
||||||
|
|
Loading…
Reference in New Issue