From 65c2b6d4bcb48517ad7a2e55adf1b94bcc1129fa Mon Sep 17 00:00:00 2001 From: mfrankie Date: Thu, 19 May 2016 13:29:49 +0200 Subject: issue #685 remove duplicated email recipients --- service/pixelated/adapter/services/mail_sender.py | 20 -------------------- service/pixelated/adapter/services/mail_service.py | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) (limited to 'service/pixelated/adapter') diff --git a/service/pixelated/adapter/services/mail_sender.py b/service/pixelated/adapter/services/mail_sender.py index 08e81872..5ce3f7f1 100644 --- a/service/pixelated/adapter/services/mail_sender.py +++ b/service/pixelated/adapter/services/mail_sender.py @@ -63,9 +63,6 @@ class MailSender(object): bccs = mail.bcc deferreds = [] - recipients = self._remove_canonical(mail, recipients) - self._remove_duplicates_form_cc_and_to(mail) - for recipient in recipients: self._define_bcc_field(mail, recipient, bccs) smtp_recipient = self._create_twisted_smtp_recipient(recipient) @@ -73,20 +70,6 @@ class MailSender(object): return defer.DeferredList(deferreds, fireOnOneErrback=False, consumeErrors=True) - def _remove_duplicates_form_cc_and_to(self, mail): - mail.headers['To'] = list(set(self._remove_duplicates(mail.to)).difference(set(mail.bcc))) - mail.headers['Cc'] = list((set(self._remove_duplicates(mail.cc)).difference(set(mail.bcc)).difference(set(mail.to)))) - - def _remove_canonical(self, mail, recipients): - mail.headers['To'] = self._remove_duplicates(map(self._remove_canonical_recipient, mail.to)) - mail.headers['Cc'] = self._remove_duplicates(map(self._remove_canonical_recipient, mail.cc)) - mail.headers['Bcc'] = self._remove_duplicates(map(self._remove_canonical_recipient, mail.bcc)) - - return self._remove_duplicates(map(self._remove_canonical_recipient, recipients)) - - def _remove_duplicates(self, recipient): - return list(set(recipient)) - def _define_bcc_field(self, mail, recipient, bccs): if recipient in bccs: mail.headers['Bcc'] = [recipient] @@ -110,6 +93,3 @@ class MailSender(object): def _create_twisted_smtp_recipient(self, recipient): # TODO: Better is fix Twisted instead return User(str(recipient), NOT_NEEDED, NOT_NEEDED, NOT_NEEDED) - - def _remove_canonical_recipient(self, recipient): - return recipient.split('<')[1][0:-1] if '<' in recipient else recipient diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index a5ed0897..1dce51fe 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -98,11 +98,33 @@ class MailService(object): def send_mail(self, content_dict): mail = InputMail.from_dict(content_dict, self.account_email) draft_id = content_dict.get('ident') + self._deduplicate_recipients(mail) yield self.mail_sender.sendmail(mail) sent_mail = yield self.move_to_sent(draft_id, mail) defer.returnValue(sent_mail) + def _deduplicate_recipients(self, mail): + self._remove_canonical(mail) + self._remove_duplicates_form_cc_and_to(mail) + + def _remove_canonical(self, mail): + mail.headers['To'] = map(self._remove_canonical_recipient, mail.to) + mail.headers['Cc'] = map(self._remove_canonical_recipient, mail.cc) + mail.headers['Bcc'] = map(self._remove_canonical_recipient, mail.bcc) + + def _remove_duplicates_form_cc_and_to(self, mail): + mail.headers['To'] = list(set(self._remove_duplicates(mail.to)).difference(set(mail.bcc))) + mail.headers['Cc'] = list((set(self._remove_duplicates(mail.cc)).difference(set(mail.bcc)).difference(set(mail.to)))) + mail.headers['Bcc'] = self._remove_duplicates(mail.bcc) + + def _remove_duplicates(self, recipient): + return list(set(recipient)) + + # TODO removing canocical should, be added back later + def _remove_canonical_recipient(self, recipient): + return recipient.split('<')[1][0:-1] if '<' in recipient else recipient + @defer.inlineCallbacks def move_to_sent(self, last_draft_ident, mail): if last_draft_ident: -- cgit v1.2.3