gboolean exchange_mapi_remove_items (uint32_t olFolder, mapi_id_t fid, GSList *mids) { mapi_object_t obj_store; mapi_object_t obj_folder; mapi_object_t obj_table; enum MAPISTATUS retval; mapi_object_t obj_message; struct SRowSet SRowSet; struct SPropTagArray *SPropTagArray; struct mapi_SPropValue_array properties_array; TALLOC_CTX *mem_ctx; int i=0; gpointer retobj = NULL; mapi_id_t *id_messages; GSList *tmp = mids; LOCK (); mem_ctx = talloc_init("Evolution"); mapi_object_init(&obj_folder); mapi_object_init(&obj_store); mapi_object_init(&obj_message); retval = OpenMsgStore(&obj_store); if (retval != MAPI_E_SUCCESS) { g_warning ("remove items openmsgstore failed: %d\n", retval); UNLOCK (); return FALSE; } printf("Opening folder %016llx\n", fid); /* We now open the folder */ retval = OpenFolder(&obj_store, fid, &obj_folder); if (retval != MAPI_E_SUCCESS) { g_warning ("remove items openfolder failed: %d\n", retval); UNLOCK (); return FALSE; } id_messages = talloc_array(mem_ctx, uint64_t, g_slist_length (mids)); for (; tmp; tmp=tmp->next, i++) { struct folder_data *data = tmp->data; id_messages [i] = data->id; printf("ID here %016llx \n", data->id); printf("Deleting %016llx\n", id_messages[i]); } retval = DeleteMessage(&obj_folder, id_messages, i); if (retval != MAPI_E_SUCCESS) { g_warning ("remove items Delete Message %d %d failed: %d\n", i, g_slist_length(mids), retval); mapi_errstr("DeleteMessage ", GetLastError()); UNLOCK (); return FALSE; } mapi_object_release(&obj_folder); UNLOCK (); return TRUE; }