#!/usr/bin/env python #encoding: utf-8 import kopano from kopano.errors import NotFoundError from MAPI.Util import * import json import sys def opt_args(): parser = kopano.parser('skpcfm') parser.add_option("--user", dest="user", action="store", help="Run script for user") parser.add_option("--list", dest="list", action="store_true", help="List recipients history") parser.add_option("--backup", dest="backup", action="store_true", help="Backup recipients history") parser.add_option("--restore", dest="restore", action="store_true", help="Restore recipients history") parser.add_option("--restore-file", dest="restorefile", action="store", help="Restore from an other file then username.json") parser.add_option("--remove", dest="remove", action="store", help="Remove recipients ") parser.add_option("--remove-all", dest="removeall", action="store_true", help="Remove complete recipients history") parser.add_option("--dry-run", dest="dryrun", action="store_true", help="Test script") return parser.parse_args() def main(): options, args = opt_args() if not options.user: print('Please use:\n %s --user ' % (sys.argv[0])) sys.exit(0) user = kopano.Server(options).user(options.user) try: webapp = user.store.prop(0X6773001F).value except NotFoundError: webapp = dict(recipients=[]) webapp = json.loads(webapp) if options.backup: if len(webapp['recipients']) == 0: print('Property PR_EC_RECIPIENT_HISTORY_JSON_W not found . User might have never used recipient history before.', file=sys.stderr) sys.exit(1) f = open('%s.json' % user.name, 'w') f.write(json.dumps(webapp, sort_keys=True, indent=4, separators=(',', ': '))) f.close() sys.exit(0) if options.restore: if options.restorefile: filename = options.restorefile else: filename = '%s.json' % user.name with open(filename) as data_file: data = json.load(data_file) user.store.mapiobj.SetProps([SPropValue(0X6773001F, u'%s' % json.dumps(data))]) user.store.mapiobj.SaveChanges(KEEP_OPEN_READWRITE) sys.exit(0) if options.list: print(json.dumps(webapp, sort_keys=True, indent=4, separators=(',', ': '))) sys.exit(0) if options.remove: newlist = json.loads('{"recipients":[]}') for rec in webapp['recipients']: if options.remove in rec['display_name'] or options.remove in rec['smtp_address'] \ or options.remove in rec['email_address']: print('removing contact %s [%s]' % (rec['display_name'], rec['smtp_address'])) else: newlist['recipients'].append(rec) if not options.dryrun: user.store.mapiobj.SetProps([SPropValue(0X6773001F, u'%s' % json.dumps(newlist))]) user.store.mapiobj.SaveChanges(KEEP_OPEN_READWRITE) sys.exit(0) if options.removeall: newlist = json.loads('{"recipients":[]}') if not options.dryrun: user.store.mapiobj.SetProps([SPropValue(0X6773001F, u'%s' % json.dumps(newlist))]) user.store.mapiobj.SaveChanges(KEEP_OPEN_READWRITE) sys.exit(0) if __name__ == "__main__": main()