summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorAlexandre Pretto Nunes <anunes@thoughtworks.com>2014-12-02 10:32:33 -0200
committerAlexandre Pretto Nunes <anunes@thoughtworks.com>2014-12-03 15:53:33 -0200
commit0c53cdd869613f063b4f647b3f8de194a3417b60 (patch)
tree7832a65e6e362f24a1d1fedd1f2a1f1cca4befba /service
parentf86475751520c8fde47b67bd01b80bb193e9a54a (diff)
#135 Use reply-to field instead of from when present
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/mail.py12
-rw-r--r--service/test/unit/adapter/mail_test.py19
2 files changed, 29 insertions, 2 deletions
diff --git a/service/pixelated/adapter/mail.py b/service/pixelated/adapter/mail.py
index a5f0d5d2..3003f9eb 100644
--- a/service/pixelated/adapter/mail.py
+++ b/service/pixelated/adapter/mail.py
@@ -230,11 +230,17 @@ class PixelatedMail(Mail):
for header in ['From', 'Subject']:
_headers[header] = hdoc_headers.get(header)
+
_headers['Date'] = self._get_date()
+
if self.parts and len(self.parts['alternatives']) > 1:
_headers['content_type'] = 'multipart/alternative; boundary="%s"' % self.boundary
elif self.hdoc.content['headers'].get('Content-Type'):
_headers['content_type'] = hdoc_headers.get('Content-Type')
+
+ if hdoc_headers.get('Reply-To'):
+ _headers['Reply-To'] = hdoc_headers.get('Reply-To')
+
return _headers
def _get_date(self):
@@ -326,11 +332,13 @@ class PixelatedMail(Mail):
dict_mail = super(PixelatedMail, self).as_dict()
dict_mail['replying'] = {'single': None, 'all': {'to-field': [], 'cc-field': []}}
+ sender_mail = self.headers.get('Reply-To', self.headers['From'])
+
recipients = [recipient for recipient in self.headers['To'] if recipient != InputMail.FROM_EMAIL_ADDRESS]
- recipients.append(self.headers['From'])
+ recipients.append(sender_mail)
ccs = [cc for cc in self.headers['Cc'] if cc != InputMail.FROM_EMAIL_ADDRESS]
- dict_mail['replying']['single'] = self.headers['From']
+ dict_mail['replying']['single'] = sender_mail
dict_mail['replying']['all']['to-field'] = recipients
dict_mail['replying']['all']['cc-field'] = ccs
return dict_mail
diff --git a/service/test/unit/adapter/mail_test.py b/service/test/unit/adapter/mail_test.py
index 4cc29287..f436bb6c 100644
--- a/service/test/unit/adapter/mail_test.py
+++ b/service/test/unit/adapter/mail_test.py
@@ -103,6 +103,25 @@ class TestPixelatedMail(unittest.TestCase):
}
}})
+ def test_use_reply_to_address_for_replying(self):
+ fdoc, hdoc, bdoc = test_helper.leap_mail(flags=['\\Recent'])
+ hdoc.content['headers']['Subject'] = 'The subject'
+ hdoc.content['headers']['From'] = 'someone@pixelated.org'
+ hdoc.content['headers']['Reply-To'] = 'reply-to-this-address@pixelated.org'
+ hdoc.content['headers']['To'] = 'me@pixelated.org, \nalice@pixelated.org'
+
+ InputMail.FROM_EMAIL_ADDRESS = 'me@pixelated.org'
+
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier)
+
+ _dict = mail.as_dict()
+
+ self.assertEquals(_dict['replying'], {'single': 'reply-to-this-address@pixelated.org',
+ 'all': {
+ 'to-field': ['alice@pixelated.org', 'reply-to-this-address@pixelated.org'],
+ 'cc-field': []
+ }})
+
def test_alternatives_body(self):
parts = {'alternatives': [], 'attachments': []}
parts['alternatives'].append({'content': 'blablabla', 'headers': {'Content-Type': 'text/plain'}})