o365_copy.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from O365 import Account
  2. from O365.address_book import Contact
  3. client_id = '925f74dc-f96a-4718-9ca7-d6cc3fa43e1e'
  4. client_secret = 'SS~8Q~QpBZV9toZuwkzW1XGGen2Hn833spNMtdq5'
  5. account = Account(
  6. (client_id, client_secret),
  7. auth_flow_type='credentials',
  8. tenant_id='2ad0dff5-07ce-4cc2-a852-99ce8b91c218'
  9. )
  10. mailboxes = [
  11. 'bedner@global-cube.de',
  12. 'brandt@global-cube.de',
  13. # 'd.ankenbrand@global-cube.de',
  14. 'gawliczek@global-cube.de',
  15. 'm.geiss@global-cube.de',
  16. 'matarrelli@global-cube.de',
  17. 'winkler@global-cube.de',
  18. 'winter@global-cube.de'
  19. ]
  20. def copy_contact(p_from: Contact, p_to: Contact):
  21. p_to.display_name = p_from.display_name
  22. p_to.name = p_from.name
  23. p_to.surname = p_from.surname
  24. p_to.title = p_from.title
  25. p_to.job_title = p_from.job_title
  26. p_to.company_name = p_from.company_name
  27. p_to.department = p_from.department
  28. p_to.office_location = p_from.office_location
  29. p_to.business_phones = p_from.business_phones
  30. p_to.mobile_phone = p_from.mobile_phone
  31. p_to.home_phones = p_from.home_phones
  32. p_to._Contact__emails = p_from._Contact__emails
  33. p_to.business_address = p_from.business_address
  34. # p_to.home_address = p_from.home_address
  35. p_to.other_address = p_from.other_address
  36. p_to.categories = p_from.categories
  37. p_to.personal_notes = p_from.personal_notes
  38. p_to.save()
  39. def main():
  40. account.authenticate()
  41. shared = account.address_book(resource='adressbuch@global-cube.net', address_book='personal')
  42. shared_contacts = {p.display_name: p for p in shared.get_contacts(limit=None)}
  43. for mailbox in mailboxes:
  44. print(mailbox)
  45. personal = account.address_book(resource=mailbox, address_book='personal')
  46. personal_contacts = {p.display_name: p for p in personal.get_contacts(limit=None)}
  47. extra_contacts = set(personal_contacts.keys()).difference(shared_contacts.keys())
  48. print(extra_contacts)
  49. # p.delete()
  50. for p in shared_contacts.values():
  51. if p.display_name not in personal_contacts:
  52. p_new = personal.new_contact()
  53. copy_contact(p, p_new)
  54. else:
  55. p_existing = personal_contacts[p.display_name]
  56. if p.modified > p_existing.modified:
  57. copy_contact(p, p_existing)
  58. if __name__ == '__main__':
  59. main()
  60. # gal = account.directory()
  61. # mails = [p.mail for p in gal.get_users()]
  62. # print(mails)