コード例 #1
0
def test_payload():
    body = 'body\nmessage'
    ubody = u'bödy\nmessäge'
    enc8 = ('base64','quoted-printable','8bit')
    for uni in range(2):
        encodings = enc8 if uni else ['7bit']
        for enc in encodings:
            msg = create_mail(sender,receiver,'subject',
                ubody if uni else body,charset='UTF-8' if uni else 'us-ascii',
                encoding=enc)
            txt = mail_payload(msg)
            if uni: assert txt == ubody
            else: assert txt == body
            txt = mail_payload(msg.as_string())
            if uni: assert txt == ubody
            else: assert txt == body
            txt = mail_payload(mail_binary(msg))
            if uni: assert txt == ubody
            else: assert txt == body
    binary = b'\xc3\n\xf1'
    for encoding in enc8:
        att = create_mime(binary,'application','octet-stream',encoding=encoding)
        msg = create_mail(sender,receiver,'subject',body,attach=[att])
        cont = mail_payload(msg)
        assert len(cont)==2 and cont[0]==body and cont[1]==binary
        msg = mail_binary(msg)
        cont = mail_payload(msg)
        assert len(cont)==2 and cont[0]==body and cont[1]==binary
    with raises(UnicodeError):
        create_mime(binary,'application','octet-stream',encoding='7bit')
    body = b'body\nmessage'
    att = create_mime(body,'application','octet-stream',encoding='7bit')
    assert mail_payload(att)==body
コード例 #2
0
def test_unicode():
    from email.header import decode_header
    def get_header(msg,key):
        v = msg[key]
        v = decode_header(v)[0]
        v = v[0].decode(v[1])
        return v
    usender = sender.replace('Foo',u'Föo')
    ureceiver = receiver.replace('Bar',u'Bär')
    usubject = u'sübject'
    body = 'body\nmessage'
    ubody = u'bödy\nmessage'
    msg = create_mail(usender,ureceiver,usubject,body,headers={'X-Spam':'No'})
    assert get_header(msg,'From') == usender
    assert get_header(msg,'To') == ureceiver
    assert get_header(msg,'Subject') == usubject
    assert msg['X-Spam'] == 'No'
    assert msg.get_charset() == 'us-ascii'
    assert msg.get_payload(decode=False) == body

    msg = create_mail(sender,receiver,'subject',ubody)
    assert not msg['X-Spam']
    _mail_addreplace_header(msg,'X-Spam','No')
    assert msg['X-Spam'] == 'No'
    _mail_addreplace_header(msg,'X-Spam','Yes')
    assert msg['X-Spam'] == 'Yes'
    assert msg.get_charset() == 'UTF-8'
    assert mail_payload(msg) == ubody

    attachment = 'some\nattachment'
    uattachment = u'söme\nattachment'
    attach=create_mime(attachment)
    uattach=create_mime(uattachment,charset='utf-8')
    for variant in range(1,4):
        unibody,uniatt  = variant&1,variant&2
        msg = create_mail(sender,receiver,'subject',ubody if unibody else body,
            attach=[uattach if uniatt else attach])
        assert not msg.get_charset()
        submsg = msg.get_payload(0)
        if unibody:
            assert submsg.get_charset() == 'UTF-8'
            assert submsg.get_payload(decode=True).decode('UTF-8') == ubody
        else:
            assert submsg.get_charset() == 'us-ascii'
            assert submsg.get_payload(decode=False) == body
        submsg = msg.get_payload(1)
        if uniatt:
            assert submsg.get_charset() == 'UTF-8'
            assert submsg.get_payload(decode=True).decode('UTF-8') == uattachment
        else:
            assert submsg.get_charset() == 'us-ascii'
            assert submsg.get_payload(decode=False) == attachment
コード例 #3
0
def attachments():
    s = u'über\n1\n2'
    a0 = create_mime('uber')
    a1 = create_mime(s)
    a2 = create_mime(s,encoding='base64')
    a3 = create_mime(s,encoding='quoted-printable')
    a4 = create_mime(s,encoding='8bit')
    a5 = create_mime(s.encode('iso8859-1'),charset='iso8859-1')
    a6 = create_mime(s.encode('iso8859-1'),charset='iso8859-1',encoding='base64')
    a7 = create_mime(s.encode('iso8859-1'),charset='iso8859-1',encoding='quoted-printable')
    a8 = create_mime(s.encode('iso8859-1'),charset='iso8859-1',encoding='8bit')
    return [a0,a1,a2,a3,a4,a5,a6,a7,a8]
コード例 #4
0
ファイル: test_gpg.py プロジェクト: ttanner/kryptomime
 def test_uni_sign_attach(self,bilateral):
     usender = sender.replace('Foo','Föo')
     ureceiver = receiver.replace('Bar','Bär')
     attachment = create_mime(u'söme\nattachment',charset='utf-8')
     msgatt = create_mail(usender,ureceiver,u'sübject',u'bödy\nmessage',
         attach=[attachment],charset='utf-8')
     self.sign(bilateral, msgatt, inline=False)
