from exchangelib import OAUTH2, Configuration, Account, DELEGATE, OAuth2Credentials, Identity
import vcard
def normalize_name(full_name):
return full_name.replace('/', '-').replace('\\', '-')[:40]
def normalize_phone_number(phone_number: str):
if phone_number.startswith('0'):
phone_number = '+49 ' + phone_number[1:]
for c in '()/?':
phone_number = phone_number.replace(c, '')
return phone_number.replace(' -', '-').replace('- ', '-').replace(' ', ' ')
def login(email=None) -> Account:
credentials = OAuth2Credentials(
client_id='925f74dc-f96a-4718-9ca7-d6cc3fa43e1e',
client_secret='SS~8Q~QpBZV9toZuwkzW1XGGen2Hn833spNMtdq5',
tenant_id='2ad0dff5-07ce-4cc2-a852-99ce8b91c218',
identity=Identity(primary_smtp_address='bedner@global-cube.de'),
)
# credentials = Credentials(username='bedner@global-cube.de', password='platinum512#')
config = Configuration(
server='outlook.office365.com',
credentials=credentials,
auth_type=OAUTH2
)
if not email:
email = 'adressbuch@global-cube.net'
account = Account(
primary_smtp_address=email, config=config,
autodiscover=False, access_type=DELEGATE
)
return account
def export_contact_list(account: Account):
# folder = account.root / 'AllContacts'
phone_types = {
'BusinessPhone': 'gesch.', 'MobilePhone': 'Mobil',
'OtherFax': 'Andere', 'HomePhone': 'privat',
'CarPhone': 'Andere2', 'OtherTelephone': 'Andere3',
'Pager': 'Pager'
}
contact_list = []
# organizations = vcard.get_orgs()
organizations = {}
for p in account.contacts.all():
# print(p.display_name)
p_name = p.display_name
if p.company_name:
p_name = p.display_name + ' - ' + p.company_name
elif p_name in organizations:
p.company_name = organizations[p_name][0]
p_name = p.display_name + ' - ' + p.company_name
p.save(update_fields=['company_name'])
p_name = normalize_name(p_name)
for entry in p.phone_numbers[:2]:
if entry.phone_number:
phone = normalize_phone_number(entry.phone_number)
contact_list.append(p_name + ' (' + phone_types.get(entry.label, '') + ');' + phone)
# print(phone_types)
block_size = 997
blocks = (len(contact_list) // block_size) + 1
for b in range(blocks):
with open(f'contacts/export/kontakte_{b}.csv', 'w', encoding='utf-8') as fwh:
fwh.write('generiert mit Templateversion:;v16.1.00\n')
fwh.write('Voll-Lieferung\n')
fwh.write('Nr.;Name;Rufnummer\n')
for i, c in enumerate(contact_list[block_size * b:block_size * (b + 1)], 1):
fwh.write(str(block_size * b + i) + ';' + c + '\n')
print('--')
def main():
account = login()
# export_contact_list(account)
for p in account.contacts.all()[0:1]:
print(p)
account2 = login('m.geiss@global-cube.de')
for p in account2.contacts.all()[0:1]:
print(p)
# for f in account.root.children.folders:
# print(f.name)
# gal = account.contacts / 'GAL Contacts'
# for p in account.protocol.resolve_names()[:10]:
# print(p.display_name)
# print(account.root.tree())
if __name__ == '__main__':
main()