def test_to_message_multipart_with_b64encoding(self):
        from pyramid_mailer.message import Message, Attachment
        
        response = Message(
            recipients=['To'],
            sender='From',
            subject='Subject',
            body='Body',
            html='Html'
            )

        this = os.path.abspath(__file__)
        with open(this, 'rb') as data:
            attachment = Attachment(
                filename=this,
                content_type='application/octet-stream',
                disposition='disposition',
                transfer_encoding='base64',
                data=data,
                )
            response.attach(attachment)
            message = response.to_message()
            payload = message.get_payload()[1]
        self.assertEqual(payload.get('Content-Transfer-Encoding'), 'base64')
        self.assertEqual(
            payload.get_payload(),
            _bencode(self._read_filedata(this, 'rb')).decode('ascii')
            )
Exemple #2
0
    def get_payload(self, i=None):
        # taken from http://hg.python.org/cpython/file/0926adcc335c/Lib/email/message.py
        # Copyright (C) 2001-2006 Python Software Foundation
        # See PY-LIC for licence
        if i is None:
            payload = self._payload
        elif not isinstance(self._payload, list):
            raise TypeError('Expected list, got %s' % type(self._payload))
        else:
            payload = self._payload[i]

        if self.is_multipart():
            return payload
        cte = self.get('content-transfer-encoding', '').lower()
        if cte == 'quoted-printable':
            return encoders._qencode(payload)
        elif cte == 'base64':
            try:
                return encoders._bencode(payload)
            except binascii.Error:
                # Incorrect padding
                return payload
        elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
            sfp = StringIO()
            try:
                uu.encode(StringIO(payload + '\n'), sfp, quiet=True)
                payload = sfp.getvalue()
            except uu.Error:
                # Some decoding problem
                return payload
        # Everything else, including encodings with 8bit or 7bit are returned
        # unchanged.
        return payload
Exemple #3
0
    def test_to_message_multipart_with_b64encoding(self):
        from tgext.mailer.message import Message, Attachment
        
        response = Message(
            recipients=['To'],
            sender='From',
            subject='Subject',
            body='Body',
            html='Html'
            )

        this = os.path.abspath(__file__)
        with open(this, 'rb') as data:
            attachment = Attachment(
                filename=this,
                content_type='application/octet-stream',
                disposition='disposition',
                transfer_encoding='base64',
                data=data,
                )
            response.attach(attachment)
            message = response.to_message()
            payload = message.get_payload()[1]
        self.assertEqual(payload.get('Content-Transfer-Encoding'), 'base64')
        self.assertEqual(
            payload.get_payload(),
            _bencode(self._read_filedata(this, 'rb')).decode('ascii')
            )
Exemple #4
0
    def get_payload(self, i=None):
        # taken from http://hg.python.org/cpython/file/0926adcc335c/Lib/email/message.py
        # Copyright (C) 2001-2006 Python Software Foundation
        # See PY-LIC for licence
        if i is None:
            payload = self._payload
        elif not isinstance(self._payload, list):
            raise TypeError('Expected list, got %s' % type(self._payload))
        else:
            payload = self._payload[i]

        if self.is_multipart():
            return payload
        cte = self.get('content-transfer-encoding', '').lower()
        if cte == 'quoted-printable':
            return encoders._qencode(payload)
        elif cte == 'base64':
            try:
                return encoders._bencode(payload)
            except binascii.Error:
                # Incorrect padding
                return payload
        elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
            sfp = StringIO()
            try:
                uu.encode(StringIO(payload+'\n'), sfp, quiet=True)
                payload = sfp.getvalue()
            except uu.Error:
                # Some decoding problem
                return payload
        # Everything else, including encodings with 8bit or 7bit are returned
        # unchanged.
        return payload
Exemple #5
0
 def test_body_is_text_base64(self):
     from email.encoders import _bencode
     text_encoded = b'LaPe\xf1a'
     result = self._callFUT('base64', text_encoded)
     self.assertEqual(
         result,
         _bencode(text_encoded)
         )
 def test_body_is_text_base64(self):
     from email.encoders import _bencode
     text_encoded = b'LaPe\xf1a'
     result = self._callFUT('base64', text_encoded)
     self.assertEqual(
         result,
         _bencode(text_encoded)
         )
