def test_encoding_utf_8_headers(self):
        from email import header
        from repoze.sendmail._compat import b
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        to = ', '.join([
            '"' + utf_8 + ' McDonough, M.D." <*****@*****.**>',
            'Chris Rossi <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = utf_8 + ' Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last '
        subject_fill = header.MAXLINELEN - len(
            b('Subject: ') + subject.encode('utf-8') + utf_8_encoded) - 18
        subject += ''.join('.' for idx in range(subject_fill)) + ' ' + utf_8
        message['Subject'] = subject

        encoded = self._callFUT(message)
        encoded_subject = ''.join(
            header.decode_header(line)[0][0].decode('utf-8')
            for line in message['Subject'].split('\n'))

        self.assertTrue(b('To: =?utf-8?') in encoded)
        self.assertTrue(b('From: =?utf-8?') in encoded)
        self.assertTrue(b('Subject: =?utf-8?') in encoded)
        self.assertEqual(subject, encoded_subject)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
    def test_encoding_utf_8_headers(self):
        from email import header
        from repoze.sendmail._compat import b
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        to = ', '.join([
            '"' + utf_8 + ' McDonough, M.D." <*****@*****.**>',
            'Chris Rossi <*****@*****.**>'
        ])
        message = self._makeMessage()
        message['To'] = to
        from_ = utf_8 + ' Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last '
        subject_fill = header.MAXLINELEN - len(
            b('Subject: ') + subject.encode('utf-8') + utf_8_encoded) - 18
        subject += ''.join('.' for idx in range(subject_fill)) + ' ' + utf_8
        message['Subject'] = subject

        encoded = self._callFUT(message)
        encoded_subject = ''.join(
            header.decode_header(line)[0][0].decode('utf-8')
            for line in message['Subject'].split('\n'))

        self.assertTrue(b('To: =?utf-8?') in encoded)
        self.assertTrue(b('From: =?utf-8?') in encoded)
        self.assertTrue(b('Subject: =?utf-8?') in encoded)
        self.assertEqual(subject, encoded_subject)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
    def test_encoding_latin_1_header_parameters(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import quote
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('iso-8859-1')
        message = self._makeMessage()
        message['Content-Disposition'] = (
            'attachment; filename=' + latin_1 + '.ppt')

        encoded = self._callFUT(message)
        
        self.assertTrue(
            b("Content-Disposition: attachment; filename*=") in encoded)
        self.assertTrue(b("iso-8859-1''") + quote(latin_1_encoded).encode('ascii')
                        in encoded)
    def test_encoding_utf_8_header_parameters(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import quote
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        message = self._makeMessage()
        message['Content-Disposition'] = (
            'attachment; filename=' + utf_8 + '.ppt')

        encoded = self._callFUT(message)

        self.assertTrue(
            b("Content-Disposition: attachment; filename*=") in encoded)
        self.assertTrue(b("utf-8''") + quote(utf_8_encoded).encode('ascii')
                        in encoded)
    def test_encoding_utf_8_header_parameters(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import quote
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        message = self._makeMessage()
        message['Content-Disposition'] = ('attachment; filename=' + utf_8 +
                                          '.ppt')

        encoded = self._callFUT(message)

        self.assertTrue(
            b("Content-Disposition: attachment; filename*=") in encoded)
        self.assertTrue(
            b("utf-8''") + quote(utf_8_encoded).encode('ascii') in encoded)
    def test_encoding_latin_1_header_parameters(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import quote
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('latin_1')
        message = self._makeMessage()
        message['Content-Disposition'] = (
            'attachment; filename=' + latin_1 + '.ppt')

        encoded = self._callFUT(message)

        self.assertTrue(
            b("Content-Disposition: attachment; filename*=") in encoded)
        self.assertTrue(b("latin_1''") + quote(latin_1_encoded).encode('ascii')
                        in encoded)
Beispiel #7
0
    def testNonASCIIAddrs(self):
        import os
        from email.mime import base
        import transaction
        from repoze.sendmail.delivery import QueuedMailDelivery
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import text_type
        delivery = QueuedMailDelivery(self.maildir_path)

        non_ascii = b('LaPe\xc3\xb1a').decode('utf-8')
        fromaddr = non_ascii + ' <*****@*****.**>'
        toaddrs = (non_ascii + ' <*****@*****.**>', )
        message = base.MIMEBase('text', 'plain')
        message['From'] = fromaddr
        message['To'] = ','.join(toaddrs)

        delivery.send(fromaddr, toaddrs, message)
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, 'tmp')))
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, 'new')))
        transaction.commit()
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, 'tmp')))
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, 'new')))

        self.qp.send_messages()
        self.assertTrue(len(self.qp.mailer.sent_messages), 1)
        queued_fromaddr, queued_toaddrs, queued_message = (
            self.qp.mailer.sent_messages[0])
        self.assertEqual(queued_fromaddr, fromaddr)
        self.assertEqual(queued_toaddrs, toaddrs)
    def test_encoding_multipart_quopri(self):
        import quopri
        from email.mime import multipart
        from email.mime import nonmultipart
        from repoze.sendmail._compat import b

        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('latin_1')
        plain_string = 'I know what you did last ' + latin_1

        message = multipart.MIMEMultipart('alternative')

        plain_part = nonmultipart.MIMENonMultipart('plain', 'plain')
        plain_part.set_payload(plain_string)
        message.attach(plain_part)

        html_string = '<p>' + plain_string + '</p>'
        html_part = nonmultipart.MIMENonMultipart('text', 'html')
        html_part.set_payload(html_string)
        message.attach(html_part)

        encoded = self._callFUT(message)

        self.assertEqual(
            encoded.count(quopri.encodestring(plain_string.encode('latin_1'))),
            2)
    def test_encoding_multipart(self):
        from email.mime import application
        from email.mime import multipart
        from email.mime import nonmultipart
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import encodestring
        from repoze.sendmail._compat import from_octets

        message = multipart.MIMEMultipart('alternative')

        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')

        plain_string = utf_8
        plain_part = nonmultipart.MIMENonMultipart('plain', 'plain')
        plain_part.set_payload(plain_string)
        message.attach(plain_part)

        html_string = '<p>' + utf_8 + '</p>'
        html_part = nonmultipart.MIMENonMultipart('text', 'html')
        html_part.set_payload(html_string)
        message.attach(html_part)

        binary = from_octets([x for x in range(256)])
        binary_b64 = encodestring(binary)
        binary_part = application.MIMEApplication(binary)
        message.attach(binary_part)

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(plain_string.encode('utf-8')) in encoded)
        self.assertTrue(encodestring(html_string.encode('utf-8')) in encoded)
        self.assertTrue(binary_b64 in encoded)
    def test_send_w_non_ASCII_addrs(self):
        import os
        from email.mime import base
        import transaction
        from repoze.sendmail._compat import b
        delivery = self._makeOne(self.maildir_path)

        non_ascii = b('LaPe\xc3\xb1a').decode('utf-8')
        fromaddr = non_ascii+' <*****@*****.**>'
        toaddrs = (non_ascii+' <*****@*****.**>',)
        message = base.MIMEBase('text', 'plain')
        message['From'] = fromaddr
        message['To'] = ','.join(toaddrs)

        delivery.send(fromaddr, toaddrs, message)
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, 'tmp')))
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, 'new')))
        transaction.commit()
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, 'tmp')))
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, 'new')))

        self.qp.send_messages()
        self.assertTrue(len(self.qp.mailer.sent_messages), 1)
        queued_fromaddr, queued_toaddrs, queued_message = (
            self.qp.mailer.sent_messages[0])
        self.assertEqual(queued_fromaddr, fromaddr)
        self.assertEqual(queued_toaddrs, toaddrs)