コード例 #5
0
def test_attach():
    attachment = create_mime('some\nattachment')
    msg = create_mail(sender,receiver,'subject','body\nmessage',attach=[attachment])
    # boundary is generated randomly by as_string - hardcode here
    msg.set_boundary('===============1808028167789866750==')
    prot = _protected(msg)
    assert prot.as_string() == msg.as_string()
    prot = protect_mail(msg,linesep='\n',sevenbit=True)
    assert prot.as_string() == msg.as_string()
コード例 #6
0
ファイル: test_gpg.py プロジェクト: movermeyer/kryptomime
 def test_uni_sign_attach(self, bilateral):
     usender = sender.replace('Foo', 'Föo')
     ureceiver = receiver.replace('Bar', 'Bär')
     attachment = create_mime(u'söme\nattachment', charset='utf-8')
     msgatt = create_mail(usender,
                          ureceiver,
                          u'sübject',
                          u'bödy\nmessage',
                          attach=[attachment],
                          charset='utf-8')
     self.sign(bilateral, msgatt, inline=False)
コード例 #7
0
ファイル: mails.py プロジェクト: edemocracy/ekklesia
def encode_mail(sender, receiver, data):
    "data must be validated by check_mail"
    from kryptomime.mail import create_mail, create_mime, check_charset, protect_mail
    from time import time as epochtime
    import email.utils
    from email.mime.text import MIMEText
    from six import iteritems
    from idapi.models import Message
    subject = data['subject']
    time = data.get('date')
    if not time: time = epochtime()
    parts = data.get('parts',None)
    if parts: # multi-part
        mail = None
        for i,part in enumerate(parts):
            ctype = part.get('content-type','text/plain').lower().split('/')
            encoding = part.get('content-encoding')
            content = part['content']
            content, charset = check_charset(content,part.get('content-charset'))
            if not i:
                msg = create_mail(sender,receiver,subject,content,time=time,subtype=ctype[1],
                    charset=charset,encoding=encoding,attach=[])
            else:
                msg = create_mime(content,*ctype,charset=charset,encoding=encoding)
                filename= part.get('filename')
                filename = dict(filename=filename) if filename else {}
                msg.add_header('Content-Disposition', 'attachment', **filename)
            params = part.get('content-params',{})
            if params:
                for k,v in iteritems(params):
                    msg.set_param(k,v)
            if i: mail.attach(msg)
            else: mail = msg
    else: # single part
        ctype = data.get('content-type','text/plain').lower().split('/')
        encoding = data.get('content-encoding')
        body, charset = check_charset(data['content'],data.get('content-charset'))
        mail = create_mail(sender,receiver,subject,body,time=time,subtype=ctype[1],
                charset=charset,encoding=encoding)
        params = data.get('content-params',{})
        if params:
            for k,v in iteritems(params):
                mail.set_param(k,v)
    return protect_mail(mail)
コード例 #8
0
ファイル: mails.py プロジェクト: gitgovgithub/ekklesia
def encode_mail(msg, sender):
    from kryptomime.mail import create_mail, create_mime, check_charset
    from time import time as epochtime
    import email.utils
    from email.mime.text import MIMEText
    from six import iteritems
    from idapi.models import Message
    user, data = msg.user, msg.data
    receiver = user.email
    subject = data['subject']
    time = data.get('date', epochtime())
    parts = data.get('parts', None)
    if parts:  # multi-part
        mail = None
        for i, part in enumerate(parts):
            ctype = part.get('content-type', 'text/plain').lower().split('/')
            encoding = part.get('content-encoding')
            content = part['content']
            content, charset = check_charset(content,
                                             part.get('content-charset'))
            if i:
                msg = create_mime(content,
                                  *ctype,
                                  charset=charset,
                                  encoding=encoding)
                filename = part.get('filename')
                filename = dict(filename=filename) if filename else {}
                msg.add_header('Content-Disposition', 'attachment', **filename)
            else:
                assert ctype[0] == 'text'
                msg = create_mail(sender,
                                  receiver,
                                  subject,
                                  content,
                                  time=time,
                                  subtype=ctype[1],
                                  charset=charset,
                                  encoding=encoding)
            params = part.get('content-params', {})
            if params:
                assert type(params) == dict
                for k, v in iteritems(params):
                    msg.set_param(k, v)
            if i: mail.attach(msg)
            else: mail = msg
    else:  # single part
        ctype = data.get('content-type', 'text/plain').lower().split('/')
        assert ctype[0] == 'text'
        encoding = data.get('content-encoding')
        body, charset = check_charset(data['content'],
                                      data.get('content-charset'))
        mail = create_mail(sender,
                           receiver,
                           subject,
                           body,
                           time=time,
                           subtype=ctype[1],
                           charset=charset,
                           encoding=encoding)
        params = data.get('content-params', {})
        if params:
            assert type(params) == dict
            for k, v in iteritems(params):
                mail.set_param(k, v)
    #print mail
    return mail