Exemplo n.º 1
0
def test_ab_contact_searchpath(ab, gab_contact_folder):
    searchpath = ab.GetSearchPath(MAPI_UNICODE)
    assert len(searchpath) == 2
    assert PpropFindProp(searchpath[0], PR_DISPLAY_NAME_W) == SPropValue(
        0x3001001F, 'Global Address Book')
    assert PpropFindProp(searchpath[1], PR_DISPLAY_NAME_W) == SPropValue(
        0x3001001F, 'User Folder')
Exemplo n.º 2
0
def test_ab_folder_single_contact(gab_contact_folder, gab_contacts,
                                  single_contact):
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    eid = PpropFindProp(rows[0], PR_ENTRYID)
    usercont = gab_contacts.OpenEntry(eid.Value, None, 0)
    contents = usercont.GetContentsTable(MAPI_UNICODE)
    rows = contents.QueryRows(-1, 0)
    assert len(rows) == 1
    eid = PpropFindProp(rows[0], PR_ENTRYID)
    contact = usercont.OpenEntry(eid.Value, None, 0)
    assert contact
Exemplo n.º 3
0
def test_ab_folder_multi_hierarchy(gab_contact_folder, gab_custom_folder, ab,
                                   abroot):
    gab_contacts = assert_get_contact_folder(ab, abroot)
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    assert len(rows) == 2

    display_name = PpropFindProp(rows[0], PR_DISPLAY_NAME_W)
    assert display_name.Value == 'User Folder'

    display_name = PpropFindProp(rows[1], PR_DISPLAY_NAME_W)
    assert display_name.Value == 'Custom Folder'
Exemplo n.º 4
0
def test_public_contacts(ab, abroot, gab_public_contact, public_contact):
    gab_contacts = assert_get_contact_folder(ab, abroot)
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    assert len(rows) == 1
    displayname = PpropFindProp(rows[0], PR_DISPLAY_NAME_W)
    assert displayname.Value == 'Public Contacts'

    eid = PpropFindProp(rows[0], PR_ENTRYID)
    usercont = gab_contacts.OpenEntry(eid.Value, None, 0)
    contents = usercont.GetContentsTable(MAPI_UNICODE)
    rows = contents.QueryRows(-1, 0)
    assert len(rows) == 1
Exemplo n.º 5
0
def assert_get_contact_folder(ab, abroot):
    hierarchy = abroot.GetHierarchyTable(MAPI_UNICODE)
    eid, store_eid = None, None
    for row in hierarchy.QueryRows(-1, 0):
        prop = PpropFindProp(row, PR_AB_PROVIDER_ID)
        if prop.Value == CONTACTS_GUID:
            store_eid = PpropFindProp(row, PR_AB_PROVIDER_ID)
            eid = PpropFindProp(row, PR_ENTRYID)
            break

    assert store_eid
    assert eid

    return ab.OpenEntry(eid.Value, None, 0)
Exemplo n.º 6
0
def test_ab_depth(abroot, gab_contact_folder):
    hierarchy = abroot.GetHierarchyTable(MAPI_UNICODE | CONVENIENT_DEPTH)
    hierarchy.Restrict(
        SPropertyRestriction(RELOP_EQ, PR_AB_PROVIDER_ID,
                             SPropValue(PR_AB_PROVIDER_ID, CONTACTS_GUID)), 0)
    rows = hierarchy.QueryRows(-1, 0)
    assert len(rows) == 2

    assert PpropFindProp(rows[0],
                         PR_DISPLAY_NAME_W).Value == 'Kopano Contacts Folders'
    assert PpropFindProp(rows[0], PR_DEPTH).Value == 0

    assert PpropFindProp(rows[1], PR_DISPLAY_NAME_W).Value == 'User Folder'
    assert PpropFindProp(rows[1], PR_DEPTH).Value == 1
Exemplo n.º 7
0
def get_gab_contacts_rows(gab_contacts):
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    eid = PpropFindProp(rows[0], PR_ENTRYID)
    usercont = gab_contacts.OpenEntry(eid.Value, None, 0)
    contents = usercont.GetContentsTable(MAPI_UNICODE)
    return contents.QueryRows(-1, 0)
