[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)),
|
||||
subtype = 'html',
|
||||
subtype_alternative = 'plain')
|
||||
res = ir_mail_server.send_email(cr, uid, msg,
|
||||
mail_server_id=mail.mail_server_id.id, context=context)
|
||||
try:
|
||||
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:
|
||||
mail.write({'state': 'sent', 'message_id': res})
|
||||
mail_sent = True
|
||||
|
|
|
@ -147,10 +147,14 @@ def encode_rfc2822_address_header(header_text):
|
|||
addresses = getaddresses([tools.ustr(header_text).encode('utf-8')])
|
||||
return COMMASPACE.join(map(encode_addr, addresses))
|
||||
|
||||
|
||||
class ir_mail_server(osv.osv):
|
||||
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
|
||||
_name = "ir.mail_server"
|
||||
|
||||
NO_VALID_RECIPIENT = ("At least one valid recipient address should be "
|
||||
"specified for outgoing emails (To/Cc/Bcc)")
|
||||
|
||||
_columns = {
|
||||
'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"),
|
||||
|
@ -397,7 +401,7 @@ class ir_mail_server(osv.osv):
|
|||
email_cc = message['Cc']
|
||||
email_bcc = message['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!
|
||||
if getattr(threading.currentThread(), 'testing', False):
|
||||
|
|
Loading…
Reference in New Issue