Exemple #7
0
def transfer_encode(encoding, payload):
    # payload must be bytes
    encoding = encoding.lower()
    if encoding == 'base64':
        return _bencode(payload)
    elif encoding == 'quoted-printable':
        return _qencode(payload)
    else:
        raise RuntimeError('Unknown transfer encoding %s' % encoding)
Exemple #8
0
def transfer_encode(encoding, payload):
    # payload must be bytes
    encoding = encoding.lower()
    if encoding == 'base64':
        return _bencode(payload)
    elif encoding == 'quoted-printable':
        return _qencode(payload)
    else:
        raise RuntimeError('Unknown transfer encoding %s' % encoding)
    def test_to_message_with_html_attachment(self):
        from pyramid_mailer.message import Message, Attachment

        response = Message(recipients=["To"], sender="From", subject="Subject", body="Body")
        attachment = Attachment(data=b"data", content_type="text/html")
        response.attach(attachment)
        message = response.to_message()
        att_payload = message.get_payload()[1]
        self.assertEqual(att_payload["Content-Type"], 'text/html; charset="us-ascii"')
        self.assertEqual(att_payload.get_payload(), _bencode(b"data").decode("ascii"))
Exemple #10
0
 def addAttachFile(self, src):
     with open(src, 'rb') as fp:
         try:
             attach = MIMEText(_bencode(fp.read()), 'base64', 'utf-8')
         except Exception as e:
             print(e)
     filename = src.split('/')[-1]
     attach["Context-Type"] = "application/octet-stream"
     attach["Content-Disposition"] = "attachment; filename=" + filename
     attach.replace_header('Content-Transfer-Encoding', 'base64')
     return attach
    def test_to_message_with_binary_attachment(self):
        from pyramid_mailer.message import Message, Attachment

        response = Message(recipients=["To"], sender="From", subject="Subject", body="Body")
        data = os.urandom(100)
        attachment = Attachment(data=data, content_type="application/octet-stream")
        response.attach(attachment)
        message = response.to_message()
        att_payload = message.get_payload()[1]
        self.assertEqual(att_payload["Content-Type"], "application/octet-stream")
        self.assertEqual(att_payload.get_payload(), _bencode(data).decode("ascii"))
Exemple #12
0
    def encode_base64(msg):
        """Encode the message's payload in Base64.

        Also, add an appropriate Content-Transfer-Encoding header.
        """
        orig = msg.get_payload(decode=True)
        # it is likely decode=True did nothing and orig is still unicode data
        # (we expect bytes) acording to py2 implementation
        if isinstance(orig, unicode):
            orig = fix_payload_decode(orig)
        encdata = unicode(_bencode(orig), 'ascii')
        msg.set_payload(encdata)
        msg['Content-Transfer-Encoding'] = 'base64'
 def test_body_is_text_ct_is_nontext_no_charset(self):
     mail = self._makeBase()
     mail.set_content_type("application/octet-stream")
     mail.set_body(b"foo".decode("ascii"))
     # XXX note that if we dont set the transfer encoding, it will still
     # be encoded using bas64 but using a codec that doesnt strip the last
     # character on py27 (but not on py33).
     mail.set_transfer_encoding("base64")
     result = self._callFUT(mail)
     self.assertEqual(result["Content-Type"], 'application/octet-stream; charset="utf-8"')
     self.assertEqual(result["Content-Transfer-Encoding"], "base64")
     payload = result.get_payload()
     self.assertEqual(payload, _bencode(b"foo").decode("ascii"))
Exemple #14
0
 def test_body_is_text_ct_is_nontext_no_charset(self):
     mail = self._makeBase()
     mail.set_content_type('application/octet-stream')
     mail.set_body(b'foo'.decode('ascii'))
     # XXX note that if we dont set the transfer encoding, it will still
     # be encoded using bas64 but using a codec that doesnt strip the last
     # character on py27 (but not on py33).
     mail.set_transfer_encoding('base64')
     result = self._callFUT(mail)
     self.assertEqual(result['Content-Type'],
                      'application/octet-stream; charset="utf-8"')
     self.assertEqual(result['Content-Transfer-Encoding'], 'base64')
     payload = result.get_payload()
     self.assertEqual(payload, _bencode(b'foo').decode('ascii'))
