1 #include <libmapi/libmapi.h>
3 #define DEFAULT_PROFDB "%s/.openchange/profiles.ldb"
5 int main(int argc, char *argv[])
7 enum MAPISTATUS retval;
8 struct mapi_context *mapi_ctx;
10 struct mapi_session *session = NULL;
11 mapi_object_t obj_store;
12 mapi_object_t obj_folder;
13 mapi_object_t obj_table;
14 mapi_object_t obj_message;
15 struct mapi_SPropValue_array props_all;
16 struct SRowSet rowset;
17 struct SPropTagArray *SPropTagArray;
26 mem_ctx = talloc_named(NULL, 0, "fetchappointment");
29 profdb = talloc_asprintf(mem_ctx, DEFAULT_PROFDB, getenv("HOME"));
30 retval = MAPIInitialize(&mapi_ctx, profdb);
31 MAPI_RETVAL_IF(retval, retval, NULL);
33 /* Find Default Profile */
34 retval = GetDefaultProfile(mapi_ctx, &profname);
35 MAPI_RETVAL_IF(retval, retval, NULL);
37 /* Log on EMSMDB and NSPI */
38 retval = MapiLogonEx(mapi_ctx, &session, profname, NULL);
39 MAPI_RETVAL_IF(retval, retval, NULL);
41 /* Open Message Store */
42 mapi_object_init(&obj_store);
43 retval = OpenMsgStore(session, &obj_store);
44 MAPI_RETVAL_IF(retval, retval, NULL);
46 /* Find Inbox default folder */
47 retval = GetDefaultFolder(&obj_store, &id_inbox, olFolderCalendar);
48 MAPI_RETVAL_IF(retval, retval, NULL);
50 /* Open Inbox folder */
51 mapi_object_init(&obj_folder);
52 retval = OpenFolder(&obj_store, id_inbox, &obj_folder);
53 MAPI_RETVAL_IF(retval, retval, NULL);
55 /* Retrieve Inbox content table */
56 mapi_object_init(&obj_table);
57 retval = GetContentsTable(&obj_folder, &obj_table, 0x0, NULL);
58 MAPI_RETVAL_IF(retval, retval, NULL);
60 /* Create the MAPI table view */
61 SPropTagArray = set_SPropTagArray(mem_ctx, 0x2, PR_FID, PR_MID);
62 retval = SetColumns(&obj_table, SPropTagArray);
63 MAPIFreeBuffer(SPropTagArray);
64 MAPI_RETVAL_IF(retval, retval, mem_ctx);
66 /* Get current cursor position */
67 retval = QueryPosition(&obj_table, &Numerator, &Denominator);
68 MAPI_RETVAL_IF(retval, retval, NULL);
70 /* Iterate through rows */
71 while ((retval = QueryRows(&obj_table, Denominator, TBL_ADVANCE, &rowset)) != -1 && rowset.cRows) {
72 for (i = 0; i < rowset.cRows; i++) {
73 fid = (mapi_id_t *)find_SPropValue_data(&(rowset.aRow[i]), PR_FID);
74 mid = (mapi_id_t *)find_SPropValue_data(&(rowset.aRow[i]), PR_MID);
75 mapi_object_init(&obj_message);
76 retval = OpenMessage(&obj_store, *fid, *mid, &obj_message, 0x0);
77 if (retval != MAPI_E_NOT_FOUND) {
78 retval = GetPropsAll(&obj_message, &props_all);
79 mapidump_appointment(&props_all, NULL);
80 mapi_object_release(&obj_message);
86 /* Release MAPI objects */
87 mapi_object_release(&obj_table);
88 mapi_object_release(&obj_folder);
92 /* Uninitialize MAPI */
93 MAPIUninitialize(mapi_ctx);