summaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/core/sys/windows/mapi.d
blob: 8f8eea1e12bc998d6ff49cc42b6c5e2b9f3b9a74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/**
 * Windows API header module
 *
 * Translated from MinGW Windows headers
 *
 * Authors: Stewart Gordon
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
 * Source: $(DRUNTIMESRC core/sys/windows/_mapi.d)
 */
module core.sys.windows.mapi;
version (Windows):

import core.sys.windows.windef;

// FIXME: check types and grouping of constants

enum {
    SUCCESS_SUCCESS,
    MAPI_USER_ABORT,
    MAPI_E_USER_ABORT        = MAPI_USER_ABORT,
    MAPI_E_FAILURE,
    MAPI_E_LOGIN_FAILURE,
    MAPI_E_LOGON_FAILURE     = MAPI_E_LOGIN_FAILURE,
    MAPI_E_DISK_FULL         = 4,
    MAPI_E_INSUFFICIENT_MEMORY,
    MAPI_E_ACCESS_DENIED,
    MAPI_E_BLK_TOO_SMALL     = MAPI_E_ACCESS_DENIED, // = 6
    MAPI_E_TOO_MANY_SESSIONS = 8,
    MAPI_E_TOO_MANY_FILES,
    MAPI_E_TOO_MANY_RECIPIENTS,
    MAPI_E_ATTACHMENT_NOT_FOUND,
    MAPI_E_ATTACHMENT_OPEN_FAILURE,
    MAPI_E_ATTACHMENT_WRITE_FAILURE,
    MAPI_E_UNKNOWN_RECIPIENT,
    MAPI_E_BAD_RECIPTYPE,
    MAPI_E_NO_MESSAGES,
    MAPI_E_INVALID_MESSAGE,
    MAPI_E_TEXT_TOO_LARGE,
    MAPI_E_INVALID_SESSION,
    MAPI_E_TYPE_NOT_SUPPORTED,
    MAPI_E_AMBIGUOUS_RECIPIENT,
    MAPI_E_AMBIGUOUS_RECIP   = MAPI_E_AMBIGUOUS_RECIPIENT,
    MAPI_E_MESSAGE_IN_USE,
    MAPI_E_NETWORK_FAILURE,
    MAPI_E_INVALID_EDITFIELDS,
    MAPI_E_INVALID_RECIPS,
    MAPI_E_NOT_SUPPORTED  // = 26
}

enum {
    MAPI_ORIG,
    MAPI_TO,
    MAPI_CC,
    MAPI_BCC
}

enum MAPI_LOGON_UI          = 0x0001;
enum MAPI_NEW_SESSION       = 0x0002;
enum MAPI_FORCE_DOWNLOAD    = 0x1000;
enum MAPI_LOGOFF_SHARED     = 0x0001;
enum MAPI_LOGOFF_UI         = 0x0002;
enum MAPI_DIALOG            = 0x0008;
enum MAPI_UNREAD_ONLY       = 0x0020;
enum MAPI_LONG_MSGID        = 0x4000;
enum MAPI_GUARANTEE_FIFO    = 0x0100;
enum MAPI_ENVELOPE_ONLY     = 0x0040;
enum MAPI_PEEK              = 0x0080;
enum MAPI_BODY_AS_FILE      = 0x0200;
enum MAPI_SUPPRESS_ATTACH   = 0x0800;
enum MAPI_AB_NOMODIFY       = 0x0400;
enum MAPI_OLE               = 0x0001;
enum MAPI_OLE_STATIC        = 0x0002;
enum MAPI_UNREAD            = 0x0001;
enum MAPI_RECEIPT_REQUESTED = 0x0002;
enum MAPI_SENT              = 0x0004;

alias uint FLAGS;
alias uint* LPULONG;
alias ULONG_PTR LHANDLE;
alias ULONG_PTR* LPLHANDLE;

