home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
- //
- // This is a header file for the MAPI support within
- // Communicator.
- //
- // Written by: Rich Pizzarro (rhp@netscape.com)
- //
- #ifndef _NSCPMAPI
- #define _NSCPMAPI
-
- #ifndef MAPI_OLE // Because MSFT doesn't do this for us :-(
- #include <mapi.h> // for MAPI specific types...
- #endif
-
- #ifdef WIN16
- typedef unsigned char UCHAR;
- #endif
-
-
- #define MAX_NAME_LEN 256
- #define MAX_PW_LEN 256
- #define MAX_MSGINFO_LEN 512
- #define MAX_CON 4 // Maximum MAPI session supported
- #define MAX_POINTERS 32
-
- //
- // The MAPI class that will act as the internal mechanism for
- // Communicator to control multiple MAPI sessions.
- //
- class CMAPIConnection
- {
- protected:
- LONG m_ID;
- BOOL m_defaultConnection;
- LONG m_sessionCount;
- LONG m_messageIndex;
- LPVOID m_cookie;
- UCHAR m_messageFindInfo[MAX_MSGINFO_LEN];
- UCHAR m_profileName[MAX_NAME_LEN];
- UCHAR m_password[MAX_PW_LEN];
-
- // Methods
-
- public:
- CMAPIConnection ( LONG, LPSTR, LPSTR );
- ~CMAPIConnection ( );
-
- // ID related methods
- LONG GetID( ) { return m_ID; } ;
-
- // Dealing with the default session...
- BOOL IsDefault( ) { return m_defaultConnection; } ;
- void SetDefault( BOOL flag ) { m_defaultConnection = flag; } ;
-
- // For handling multiple sessions on a profile name...
- LONG GetSessionCount( ) { return m_sessionCount; } ;
- void IncrementSessionCount() { ++m_sessionCount; } ;
- void DecrementSessionCount() { --m_sessionCount; } ;
-
- // Information retrieval stuff...
- LPSTR GetProfileName( ) { return (LPSTR) m_profileName; };
- LPSTR GetPassword( ) { return (LPSTR) m_password; };
-
- // Dealing with message information...
- void SetMessageIndex( LONG mIndex ) { m_messageIndex = mIndex; } ;
- LONG GetMessageIndex( ) { return m_messageIndex; };
-
- void SetMessageFindInfo( LPSTR info ) { lstrcpy((LPSTR)m_messageFindInfo, info); } ;
- LPSTR GetMessageFindInfo( ) { return (LPSTR) m_messageFindInfo; };
-
- // For enumerating Messages...
- void SetMapiListContext( LPVOID cookie) { m_cookie = cookie; } ;
- LPVOID GetMapiListContext( ) { return m_cookie; };
- };
-
- //
- // Defines needed for requests being made with the WM_COPYDATA call...
- //
- typedef enum {
- NSCP_MAPIStartRequestID = 0,
- NSCP_MAPILogon,
- NSCP_MAPILogoff,
- NSCP_MAPIFree,
- NSCP_MAPISendMail,
- NSCP_MAPISendDocuments,
- NSCP_MAPIFindNext,
- NSCP_MAPIReadMail,
- NSCP_MAPISaveMail,
- NSCP_MAPIDeleteMail,
- NSCP_MAPIAddress,
- NSCP_MAPIDetails,
- NSCP_MAPIResolveName,
- NSCP_MAPIEndRequestID // Note: this is a marker for MAPI IPC requests
- } NSCP_IPC_REQUEST;
-
- //
- // This is to keep track of the pointers allocated in the MAPI DLL
- // and deal with them correctly.
- //
- #define MAPI_MESSAGE_TYPE 0
- #define MAPI_RECIPIENT_TYPE 1
-
- typedef struct {
- LPVOID lpMem;
- UCHAR memType;
- } memTrackerType;
-
- //
- // This is the generic message that WM_COPYDATA will send to the
- // Communicator product to allow it to attach to shared memory.
- // NOTE: On Win16, this will simply reference a pointer.
- //
- typedef struct {
- UCHAR smemName[64]; // Name of shared memory
- DWORD smemSize; // Size of shared memory
- LPVOID lpsmem; // Will be really used in Win16 only
- } MAPIIPCType;
-
- //
- // These are message specific structures that will be used for
- // the various MAPI operations.
- //
- typedef struct {
- ULONG ulUIParam;
- FLAGS flFlags;
- LHANDLE lhSession;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- // LPSTR strSequence, // LPSTR lpszProfileName, LPSTR lpszPassword
- // This is here to document the fact there will be a string sequence at
- // this location
- } MAPILogonType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- } MAPILogoffType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- // The following is the "FLAT" representation of the (lpMapiMessage lpMessage)
- // argument of this structure
- FLAGS MSG_flFlags; // unread,return receipt
- ULONG MSG_nRecipCount; // Number of recipients
- ULONG MSG_nFileCount; // # of file attachments
- ULONG MSG_ORIG_ulRecipClass; // Recipient class - MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG
- BYTE dataBuf[1]; // For easy referencing
- //
- // This is where it gets CONFUSING...the following buffer of memory is a
- // contiguous chunk of memory for various strings that are part of this
- // multilevel structure. For any of the following structure, any numbers
- // are represented by strings that will have to be converted back to numeric
- // values with atoi() calls.
-
- // String 0: LPSTR lpszSubject; // Message Subject
- // String 1: LPSTR lpszNoteText FILE NAME; // Message Text will be
- // stored into a temp file and this will be the pointer to that file.
- // String 2: LPSTR lpszDateReceived; // in YYYY/MM/DD HH:MM format
- // String 3: LPSTR lpszConversationID; // conversation thread ID
- //
- // The following are for the originator of the message. Only ONE of these.
- //
- // String 4: LPSTR lpszName; // Originator name
- // String 5: LPSTR lpszAddress; // Originator address (optional)
- //
- // The following strings are for the recipients for this message. There are
- // MSG_nRecipCount of these in a row:
- //
- // for (i=0; i<MSG_nRecipCount; i++)
- // String x: LPSTR lpszRecipClass (ULONG) // Recipient class - MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG
- // String x: LPSTR lpszName; // Recipient N name
- // String x: LPSTR lpszAddress; // Recipient N address (optional)
- //
- // Now, finally, add the attachments for this beast. There are MSG_nFileCount
- // attachments so it would look like the following:
- //
- // for (i=0; i<MSG_nFileCount; i++)
- //
- // String x: LPSTR lpszPathName // Fully qualified path of the attached file.
- // // This path should include the disk drive letter and directory name.
- // String x: LPSTR lpszFileName // The display name for the attached file
- //
- } MAPISendMailType;
-
- typedef struct {
- ULONG ulUIParam;
- ULONG nFileCount;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- BYTE dataBuf[1]; // For easy referencing
- //
- // The sequence of strings to follow are groups of PathName/FileName couples.
- // The strings will be parsed in MAPI[32].DLL and then put into this format:
- //
- // for (i=0; i<nFileCount; i++)
- //
- // String x: LPSTR lpszPathName // Fully qualified path of the attached file.
- // // This path should include the disk drive letter and directory name.
- // String x: LPSTR lpszFileName // The display name for the attached file
- } MAPISendDocumentsType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- UCHAR lpszSeedMessageID[MAX_MSGINFO_LEN];
- UCHAR lpszMessageID[MAX_MSGINFO_LEN];
- } MAPIFindNextType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- UCHAR lpszMessageID[MAX_MSGINFO_LEN];
- } MAPIDeleteMailType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- UCHAR lpszName[MAX_NAME_LEN];
- // These are returned by Communicator
- UCHAR lpszABookID[MAX_NAME_LEN];
- UCHAR lpszABookName[MAX_NAME_LEN];
- UCHAR lpszABookAddress[MAX_NAME_LEN];
- } MAPIResolveNameType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- UCHAR lpszABookID[MAX_NAME_LEN];
- } MAPIDetailsType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- UCHAR lpszMessageID[MAX_MSGINFO_LEN];
- //
- // The following is the "FLAT" representation of the (lpMapiMessage lpMessage)
- // argument of this structure
- //
- FLAGS MSG_flFlags; // unread, return or receipt
- ULONG MSG_nRecipCount; // Number of recipients
- ULONG MSG_nFileCount; // # of file attachments
- ULONG MSG_ORIG_ulRecipClass; // Recipient class - MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG
- //
- // Output parameter for blob of information that will live on disk.
- //
- UCHAR lpszBlob[MAX_MSGINFO_LEN]; // file name on disk
- //
- // The format of this blob of information will be:
- //
- // String 0: LPSTR lpszSubject; // Message Subject
- // String 1: LPSTR lpszNoteText FILE NAME; // Message Text will be
- // stored into a temp file and this will be the pointer to that file.
- // String 2: LPSTR lpszDateReceived; // in YYYY/MM/DD HH:MM format
- // String 3: LPSTR lpszConversationID; // conversation thread ID
- //
- // The following are for the originator of the message. Only ONE of these.
- //
- // String 4: LPSTR lpszName; // Originator name
- // String 5: LPSTR lpszAddress; // Originator address (optional)
- //
- // The following strings are for the recipients for this message. There are
- // MSG_nRecipCount of these in a row:
- //
- // for (i=0; i<MSG_nRecipCount; i++)
- // String x: LPSTR lpszName; // Recipient N name
- // String x: LPSTR lpszAddress; // Recipient N address (optional)
- // String x: LPSTR lpszRecipClass // recipient class - sprintf of ULONG
- //
- // Now, finally, add the attachments for this beast. There are MSG_nFileCount
- // attachments so it would look like the following:
- //
- // for (i=0; i<MSG_nFileCount; i++)
- //
- // String x: LPSTR lpszPathName // Fully qualified path of the attached file.
- // // This path should include the disk drive letter and directory name.
- // String x: LPSTR lpszFileName // The display name for the attached file
- //
- } MAPIReadMailType;
-
- typedef struct {
- LHANDLE lhSession;
- ULONG ulUIParam;
- FLAGS flFlags;
- UCHAR lpszCaption[MAX_MSGINFO_LEN];
- DWORD ipcWorked; // Necessary for IPC check with Communicator
- // The following is the "FLAT" representation of the (lpMapiRecipDesc lpRecips)
- // argument of this structure
- ULONG nRecips; // number of recips to start with...
- ULONG nNewRecips; // number of recips returned...
- UCHAR lpszBlob[MAX_MSGINFO_LEN]; // file name for blob of information
- // that will live on disk.
- BYTE dataBuf[1]; // For easy referencing
- //
- // The following contiguous chunk of memory is the buffer that holds
- // the recipients to load into the address picker...
- //
- // for (i=0; i<MSG_nRecipCount; i++)
- // String x: LPSTR lpszRecipClass (ULONG) // Recipient class - MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG
- // String x: LPSTR lpszName; // Recipient N name
- // String x: LPSTR lpszAddress; // Recipient N address (optional)
- //
- } MAPIAddressType;
-
- #endif // _NSCPMAPI
-