This example shows how to fetch mail from the server.
This example shows how to fetch mail from the server.We initialize MAPI library with the profiles database path, retrieve the default profile name and open connections to both the Exchange message store provider (EMSMDB) and Exchange Address Book provider (EMSABP).
Now we have opened a connection to the Exchange message store provider, we can open the user mailbox store with OpenMsgStore() This function will return a set of pre-defined folder unique IDs (stored on double values) and a pointer to the upper object we can access in MAPI hierarchy.
We now customize the MAPI view and set the columns with the property tags we want to access: PR_FID (Folder Identifier) and PR_MID (Message identifier). MAPI uses unique and permanent identifiers to classify objects. These identifiers are double values (8 bytes) and never change until you move the object to another location.
#define DEFAULT_PROFDB "%s/.openchange/profiles.ldb"
int main(int argc, char *argv[])
{
enum MAPISTATUS retval;
struct mapi_SPropValue_array props_all;
struct SRowSet rowset;
struct SPropTagArray *SPropTagArray;
char *profname;
char *profdb;
uint32_t Numerator;
uint32_t Denominator;
uint32_t i;
mem_ctx = talloc_named(NULL, 0, "fetchmail");
profdb = talloc_asprintf(mem_ctx, DEFAULT_PROFDB, getenv("HOME"));
retval =
MapiLogonEx(mapi_ctx, &session, profname, NULL);
retval =
OpenFolder(&obj_store, id_inbox, &obj_folder);
talloc_free(mem_ctx);
while ((retval =
QueryRows(&obj_table, Denominator, TBL_ADVANCE, &rowset))
!= -1 && rowset.cRows) {
for (i = 0; i < rowset.cRows; i++) {
retval =
OpenMessage(&obj_store, *fid, *mid, &obj_message, 0x0);
if (retval != MAPI_E_NOT_FOUND) {
}
}
}
return (0);
}
_PUBLIC_ enum MAPISTATUS GetContentsTable(mapi_object_t *obj_container, mapi_object_t *obj_table, uint8_t TableFlags, uint32_t *RowCount)
Definition IMAPIContainer.c:80
_PUBLIC_ enum MAPISTATUS GetPropsAll(mapi_object_t *obj, uint32_t flags, struct mapi_SPropValue_array *properties)
Definition IMAPIProp.c:497
_PUBLIC_ enum MAPISTATUS OpenMsgStore(struct mapi_session *session, mapi_object_t *obj_store)
Definition IMAPISession.c:268
_PUBLIC_ enum MAPISTATUS SetColumns(mapi_object_t *obj_table, struct SPropTagArray *properties)
Definition IMAPITable.c:51
_PUBLIC_ enum MAPISTATUS QueryRows(mapi_object_t *obj_table, uint16_t row_count, enum QueryRowsFlags flags, enum ForwardRead forward_read, struct SRowSet *rowSet)
Definition IMAPITable.c:244
_PUBLIC_ enum MAPISTATUS QueryPosition(mapi_object_t *obj_table, uint32_t *Numerator, uint32_t *Denominator)
Definition IMAPITable.c:150
_PUBLIC_ enum MAPISTATUS Logoff(mapi_object_t *obj_store)
Definition IMSProvider.c:366
_PUBLIC_ enum MAPISTATUS OpenFolder(mapi_object_t *obj_store, mapi_id_t id_folder, mapi_object_t *obj_folder)
Definition IMsgStore.c:48
_PUBLIC_ enum MAPISTATUS GetDefaultProfile(struct mapi_context *mapi_ctx, char **profname)
Definition IProfAdmin.c:1315
_PUBLIC_ enum MAPISTATUS OpenMessage(mapi_object_t *obj_store, mapi_id_t id_folder, mapi_id_t id_message, mapi_object_t *obj_message, uint8_t ulFlags)
Definition IStoreFolder.c:62
_PUBLIC_ enum MAPISTATUS MAPIFreeBuffer(void *ptr)
Definition IUnknown.c:83
_PUBLIC_ enum MAPISTATUS MAPIInitialize(struct mapi_context **_mapi_ctx, const char *profiledb)
Definition cdo_mapi.c:221
_PUBLIC_ void MAPIUninitialize(struct mapi_context *mapi_ctx)
Definition cdo_mapi.c:272
_PUBLIC_ enum MAPISTATUS MapiLogonEx(struct mapi_context *mapi_ctx, struct mapi_session **session, const char *profname, const char *password)
Definition cdo_mapi.c:59
enum MAPISTATUS mapi_object_init(mapi_object_t *)
Definition mapi_object.c:72
void mapi_object_release(mapi_object_t *)
Definition mapi_object.c:90
enum MAPISTATUS GetDefaultFolder(mapi_object_t *, uint64_t *, const uint32_t)
Definition simple_mapi.c:236
void mapidump_message(struct mapi_SPropValue_array *, const char *, mapi_object_t *)
Definition mapidump.c:388
struct SPropTagArray * set_SPropTagArray(TALLOC_CTX *, uint32_t,...)
Definition property.c:47
const void * find_SPropValue_data(struct SRow *, uint32_t)
Definition property.c:363
struct mapi_object mapi_object_t
uint64_t mapi_id_t
Definition mapi_object.h:35
#define MAPI_RETVAL_IF(x, e, c)
Definition mapicode.h:24
#define MAPI_UNICODE
Definition mapidefs.h:28
#define olFolderInbox
Definition mapidefs.h:239
#define PR_FID
Definition property_altnames.h:476
#define PR_MID
Definition property_altnames.h:720
Definition mapi_context.h:31
TALLOC_CTX * mem_ctx
Definition mapi_context.h:32
Definition mapi_provider.h:47