struct MapiRecipDesc {
    ULONG  ulReserved;
    ULONG  ulRecipClass;
    LPSTR  lpszName;
    LPSTR  lpszAddress;
    ULONG  ulEIDSize;
    LPVOID lpEntryID;
}
alias MapiRecipDesc* lpMapiRecipDesc;

struct MapiFileDesc {
    ULONG  ulReserved;
    ULONG  flFlags;
    ULONG  nPosition;
    LPSTR  lpszPathName;
    LPSTR  lpszFileName;
    LPVOID lpFileType;
}
alias MapiFileDesc* lpMapiFileDesc;

struct MapiFileTagExt {
    ULONG  ulReserved;
    ULONG  cbTag;
    LPBYTE lpTag;
    ULONG  cbEncoding;
    LPBYTE lpEncoding;
}
alias MapiFileTagExt* lpMapiFileTagExt;

struct MapiMessage {
    ULONG           ulReserved;
    LPSTR           lpszSubject;
    LPSTR           lpszNoteText;
    LPSTR           lpszMessageType;
    LPSTR           lpszDateReceived;
    LPSTR           lpszConversationID;
    FLAGS           flFlags;
    lpMapiRecipDesc lpOriginator;
    ULONG           nRecipCount;
    lpMapiRecipDesc lpRecips;
    ULONG           nFileCount;
    lpMapiFileDesc  lpFiles;
}
alias MapiMessage* lpMapiMessage;

extern (Windows) {
    ULONG MAPILogon(ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE);
    ULONG MAPISendMail(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG);
    ULONG MAPISendDocuments(ULONG_PTR, LPSTR, LPSTR, LPSTR, ULONG);
    ULONG MAPIReadMail(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG, lpMapiMessage*);
    ULONG MAPIFindNext(LHANDLE, ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPSTR);
    ULONG MAPIResolveName(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG,
      lpMapiRecipDesc*);
    ULONG MAPIAddress(LHANDLE, ULONG_PTR, LPSTR, ULONG, LPSTR, ULONG,
      lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*);
    ULONG MAPIFreeBuffer(LPVOID);
    ULONG MAPIDetails(LHANDLE, ULONG_PTR, lpMapiRecipDesc, FLAGS, ULONG);
    ULONG MAPISaveMail(LHANDLE, ULONG_PTR, lpMapiMessage lpszMessage, FLAGS,
      ULONG, LPSTR);
    ULONG MAPIDeleteMail(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG);
    ULONG MAPILogoff(LHANDLE, ULONG_PTR, FLAGS, ULONG);
    // Netscape extensions
    ULONG MAPIGetNetscapeVersion();
    ULONG MAPI_NSCP_SynchronizeClient(LHANDLE, ULONG);

    // Handles for use with GetProcAddress
    alias ULONG function(ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE)
      LPMAPILOGON;
    alias ULONG function(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG)
      LPMAPISENDMAIL;
    alias ULONG function(ULONG_PTR, LPSTR, LPSTR, LPSTR, ULONG)
      LPMAPISENDDOCUMENTS;
    alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG, lpMapiMessage*)
      LPMAPIREADMAIL;
    alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, LPSTR, FLAGS, ULONG, LPSTR)
      LPMAPIFINDNEXT;
    alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG,
      lpMapiRecipDesc*) LPMAPIRESOLVENAME;
    alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, ULONG, LPSTR, ULONG,
      lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*) LPMAPIADDRESS;
    alias ULONG function(LPVOID lpv) LPMAPIFREEBUFFER;
    alias ULONG function(LHANDLE, ULONG_PTR, lpMapiRecipDesc, FLAGS, ULONG)
      LPMAPIDETAILS;
    alias ULONG function(LHANDLE, ULONG_PTR, lpMapiMessage, FLAGS, ULONG, LPSTR)
      LPMAPISAVEMAIL;
    alias ULONG function(LHANDLE, ULONG_PTR, LPSTR, FLAGS, ULONG)
      LPMAPIDELETEMAIL;
    alias ULONG function(LHANDLE, ULONG_PTR, FLAGS, ULONG) LPMAPILOGOFF;
}