Exemplo n.º 8
0
def test_shared_contacts(ab, abroot, gab_shared_contacts):
    gab_contacts = assert_get_contact_folder(ab, abroot)
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    assert len(rows) == 1
    displayname = PpropFindProp(rows[0], PR_DISPLAY_NAME_W)
    assert displayname.Value == 'Shared Contacts'
Exemplo n.º 9
0
def test_html_charset_01(session, store, message, dopt):
    rfc = open(MAILS_PATH.format('html-charset-01.eml'), 'rb').read()
    inetmapi.IMToMAPI(session, store, None, message, rfc, dopt)
    attachtable = message.GetAttachmentTable(0)
    props = attachtable.QueryRows(-1, 0)
    prop = PpropFindProp(props[0], PR_ATTACH_NUM)
    attachment = message.OpenAttach(0, IID_IAttachment, 0)
    props = attachment.GetProps([PR_ATTACH_MIME_TAG_W, PR_ATTACH_DATA_BIN], 0)
    assert props[0].Value == "text/html"
    assert props[1].Value == b"body\xd0\xa7\n"
Exemplo n.º 10
0
def test_ab_folder_incomplete_contact(gab_contact_folder, gab_contacts,
                                      incomplete_contact):
    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    eid = PpropFindProp(rows[0], PR_ENTRYID)
    usercont = gab_contacts.OpenEntry(eid.Value, None, 0)
    contents = usercont.GetContentsTable(MAPI_UNICODE)
    rows = contents.QueryRows(-1, 0)
    # no contact here, since it was invalid!
    assert len(rows) == 0
Exemplo n.º 11
0
def test_unknown_text_charset(session, store, message, dopt):
    rfc = open(MAILS_PATH.format('unknown-text-charset.eml'), 'rb').read()
    inetmapi.IMToMAPI(session, store, None, message, rfc, dopt)
    attachtable = message.GetAttachmentTable(0)
    props = attachtable.QueryRows(-1, 0)
    prop = PpropFindProp(props[0], PR_ATTACH_NUM)
    attachment = message.OpenAttach(0, IID_IAttachment, 0)
    props = attachment.GetProps([PR_ATTACH_MIME_TAG_W, PR_ATTACH_DATA_BIN], 0)

    assert props[0].Value == "text/plain"
    assert props[1].Value == b'\xe2\x98\xba'
Exemplo n.º 12
0
def test_ab_folder_gab_distlist(gab_contact_folder, gab_contacts,
                                gab_distlist):
    '''DistList with GAB contacts'''

    hierarchy = gab_contacts.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    eid = PpropFindProp(rows[0], PR_ENTRYID)
    usercont = gab_contacts.OpenEntry(eid.Value, None, 0)
    contents = usercont.GetContentsTable(MAPI_UNICODE)
    rows = contents.QueryRows(-1, 0)
    assert len(rows) == 1
Exemplo n.º 13
0
def test_rfc2045_sec6_4(session, store, message, dopt):
    # On unknown Content-Transfer-Encodings, the MIME part needs to be
    # read raw and tagged application/octet-stream (RFC 2045 §6.4 pg 17).
    rfc = open(MAILS_PATH.format('unknown-transfer-enc.eml'), 'rb').read()
    inetmapi.IMToMAPI(session, store, None, message, rfc, dopt)
    attachtable = message.GetAttachmentTable(0)
    props = attachtable.QueryRows(-1, 0)
    prop = PpropFindProp(props[0], PR_ATTACH_NUM)
    attachment = message.OpenAttach(0, IID_IAttachment, 0)
    props = attachment.GetProps([PR_ATTACH_MIME_TAG_W, PR_ATTACH_DATA_BIN], 0)

    assert props[0].Value == "application/octet-stream"
    assert props[1].Value == b"=E2=98=BA"
Exemplo n.º 14
0
def test_ab_root_hierarchy(abroot):
    hierarchy = abroot.GetHierarchyTable(MAPI_UNICODE)
    rows = hierarchy.QueryRows(-1, 0)
    assert len(rows) == 3

    providers = 0
    for row in rows:
        prop = PpropFindProp(row, PR_AB_PROVIDER_ID)
        assert prop
        if prop.Value == MUIDECSAB:
            providers |= 1
        if prop.Value == CONTACTS_GUID:
            providers |= 2
    assert providers == (1 | 2)
