update-resource-recipients 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env python
  2. from MAPI.Util import *
  3. import os, sys
  4. import locale
  5. def GetSelfRecipient(session):
  6. ab = session.OpenAddressBook(0, None, 0)
  7. identity = session.QueryIdentity()
  8. user = ab.OpenEntry(identity, None, 0)
  9. props = user.GetProps([PR_ACCOUNT, PR_ADDRTYPE, PR_DISPLAY_NAME, PR_DISPLAY_TYPE, PR_DISPLAY_TYPE_EX,
  10. PR_EMAIL_ADDRESS, PR_ENTRYID, PR_OBJECT_TYPE, PR_SEARCH_KEY, PR_SMTP_ADDRESS], 0)
  11. props += [SPropValue(PR_RECIPIENT_ENTRYID, PpropFindProp(props, PR_ENTRYID).Value),
  12. SPropValue(PR_RECIPIENT_FLAGS, 256 | 1),
  13. SPropValue(PR_RECIPIENT_TRACKSTATUS, 0),
  14. SPropValue(PR_RECIPIENT_TYPE, MAPI_BCC)]
  15. return props
  16. def AddRecipientToAppointments(calendar, recip):
  17. ctable = calendar.GetContentsTable(MAPI_DEFERRED_ERRORS)
  18. ctable.SetColumns([PR_ENTRYID], TBL_BATCH)
  19. res = SNotRestriction(SSubRestriction(PR_MESSAGE_RECIPIENTS,
  20. SPropertyRestriction(RELOP_EQ, PR_SEARCH_KEY, PpropFindProp(recip, PR_SEARCH_KEY))
  21. ))
  22. ctable.Restrict(res, TBL_BATCH)
  23. rows = ctable.QueryRows(-1, 0)
  24. print "Updating %d items" % len(rows)
  25. for row in rows:
  26. msg = calendar.OpenEntry(row[0].Value, None, MAPI_BEST_ACCESS)
  27. msg.ModifyRecipients(MODRECIP_ADD, [recip])
  28. msg.SaveChanges(0)
  29. print "Done"
  30. def main(argv = None):
  31. if argv is None:
  32. argv = sys.argv
  33. if len(argv) < 2:
  34. print "Usage: %s <username>" % argv[0]
  35. return 1
  36. session = OpenECSession(argv[1], "", os.getenv("KOPANO_SOCKET", "default:"))
  37. store = GetDefaultStore(session)
  38. root = store.OpenEntry(None, None, 0)
  39. ceid = root.GetProps([PR_IPM_APPOINTMENT_ENTRYID], 0)[0]
  40. calendar = store.OpenEntry(ceid.Value, None, MAPI_BEST_ACCESS)
  41. recip = GetSelfRecipient(session)
  42. AddRecipientToAppointments(calendar, recip)
  43. return 0
  44. if __name__ == '__main__':
  45. locale.setlocale(locale.LC_ALL, '')
  46. sys.exit(main())