Beispiel #11
0
    def test_send_w_non_ASCII_addrs(self):
        import os
        from email.mime import base
        import transaction
        from repoze.sendmail._compat import b

        delivery = self._makeOne(self.maildir_path)

        non_ascii = b("LaPe\xc3\xb1a").decode("utf-8")
        fromaddr = non_ascii + " <*****@*****.**>"
        toaddrs = (non_ascii + " <*****@*****.**>",)
        message = base.MIMEBase("text", "plain")
        message["From"] = fromaddr
        message["To"] = ",".join(toaddrs)

        delivery.send(fromaddr, toaddrs, message)
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, "tmp")))
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, "new")))
        transaction.commit()
        self.assertFalse(os.listdir(os.path.join(self.maildir_path, "tmp")))
        self.assertTrue(os.listdir(os.path.join(self.maildir_path, "new")))

        self.qp.send_messages()
        self.assertTrue(len(self.qp.mailer.sent_messages), 1)
        queued_fromaddr, queued_toaddrs, queued_message = self.qp.mailer.sent_messages[0]
        self.assertEqual(queued_fromaddr, fromaddr)
        self.assertEqual(queued_toaddrs, toaddrs)
    def test_encoding_multipart_quopri(self):
        import quopri
        from email.mime import multipart
        from email.mime import nonmultipart
        from repoze.sendmail._compat import b

        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('latin_1')
        plain_string = 'I know what you did last ' + latin_1

        message = multipart.MIMEMultipart('alternative')

        plain_part = nonmultipart.MIMENonMultipart('plain', 'plain')
        plain_part.set_payload(plain_string)
        message.attach(plain_part)

        html_string = '<p>' + plain_string + '</p>'
        html_part = nonmultipart.MIMENonMultipart('text', 'html')
        html_part.set_payload(html_string)
        message.attach(html_part)

        encoded = self._callFUT(message)

        self.assertEqual(
            encoded.count(quopri.encodestring(plain_string.encode('latin_1'))),
            2)
    def test_encoding_multipart(self):
        from email.mime import application
        from email.mime import multipart
        from email.mime import nonmultipart
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import encodestring
        from repoze.sendmail._compat import from_octets

        message = multipart.MIMEMultipart('alternative')

        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')

        plain_string = utf_8
        plain_part = nonmultipart.MIMENonMultipart('plain', 'plain')
        plain_part.set_payload(plain_string)
        message.attach(plain_part)

        html_string = '<p>' + utf_8 + '</p>'
        html_part = nonmultipart.MIMENonMultipart('text', 'html')
        html_part.set_payload(html_string)
        message.attach(html_part)

        binary = from_octets([x for x in range(256)])
        binary_b64 = encodestring(binary)
        binary_part = application.MIMEApplication(binary)
        message.attach(binary_part)

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(plain_string.encode('utf-8')) in encoded)
        self.assertTrue(encodestring(html_string.encode('utf-8')) in encoded)
        self.assertTrue(binary_b64 in encoded)
    def test_encoding_ascii_headers(self):
        from repoze.sendmail._compat import b
        to = ', '.join(['Chris McDonough <*****@*****.**>',
                        '"Chris Rossi, M.D." <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = 'Ross Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last PyCon'
        message['Subject'] = subject

        encoded = self._callFUT(message)

        self.assertTrue(
            b('To: Chris McDonough <*****@*****.**>, "Chris Rossi,')
            in encoded)
        self.assertTrue(b('From: ')+from_.encode('ascii') in encoded)
        self.assertTrue(b('Subject: ')+subject.encode('ascii') in encoded)
    def test_encoding_ascii_headers(self):
        from repoze.sendmail._compat import b
        to = ', '.join(['Chris McDonough <*****@*****.**>',
                        '"Chris Rossi, M.D." <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = 'Ross Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last PyCon'
        message['Subject'] = subject

        encoded = self._callFUT(message)

        self.assertTrue(
            b('To: Chris McDonough <*****@*****.**>, "Chris Rossi,')
            in encoded)
        self.assertTrue(b('From: ') + from_.encode('ascii') in encoded)
        self.assertTrue(b('Subject: ') + subject.encode('ascii') in encoded)
    def test_encoding_ascii_header_parameters(self):
        from repoze.sendmail._compat import b
        message = self._makeMessage()
        message['Content-Disposition'] = 'attachment; filename=foo.ppt'

        encoded = self._callFUT(message)

        self.assertTrue(
            b('Content-Disposition: attachment; filename="foo.ppt"') in
            encoded)
    def test_encoding_ascii_header_parameters(self):
        from repoze.sendmail._compat import b
        message = self._makeMessage()
        message['Content-Disposition'] = 'attachment; filename=foo.ppt'

        encoded = self._callFUT(message)

        self.assertTrue(
            b('Content-Disposition: attachment; filename="foo.ppt"')
            in encoded)
    def test_binary_body(self):
        from email.mime import application
        from email.mime import multipart
        from repoze.sendmail._compat import encodestring
        from repoze.sendmail._compat import b
        body = b('I know what you did last PyCon')
        message = multipart.MIMEMultipart()
        message.attach(application.MIMEApplication(body))

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(body) in encoded)
    def test_encoding_latin_1_body(self):
        import quopri
        from repoze.sendmail._compat import b
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('latin_1')
        body = 'I know what you did last ' + latin_1
        message = self._makeMessage()
        message.set_payload(body)

        encoded = self._callFUT(message)

        self.assertTrue(quopri.encodestring(body.encode('latin_1')) in encoded)
    def test_encoding_utf_8_body(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import encodestring
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        body = 'I know what you did last '+ utf_8
        message = self._makeMessage()
        message.set_payload(body)

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(body.encode('utf-8')) in encoded)
    def test_binary_body(self):
        from email.mime import application
        from email.mime import multipart
        from repoze.sendmail._compat import encodestring
        from repoze.sendmail._compat import b
        body = b('I know what you did last PyCon')
        message = multipart.MIMEMultipart()
        message.attach(application.MIMEApplication(body))

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(body) in encoded)
    def test_encoding_utf_8_body(self):
        from repoze.sendmail._compat import b
        from repoze.sendmail._compat import encodestring
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        body = 'I know what you did last ' + utf_8
        message = self._makeMessage()
        message.set_payload(body)

        encoded = self._callFUT(message)

        self.assertTrue(encodestring(body.encode('utf-8')) in encoded)
    def test_encoding_latin_1_body(self):
        import quopri
        from repoze.sendmail._compat import b
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('iso-8859-1')
        body = 'I know what you did last ' + latin_1
        message = self._makeMessage()
        message.set_payload(body)

        encoded = self._callFUT(message)

        self.assertTrue(quopri.encodestring(body.encode('iso-8859-1')) in encoded)
    def test_encoding_utf_8_headers(self):
        from repoze.sendmail._compat import b
        utf_8_encoded = b('mo \xe2\x82\xac')
        utf_8 = utf_8_encoded.decode('utf-8')
        to = ', '.join([
            '"' + utf_8 + ' McDonough, M.D." <*****@*****.**>',
            'Chris Rossi <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = utf_8 + ' Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last ' + utf_8
        message['Subject'] = subject

        encoded = self._callFUT(message)

        self.assertTrue(b('To: =?utf-8?') in encoded)
        self.assertTrue(b('From: =?utf-8?') in encoded)
        self.assertTrue(b('Subject: =?utf-8?') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
    def test_encoding_latin_1_headers(self):
        from repoze.sendmail._compat import b
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('iso-8859-1')
        to = ', '.join([
            '"' + latin_1 + ' McDonough, M.D." <*****@*****.**>',
            'Chris Rossi <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = latin_1 + ' Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last ' + latin_1
        message['Subject'] = subject

        encoded = self._callFUT(message)

        self.assertTrue(b('To: =?iso-8859-1?') in encoded)
        self.assertTrue(b('From: =?iso-8859-1?') in encoded)
        self.assertTrue(b('Subject: =?iso-8859-1?') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
    def test_encoding_latin_1_headers(self):
        from repoze.sendmail._compat import b
        latin_1_encoded = b('LaPe\xf1a')
        latin_1 = latin_1_encoded.decode('iso-8859-1')
        to = ', '.join([
            '"' + latin_1 + ' McDonough, M.D." <*****@*****.**>',
            'Chris Rossi <*****@*****.**>'])
        message = self._makeMessage()
        message['To'] = to
        from_ = latin_1 + ' Patterson <*****@*****.**>'
        message['From'] = from_
        subject = 'I know what you did last ' + latin_1
        message['Subject'] = subject

        encoded = self._callFUT(message)

        self.assertTrue(b('To: =?iso-8859-1?') in encoded)
        self.assertTrue(b('From: =?iso-8859-1?') in encoded)
        self.assertTrue(b('Subject: =?iso-8859-1?') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
        self.assertTrue(b('<*****@*****.**>') in encoded)
 def test_w_latin_1(self):
     from repoze.sendmail._compat import b
     latin_1_encoded = b('LaPe\xf1a')
     best, encoded = self._callFUT(latin_1_encoded.decode('iso-8859-1'))
     self.assertEqual(best, 'iso-8859-1')
     self.assertEqual(encoded, latin_1_encoded)
 def test_w_utf_8(self):
     from repoze.sendmail._compat import b
     utf_8_encoded = b('mo \xe2\x82\xac')
     best, encoded = self._callFUT(utf_8_encoded.decode('utf-8'))
     self.assertEqual(best, 'utf-8')
     self.assertEqual(encoded, utf_8_encoded)
 def test_w_ascii(self):
     from repoze.sendmail._compat import b
     value = 'foo'
     best, encoded = self._callFUT(value)
     self.assertEqual(encoded, b('foo'))
     self.assertEqual(best, 'ascii')
 def test_w_ascii(self):
     from repoze.sendmail._compat import b
     value = 'foo'
     best, encoded = self._callFUT(value)
     self.assertEqual(encoded, b('foo'))
     self.assertEqual(best, 'ascii')
 def test_w_latin_1(self):
     from repoze.sendmail._compat import b
     latin_1_encoded = b('LaPe\xf1a')
     best, encoded = self._callFUT(latin_1_encoded.decode('iso-8859-1'))
     self.assertEqual(best, 'iso-8859-1')
     self.assertEqual(encoded, latin_1_encoded)
 def test_w_utf_8(self):
     from repoze.sendmail._compat import b
     utf_8_encoded = b('mo \xe2\x82\xac')
     best, encoded = self._callFUT(utf_8_encoded.decode('utf-8'))
     self.assertEqual(best, 'utf-8')
     self.assertEqual(encoded, utf_8_encoded)