From 4baccd7beea34c8421df20e181f4304374857fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 15 May 2014 14:13:33 +0200 Subject: [PATCH] [IMP] mail: notifications: when having more than 500 followers to mail use the email queue instead of directly sending notification emails. --- addons/mail/mail_followers.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/addons/mail/mail_followers.py b/addons/mail/mail_followers.py index 0059df90530..0985b16f5ac 100644 --- a/addons/mail/mail_followers.py +++ b/addons/mail/mail_followers.py @@ -183,16 +183,20 @@ class mail_notification(osv.Model): references = message.parent_id.message_id if message.parent_id else False # create email values - mail_values = { - 'mail_message_id': message.id, - 'auto_delete': True, - 'body_html': body_html, - 'recipient_ids': [(4, id) for id in email_pids], - 'references': references, - } - email_notif_id = self.pool.get('mail.mail').create(cr, uid, mail_values, context=context) - if force_send: - self.pool.get('mail.mail').send(cr, uid, [email_notif_id], context=context) + max_recipients = 100 + chunks = [email_pids[x:x + max_recipients] for x in xrange(0, len(email_pids), max_recipients)] + email_ids = [] + for chunk in chunks: + mail_values = { + 'mail_message_id': message.id, + 'auto_delete': True, + 'body_html': body_html, + 'recipient_ids': [(4, id) for id in chunk], + 'references': references, + } + email_ids.append(self.pool.get('mail.mail').create(cr, uid, mail_values, context=context)) + if force_send and len(chunks) < 6: # for more than 500 followers, use the queue system + self.pool.get('mail.mail').send(cr, uid, email_ids, context=context) return True def _notify(self, cr, uid, message_id, partners_to_notify=None, context=None,