1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_mapi.d)
9  */
10 /// Automatically imported and edited from the druntime module
11 /// core.sys.windows.mapi for the auto-generated win32 package.
12 module win32.mapi;
13 //version (Windows):
14 @system:
15 
16 import win32.windef;
17 
18 // FIXME: check types and grouping of constants
19 
20 enum {
21     SUCCESS_SUCCESS,
22     MAPI_USER_ABORT,
23     MAPI_E_USER_ABORT        = MAPI_USER_ABORT,
24     MAPI_E_FAILURE,
25     MAPI_E_LOGIN_FAILURE,
26     MAPI_E_LOGON_FAILURE     = MAPI_E_LOGIN_FAILURE,
27     MAPI_E_DISK_FULL         = 4,
28     MAPI_E_INSUFFICIENT_MEMORY,
29     MAPI_E_ACCESS_DENIED,
30     MAPI_E_BLK_TOO_SMALL     = MAPI_E_ACCESS_DENIED, // = 6
31     MAPI_E_TOO_MANY_SESSIONS = 8,
32     MAPI_E_TOO_MANY_FILES,
33     MAPI_E_TOO_MANY_RECIPIENTS,
34     MAPI_E_ATTACHMENT_NOT_FOUND,
35     MAPI_E_ATTACHMENT_OPEN_FAILURE,
36     MAPI_E_ATTACHMENT_WRITE_FAILURE,
37     MAPI_E_UNKNOWN_RECIPIENT,
38     MAPI_E_BAD_RECIPTYPE,
39     MAPI_E_NO_MESSAGES,
40     MAPI_E_INVALID_MESSAGE,
41     MAPI_E_TEXT_TOO_LARGE,
42     MAPI_E_INVALID_SESSION,
43     MAPI_E_TYPE_NOT_SUPPORTED,
44     MAPI_E_AMBIGUOUS_RECIPIENT,
45     MAPI_E_AMBIGUOUS_RECIP   = MAPI_E_AMBIGUOUS_RECIPIENT,
46     MAPI_E_MESSAGE_IN_USE,
47     MAPI_E_NETWORK_FAILURE,
48     MAPI_E_INVALID_EDITFIELDS,
49     MAPI_E_INVALID_RECIPS,
50     MAPI_E_NOT_SUPPORTED  // = 26
51 }
52 
53 enum {
54     MAPI_ORIG,
55     MAPI_TO,
56     MAPI_CC,
57     MAPI_BCC
58 }
59 
60 enum MAPI_LOGON_UI          = 0x0001;
61 enum MAPI_NEW_SESSION       = 0x0002;
62 enum MAPI_FORCE_DOWNLOAD    = 0x1000;
63 enum MAPI_LOGOFF_SHARED     = 0x0001;
64 enum MAPI_LOGOFF_UI         = 0x0002;
65 enum MAPI_DIALOG            = 0x0008;
66 enum MAPI_UNREAD_ONLY       = 0x0020;
67 enum MAPI_LONG_MSGID        = 0x4000;
68 enum MAPI_GUARANTEE_FIFO    = 0x0100;
69 enum MAPI_ENVELOPE_ONLY     = 0x0040;
70 enum MAPI_PEEK              = 0x0080;
71 enum MAPI_BODY_AS_FILE      = 0x0200;
72 enum MAPI_SUPPRESS_ATTACH   = 0x0800;
73 enum MAPI_AB_NOMODIFY       = 0x0400;
74 enum MAPI_OLE               = 0x0001;
75 enum MAPI_OLE_STATIC        = 0x0002;
76 enum MAPI_UNREAD            = 0x0001;
77 enum MAPI_RECEIPT_REQUESTED = 0x0002;
78 enum MAPI_SENT              = 0x0004;
79 
80 alias uint FLAGS;
81 alias uint* LPULONG;
82 alias ULONG_PTR LHANDLE;
83 alias ULONG_PTR* LPLHANDLE;
84 
85 struct MapiRecipDesc {
86     ULONG  ulReserved;
87     ULONG  ulRecipClass;
88     LPSTR  lpszName;
89     LPSTR  lpszAddress;
90     ULONG  ulEIDSize;
91     LPVOID lpEntryID;
92 }
93 alias MapiRecipDesc* lpMapiRecipDesc;
94 
95 struct MapiFileDesc {
96     ULONG  ulReserved;
97     ULONG  flFlags;
98     ULONG  nPosition;
99     LPSTR  lpszPathName;
100     LPSTR  lpszFileName;
101     LPVOID lpFileType;
102 }
103 alias MapiFileDesc* lpMapiFileDesc;
104 
105 struct MapiFileTagExt {
106     ULONG  ulReserved;
107     ULONG  cbTag;
108     LPBYTE lpTag;
109     ULONG  cbEncoding;
110     LPBYTE lpEncoding;
111 }
112 alias MapiFileTagExt* lpMapiFileTagExt;
113 
114 struct MapiMessage {
115     ULONG           ulReserved;
116     LPSTR           lpszSubject;
117     LPSTR           lpszNoteText;
118     LPSTR           lpszMessageType;
119     LPSTR           lpszDateReceived;
120     LPSTR           lpszConversationID;
121     FLAGS           flFlags;
122     lpMapiRecipDesc lpOriginator;
123     ULONG           nRecipCount;
124     lpMapiRecipDesc lpRecips;
125     ULONG           nFileCount;
126     lpMapiFileDesc  lpFiles;
127 }
128 alias MapiMessage* lpMapiMessage;
129 
130 extern (Windows) {
131     ULONG MAPILogon(ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE);
132     ULONG MAPISendMail(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG);
133     ULONG MAPISendDocuments(ULONG_PTR, LPSTR, LPSTR, LPSTR, ULONG);
134     ULONG MAPIReadMail(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG, lpMapiMessage*);
135     ULONG MAPIFindNext(LHANDLE, ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPSTR);
136     ULONG MAPIResolveName(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG,
137       lpMapiRecipDesc*);
138     ULONG MAPIAddress(LHANDLE, ULONG_PTR, LPSTR, ULONG, LPSTR, ULONG,
139       lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*);
140     ULONG MAPIFreeBuffer(LPVOID);
141     ULONG MAPIDetails(LHANDLE, ULONG_PTR, lpMapiRecipDesc, FLAGS, ULONG);
142     ULONG MAPISaveMail(LHANDLE, ULONG_PTR, lpMapiMessage lpszMessage, FLAGS,
143       ULONG, LPSTR);
144     ULONG MAPIDeleteMail(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG);
145     ULONG MAPILogoff(LHANDLE, ULONG_PTR, FLAGS, ULONG);
146     // Netscape extensions
147     ULONG MAPIGetNetscapeVersion();
148     ULONG MAPI_NSCP_SynchronizeClient(LHANDLE, ULONG);
149 
150     // Handles for use with GetProcAddress
151     alias ULONG function(ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE)
152       LPMAPILOGON;
153     alias ULONG function(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG)
154       LPMAPISENDMAIL;
155     alias ULONG function(ULONG_PTR, LPSTR, LPSTR, LPSTR, ULONG)
156       LPMAPISENDDOCUMENTS;
157     alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG, lpMapiMessage*)
158       LPMAPIREADMAIL;
159     alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPSTR)
160       LPMAPIFINDNEXT;
161     alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG,
162       lpMapiRecipDesc*) LPMAPIRESOLVENAME;
163     alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, ULONG, LPSTR, ULONG,
164       lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*) LPMAPIADDRESS;
165     alias ULONG function(LPVOID lpv) LPMAPIFREEBUFFER;
166     alias ULONG function(LHANDLE, ULONG_PTR, lpMapiRecipDesc, FLAGS, ULONG)
167       LPMAPIDETAILS;
168     alias ULONG function(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG, LPSTR)
169       LPMAPISAVEMAIL;
170     alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG)
171       LPMAPIDELETEMAIL;
172     alias ULONG function(LHANDLE, ULONG_PTR, FLAGS, ULONG) LPMAPILOGOFF;
173 }