From a44f7738f43a349a8c3fd4768dd54add13b3ce12 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Mon, 1 Sep 2014 16:24:46 -0300 Subject: support multiple to, cc and bcc --- service/pixelated/adapter/pixelated_mail.py | 12 ++++++++++-- service/pixelated/adapter/pixelated_mail_sender.py | 10 +++++++--- service/pixelated/support/__init__.py | 15 +++++++++++++++ service/pixelated/support/functional.py | 20 ++++++++++++++++++++ 4 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 service/pixelated/support/__init__.py create mode 100644 service/pixelated/support/functional.py (limited to 'service/pixelated') diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index e43d5510..d20a93f4 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -42,7 +42,13 @@ class PixelatedMail: self.headers['from'] = [_from] def get_to(self): - return self.headers['to'][0] + return self.headers['to'] + + def get_cc(self): + return self.headers['cc'] + + def get_bcc(self): + return self.headers['bcc'] def _extract_status(self): return Status.from_flags(self.leap_mail.getFlags()) @@ -81,7 +87,9 @@ class PixelatedMail: def to_mime_multipart(self): mime_multipart = MIMEMultipart() - mime_multipart['To'] = self.headers['to'][0] + mime_multipart['To'] = ", ".join(self.headers['to']) + mime_multipart['Cc'] = ", ".join(self.headers['cc']) + mime_multipart['Bcc'] = ", ".join(self.headers['bcc']) mime_multipart['Subject'] = self.headers['subject'] mime_multipart.attach(MIMEText(self.body, 'plain')) return mime_multipart diff --git a/service/pixelated/adapter/pixelated_mail_sender.py b/service/pixelated/adapter/pixelated_mail_sender.py index 3ace6814..6f6340da 100644 --- a/service/pixelated/adapter/pixelated_mail_sender.py +++ b/service/pixelated/adapter/pixelated_mail_sender.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . import smtplib +from pixelated.support.functional import flatten class PixelatedMailSender(): @@ -22,7 +23,10 @@ class PixelatedMailSender(): self.smtp_client = smtplib.SMTP('localhost', 4650) def sendmail(self, mail): - _from = self.account_email_address - _to = mail.get_to() + recipients = flatten([mail.get_to(), mail.get_cc(), mail.get_bcc()]) - self.smtp_client.sendmail(_from, _to, mail.to_smtp_format(_from=_from)) + self.smtp_client.sendmail( + self.account_email_address, + recipients, + mail.to_smtp_format(_from=self.account_email_address) + ) diff --git a/service/pixelated/support/__init__.py b/service/pixelated/support/__init__.py new file mode 100644 index 00000000..2756a319 --- /dev/null +++ b/service/pixelated/support/__init__.py @@ -0,0 +1,15 @@ +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see . diff --git a/service/pixelated/support/functional.py b/service/pixelated/support/functional.py new file mode 100644 index 00000000..e779f5bc --- /dev/null +++ b/service/pixelated/support/functional.py @@ -0,0 +1,20 @@ +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see . +from itertools import chain + + +def flatten(_list): + return list(chain.from_iterable(_list)) -- cgit v1.2.3