diff options
Diffstat (limited to 'service')
| -rw-r--r-- | service/pixelated/adapter/mailstore/leap_mailstore.py | 8 | ||||
| -rw-r--r-- | service/test/unit/adapter/mailstore/test_leap_mail.py | 42 | 
2 files changed, 49 insertions, 1 deletions
| diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py index 0182efd9..f3351dbd 100644 --- a/service/pixelated/adapter/mailstore/leap_mailstore.py +++ b/service/pixelated/adapter/mailstore/leap_mailstore.py @@ -15,6 +15,7 @@  # along with Pixelated. If not, see <http://www.gnu.org/licenses/>.  import base64  from email.header import decode_header +from email.utils import parseaddr  import quopri  from uuid import uuid4 @@ -163,7 +164,12 @@ class LeapMail(Mail):          if not recipients:              recipients = [] -        return [recipient for recipient in recipients if recipient != InputMail.FROM_EMAIL_ADDRESS] +        return [recipient for recipient in recipients if not self._parsed_mail_matches(recipient, InputMail.FROM_EMAIL_ADDRESS)] + +    def _parsed_mail_matches(self, to_parse, expected): +        if InputMail.FROM_EMAIL_ADDRESS is None: +            return False +        return parseaddr(self._decoded_header_utf_8(to_parse))[1] == expected      @staticmethod      def from_dict(mail_dict): diff --git a/service/test/unit/adapter/mailstore/test_leap_mail.py b/service/test/unit/adapter/mailstore/test_leap_mail.py index 925bfdce..224d1e1e 100644 --- a/service/test/unit/adapter/mailstore/test_leap_mail.py +++ b/service/test/unit/adapter/mailstore/test_leap_mail.py @@ -14,6 +14,7 @@  #  # You should have received a copy of the GNU Affero General Public License  # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. +from mock import patch  from twisted.trial.unittest import TestCase  from pixelated.adapter.mailstore.leap_mailstore import LeapMail, AttachmentInfo @@ -115,6 +116,47 @@ class TestLeapMail(TestCase):          self.assertEqual([expected_address], mail.as_dict()['replying']['all']['cc-field'])          self.assertEqual(expected_address, mail.as_dict()['replying']['single']) +    def test_reply_result_does_not_contain_own_address_in_to_with_spaces(self): +        my_address = 'myaddress@example.test' + +        with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address): +            mail = LeapMail('', 'INBOX', +                            {'From': 'test@example.test', +                             'To': 'receiver@example.test, %s ' % my_address}) + +            self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field']) + +    def test_reply_result_does_not_contain_own_address_in_to_with_name(self): +        my_address = 'myaddress@example.test' + +        with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address): +            mail = LeapMail('', 'INBOX', +                            {'From': 'test@example.test', +                             'To': 'receiver@example.test, Folker Bernitt <%s>' % my_address}) + +            self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field']) + +    def test_reply_result_does_not_contain_own_address_in_to_with_encoded(self): +        my_address = 'myaddress@example.test' + +        with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address): +            mail = LeapMail('', 'INBOX', +                            {'From': 'test@example.test', +                             'To': 'receiver@example.test, =?iso-8859-1?q?=C4lbert_=3Cmyaddress=40example=2Etest=3E?='}) + +            self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field']) + +    def test_reply_result_does_not_contain_own_address_in_cc(self): +        my_address = 'myaddress@example.test' + +        with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address): +            mail = LeapMail('', 'INBOX', +                            {'From': 'test@example.test', +                             'To': 'receiver@example.test', +                             'Cc': my_address}) + +            self.assertEqual([], mail.as_dict()['replying']['all']['cc-field']) +      def test_as_dict_with_mixed_encodings(self):          subject = 'Another test with =?iso-8859-1?B?3G1s5Px0?= =?iso-8859-1?Q?s?='          mail = LeapMail('', 'INBOX', | 
