summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
authormfrankie <mfrankie@eumfranckie.local>2016-05-19 13:29:49 +0200
committermfrankie <mfrankie@eumfranckie.local>2016-05-19 13:30:18 +0200
commit65c2b6d4bcb48517ad7a2e55adf1b94bcc1129fa (patch)
tree3f8931e36c9ffcab3ed2ef82b095d7b8b181a652 /service/pixelated/adapter
parent3fd43a0a3f45bfbb0ab6bde36ba7b353dbf535ef (diff)
issue #685 remove duplicated email recipients
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/services/mail_sender.py20
-rw-r--r--service/pixelated/adapter/services/mail_service.py22
2 files changed, 22 insertions, 20 deletions
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: