python winapi outlook mapi

Modificar contactos de Microsoft Outlook desde Python



winapi mapi (1)

He escrito algunas herramientas de Python en el pasado para extraer datos de mis contactos de Outlook. Ahora, estoy tratando de modificar mis contactos de Outlook. Descubro que mis cambios están siendo notados por Outlook, pero no se mantienen. Parece que estoy actualizando algunos caché, pero no el registro real.

El código es directo.

import win32com.client import pywintypes o = win32com.client.Dispatch("Outlook.Application") ns = o.GetNamespace("MAPI") profile = ns.Folders.Item("My Profile Name") contacts = profile.Folders.Item("Contacts") contact = contacts.Items[43] # Grab a random contact, for this example. print "About to overwrite ",contact.FirstName, contact.LastName contact.categories = ''Supplier'' # Override the categories # Edit: I don''t always do these last steps. ns = None o = None

En este punto, cambio a Outlook, que se abre en la vista Tarjetas de direcciones detalladas.

Miro el resumen de contacto (sin abrirlo) y la categoría no se modifica (¿no se actualiza?).

Abro el contacto y su categoría HA cambiado, a veces . (No estoy seguro de cuándo, pero parece que está relacionado con la caché). Si ha cambiado, me indica Guardar cambios cuando lo cierro, lo cual es extraño, porque no he cambiado nada en la interfaz de usuario de Outlook.

Si salgo y reinicio Outlook, los cambios se han ido.

Sospecho que no puedo llamar a SaveChanges , pero no puedo ver qué objeto lo admite.

Entonces mi pregunta es:

  • ¿Debo llamar a SaveChanges? Si es así, donde está?
  • ¿Estoy cometiendo algún otro error tonto, que está causando que mis datos sean descartados?

Creo que hay un método .Save () en el contacto, por lo que debe agregar:

contacto.Guardar ()