def test_optimize_orandfalse(root): restriction = SOrRestriction([ SAndRestriction([ SNotRestriction(SExistRestriction(PR_SUBJECT)), SExistRestriction(PR_SUBJECT) ]) ]) assert_no_results(root, restriction)
def _save_rule(store, userids, deletion): # remove existing rule # XXX update for rule in store.inbox.rules(): if rule.mapirow[PR_RULE_PROVIDER_W] == u'Schedule+ EMS Interface' and \ PR_RULE_ID in rule.mapirow: pr_rule_id = rule.mapirow[PR_RULE_ID] rulerows = [ ROWENTRY(ROW_REMOVE, [SPropValue(PR_RULE_ID, pr_rule_id)]) ] table = store.inbox.mapiobj.OpenProperty( PR_RULES_TABLE, IID_IExchangeModifyTable, 0, 0) table.ModifyTable(0, rulerows) # create new rule row = [ SPropValue(PR_RULE_LEVEL, 0), SPropValue(PR_RULE_NAME_W, u"Delegate Meetingrequest service"), SPropValue(PR_RULE_PROVIDER_W, u"Schedule+ EMS Interface"), SPropValue(PR_RULE_SEQUENCE, 0), SPropValue(PR_RULE_STATE, 1), SPropValue(PR_RULE_PROVIDER_DATA, b''), ] actions = [] userprops = [] for userid in userids: user = store.server.gab.OpenEntry(userid, None, MAPI_BEST_ACCESS) props = user.GetProps(USERPROPS, MAPI_UNICODE) # Hardcode recipient type to TO props.append(SPropValue(PR_RECIPIENT_TYPE, MAPI_TO)) userprops.append(props) actions.append( ACTION(ACTTYPE.OP_DELEGATE, 0, None, None, 0, actFwdDelegate(userprops))) if deletion: actions.append(ACTION(ACTTYPE.OP_DELETE, 0, None, None, 0, None)) row.append(SPropValue(PR_RULE_ACTIONS, ACTIONS(1, actions))) cond = SAndRestriction([ SContentRestriction( FL_PREFIX, PR_MESSAGE_CLASS_W, SPropValue(PR_MESSAGE_CLASS_W, u"IPM.Schedule.Meeting")), SNotRestriction(SExistRestriction(PR_DELEGATED_BY_RULE)), SOrRestriction([ SNotRestriction(SExistRestriction(PR_SENSITIVITY)), SPropertyRestriction(RELOP_NE, PR_SENSITIVITY, SPropValue(PR_SENSITIVITY, 2)) ]) ]) row.append(SPropValue(PR_RULE_CONDITION, cond)) rulerows = [ROWENTRY(ROW_ADD, row)] table = store.inbox.mapiobj.OpenProperty(PR_RULES_TABLE, IID_IExchangeModifyTable, 0, 0) table.ModifyTable(0, rulerows)
def test_optimize_ormultianndfalse(root): restriction = SOrRestriction([ SAndRestriction([ SNotRestriction(SExistRestriction(PR_SUBJECT)), SExistRestriction(PR_SUBJECT) ]), SAndRestriction([ SContentRestriction(FL_SUBSTRING | FL_IGNORECASE, PR_SUBJECT, SPropValue(PR_SUBJECT, b'unknown')), SContentRestriction(FL_SUBSTRING | FL_IGNORECASE, PR_SUBJECT, SPropValue(PR_SUBJECT, b'unknown')) ]) ]) assert_no_results(root, restriction)
def main(): options, _ = parser('ksplu').parse_args() log = logger(options) server = server(options=options, auth_user='******', auth_pass='', parse_args=True) restriction = Restriction( mapiobj=SNotRestriction(SExistRestriction(PR_EC_IMAP_EMAIL_SIZE))) for user in server.users(): # XXX multi-company.. # Skip users without IMAP enabled if not 'imap' in user.features: log.info('Skipping user %s, IMAP disabled', user.name) continue log.debug('Processing user %s', user.name) for folder in user.store.folders(): # Inbox folder's container class is None.. if folder.container_class != 'IPF.Note' and folder.container_class != None: continue log.info('Processing folder %s', folder.name) for item in folder.items(restriction=restriction): log.debug('Processing item %s', item.subject) generate_imap_message(item)
def attendees(self): """Appointment :class:`attendees <Attendee>`.""" # Filter out organizer from all recipients restriction = Restriction( SOrRestriction([ SNotRestriction(SExistRestriction(PR_RECIPIENT_FLAGS)), SBitMaskRestriction(BMR_EQZ, PR_RECIPIENT_FLAGS, recipOrganizer) ])) for row in self.table(PR_MESSAGE_RECIPIENTS, restriction=restriction): yield Attendee(self.server, row)
def GetGab(session): ab = session.OpenAddressBook(0, None, 0) root = ab.OpenEntry(None, None, 0) table = root.GetHierarchyTable(0) table.SetColumns([PR_ENTRYID], TBL_BATCH) restriction = SOrRestriction([ SPropertyRestriction(RELOP_EQ, PR_DISPLAY_TYPE, SPropValue(PR_DISPLAY_TYPE, DT_GLOBAL)), SAndRestriction([ SExistRestriction(PR_EMS_AB_CONTAINERID), SPropertyRestriction(RELOP_EQ, PR_EMS_AB_CONTAINERID, SPropValue(PR_EMS_AB_CONTAINERID, 0)) ]) ]) table.FindRow(restriction, BOOKMARK_BEGINNING, 0) eid = table.QueryRows(1, 0)[0][0].Value return ab.OpenEntry(eid, None, 0)