Exemple #15
0
 def test_to_message_with_html_attachment(self):
     from pyramid_mailer.message import Message, Attachment
     response = Message(
         recipients=['To'],
         sender='From',
         subject='Subject',
         body='Body',
     )
     attachment = Attachment(data=b'data', content_type='text/html')
     response.attach(attachment)
     message = response.to_message()
     att_payload = message.get_payload()[1]
     self.assertEqual(att_payload['Content-Type'],
                      'text/html; charset="us-ascii"')
     self.assertEqual(att_payload.get_payload(),
                      _bencode(b'data').decode('ascii'))
Exemple #16
0
def transfer_encode(encoding, payload):
    # payload must be bytes
    encoding = encoding.lower()
    if encoding == 'base64':
        return _bencode(payload)
    elif encoding == 'quoted-printable':
        return _qencode(payload)
    elif encoding == '7bit':
        try:
            text_type(payload, 'ascii')
        except UnicodeDecodeError:
            raise RuntimeError('Payload contains an octet that is not 7bit safe')
        return payload
    elif encoding == '8bit':
        return payload
    else:
        raise RuntimeError('Unknown transfer encoding %s' % encoding)
    def test_to_message_multipart_with_b64encoding(self):
        from pyramid_mailer.message import Message, Attachment

        response = Message(recipients=["To"], sender="From", subject="Subject", body="Body", html="Html")

        this = os.path.abspath(__file__)
        data = open(this, "rb")
        attachment = Attachment(
            filename=this,
            content_type="application/octet-stream",
            disposition="disposition",
            transfer_encoding="base64",
            data=data,
        )
        response.attach(attachment)
        message = response.to_message()
        payload = message.get_payload()[1]
        self.assertEqual(payload.get("Content-Transfer-Encoding"), "base64")
        self.assertEqual(payload.get_payload(), _bencode(self._read_filedata(this, "rb")).decode("ascii"))
Exemple #18
0
 def test_to_message_with_binary_attachment(self):
     from pyramid_mailer.message import Message, Attachment
     response = Message(
         recipients=['To'],
         sender='From',
         subject='Subject',
         body='Body',
     )
     data = os.urandom(100)
     attachment = Attachment(
         data=data,
         content_type='application/octet-stream',
     )
     response.attach(attachment)
     message = response.to_message()
     att_payload = message.get_payload()[1]
     self.assertEqual(att_payload['Content-Type'],
                      'application/octet-stream')
     self.assertEqual(att_payload.get_payload(),
                      _bencode(data).decode('ascii'))
Exemple #19
0
 def test_to_message_with_html_attachment(self):
     from pyramid_mailer.message import Message, Attachment
     response = Message(
         recipients=['To'],
         sender='From',
         subject='Subject',
         body='Body',
         )
     attachment = Attachment(
         data=b'data',
         content_type='text/html'
         )
     response.attach(attachment)
     message = response.to_message()
     att_payload = message.get_payload()[1]
     self.assertEqual(
         att_payload['Content-Type'],
         'text/html; charset="us-ascii"'
         )
     self.assertEqual(
         att_payload.get_payload(),
         _bencode(b'data').decode('ascii')
         )
Exemple #20
0
 def test_to_message_with_binary_attachment(self):
     from pyramid_mailer.message import Message, Attachment
     response = Message(
         recipients=['To'],
         sender='From',
         subject='Subject',
         body='Body',
         )
     data = os.urandom(100)
     attachment = Attachment(
         data=data,
         content_type='application/octet-stream',
         )
     response.attach(attachment)
     message = response.to_message()
     att_payload = message.get_payload()[1]
     self.assertEqual(
         att_payload['Content-Type'],
         'application/octet-stream'
         )
     self.assertEqual(
         att_payload.get_payload(),
         _bencode(data).decode('ascii')
         )