PC MAPI: Sample C++ Code to Read Mail Messages
ID: Q140337
|
The information in this article applies to:
-
Microsoft Mail for PC Networks, versions 3.0, 3.2, 3.5
SUMMARY
The simple Messaging Application Programming Interface (MAPI) includes a function that allows developers to access a user's mail messages programmatically. The following code illustrates one way that this can be
done using Microsoft Visual C++ version 1.5 or another C compiler.
MORE INFORMATION
NOTE: The following code implements MAPI.DLL as a static library.
/* readmail.c */
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <mapi.h>
#include <string.h>
int readmail();
long err;
LHANDLE lhSession;
lpMapiMessage FAR *lppMessage;
lpMapiMessage lpMessage;
char szSeedMessageID[512];
char szMessageID[512];
char szTmp[4096];
char szTmp2[50];
LPSTR lpszSeedMessageID=&szSeedMessageID[0];
LPSTR lpszMessageID=&szMessageID[0];
int main()
{
readmail();
return(0);
}
int readmail()
{
/************ Logon **********************/
err = MAPILogon(0L, "", "", MAPI_LOGON_UI, 0L,
&lhSession);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error logging on", "Error", MB_OK);
return(0);
}
/********* Find Messages ********************/
*lpszSeedMessageID = '\0';
// reset MAPIFindNext back to the top again
err = MAPIFindNext(lhSession, 0L, "IPM.Microsoft Mail.Note",
lpszSeedMessageID, 0L, 0L, lpszMessageID);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error finding first message", "Error",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
do
{
lppMessage=(lpMapiMessage FAR *) &lpMessage;
/******** Read Message *************/
err = MAPIReadMail(lhSession, 0L, lpszMessageID,
MAPI_PEEK, 0L, lppMessage);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error during message read", "Error",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
/******* copy Subject and NoteText into string *************/
if((lpMessage->lpszSubject) != NULL){
_fstrcpy(szTmp2, lpMessage->lpszSubject); // Check for NULL
strings
}
else _fstrcpy(szTmp2,"No subject text");
if((lpMessage->lpszNoteText) != NULL){
if(_fstrlen(lpMessage->lpszNoteText)>4096){ // Check for large
message body
MessageBox(0, "Message body to large", "MAPI2.C", MB_OK);
}
_fstrcpy(szTmp, lpMessage->lpszNoteText);
}
else _fstrcpy(szTmp, "No message body");
printf("\nSUBJECT: %s\n", szTmp2);
printf("\nNOTETEXT: \n%s\n", szTmp);
/****** free memory used by MAPI *********************/
err = MAPIFreeBuffer(lpMessage);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error freeing memory", "Error",MB_OK);
}
//get next message ID.
lstrcpy(lpszSeedMessageID, lpszMessageID);
err = MAPIFindNext(lhSession, 0L, "IPM.Microsoft Mail.Note",
lpszSeedMessageID, 0L, 0L, lpszMessageID);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "No more messages", "Warning",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
lppMessage=(lpMapiMessage FAR *) &lpMessage;
}while(err == SUCCESS_SUCCESS);
/************** Logoff ***************/
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
Additional query words:
3.00 3.20 3.50 visual basic read mail
Keywords : MailPCMAPI
Version : WINDOWS:3.0,3.2,3.5
Platform : WINDOWS
Issue type :