Exemplo n.º 15
0
def test_redirect_rule(lmtpclient, inbox, outbox, gab_user, rules, sink,
                       create_test_email):
    '''Redirect mail matching subject to KOPANO_TEST_USER'''

    subject = 'forward rule'
    sender = '*****@*****.**'
    receiver = os.getenv('KOPANO_TEST_EMAIL')

    create_forward_rule(rules, subject, gab_user,
                        0x3)  # 3 = FWD_PRESERVE_SENDER | FWD_DO_NOT_MUNGE_MSG)

    msg = create_test_email(sender, receiver, subject, '')
    lmtpclient.sendmail(sender, receiver, msg.as_string())

    sink.WaitForNotification(60)
    table = inbox.GetContentsTable(0)
    rowcount = table.GetRowCount(0)
    assert rowcount == 1

    table = outbox.GetContentsTable(0)
    table.SetColumns([PR_ENTRYID], 0)
    rowcount = table.GetRowCount(0)
    assert rowcount == 1

    rows = table.QueryRows(1, 0)
    assert rows

    item = outbox.OpenEntry(rows[0][0].Value, None, 0)
    reciptable = item.GetRecipientTable(0)

    recips = reciptable.QueryRows(-1, 0)
    assert PpropFindProp(recips[0], PR_RECIPIENT_TYPE).Value == MAPI_TO
    # Sender has no recipient type set
    assert not PpropFindProp(recips[1], PR_RECIPIENT_TYPE)
    assert PpropFindProp(recips[0], PR_EMAIL_ADDRESS).Value == PpropFindProp(
        recips[1], PR_EMAIL_ADDRESS).Value
Exemplo n.º 16
0
def test_forward_external_rule(lmtpclient, inbox, outbox, rules, sink,
                               reply_template, create_test_email):
    '''Forward mail matching subject to [email protected], should be disallowed with an reject in inbox'''
    subject = 'forward external rule'
    sender = '*****@*****.**'
    external = '*****@*****.**'
    receiver = os.getenv('KOPANO_TEST_EMAIL')

    external = [
        SPropValue(PR_ADDRTYPE, b'SMTP'),
        SPropValue(PR_EMAIL_ADDRESS, external.encode()),
        SPropValue(PR_SMTP_ADDRESS, external.encode()),
        SPropValue(PR_DISPLAY_NAME, 'external contractor'.encode()),
        SPropValue(PR_OBJECT_TYPE, 6),
        SPropValue(PR_RECIPIENT_TYPE, MAPI_TO),
        SPropValue(PR_SEARCH_KEY, b'SMTP:' + external.encode())
    ]

    create_forward_rule(rules, subject, [external])

    msg = create_test_email(sender, receiver, subject, '')
    lmtpclient.sendmail(sender, receiver, msg.as_string())

    sink.WaitForNotification(60)
    table = inbox.GetContentsTable(0)
    rowcount = table.GetRowCount(0)
    assert rowcount == 2

    rows = table.QueryRows(2, 0)
    assert subject.encode() == PpropFindProp(rows[0], PR_SUBJECT).Value
    assert b'rule not forwarded (administratively blocked)' in PpropFindProp(
        rows[1], PR_SUBJECT).Value

    table = outbox.GetContentsTable(0)
    rowcount = table.GetRowCount(0)
    assert not rowcount
Exemplo n.º 17
0
def test_get_searchpath(addressbook):
    searchpath = addressbook.GetSearchPath(MAPI_UNICODE)
    # should only contain Global Address Book
    assert len(searchpath) == 1
    assert PpropFindProp(searchpath[0], PR_DISPLAY_NAME_W) == SPropValue(
        0x3001001F, 'Global Address Book')
Exemplo n.º 18
0
def test_ab_getsearchpath(ab):
    searchpath = ab.GetSearchPath(MAPI_UNICODE)
    assert len(searchpath) == 1
    assert PpropFindProp(searchpath[0], PR_DISPLAY_NAME_W) == SPropValue(
        0x3001001F, 'Global Address Book')