OSDN Git Service

Add Show Whole Project Checkbox at commitdlg.
[tortoisegit/TortoiseGitJp.git] / src / crashrpt / MailMsg.h
1 ///////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  Module: MailMsg.h\r
4 //\r
5 //    Desc: This class encapsulates the MAPI and CMC mail functions.\r
6 //\r
7 // Copyright (c) 2003 Michael Carruth\r
8 //\r
9 ///////////////////////////////////////////////////////////////////////////////\r
10 \r
11 #pragma once\r
12 \r
13 #include <xcmc.h>          // CMC function defs\r
14 #include <mapi.h>          // MAPI function defs\r
15 \r
16 #ifndef TStrStrVector\r
17 // STL generates various warnings.\r
18 // 4100: unreferenced formal parameter\r
19 // 4663: C++ language change: to explicitly specialize class template...\r
20 // 4018: signed/unsigned mismatch\r
21 // 4245: conversion from <a> to <b>: signed/unsigned mismatch\r
22 #pragma warning(push, 3)\r
23 #pragma warning(disable: 4100)\r
24 #pragma warning(disable: 4663)\r
25 #pragma warning(disable: 4018)\r
26 #pragma warning(disable: 4245)\r
27 #include <vector>\r
28 #pragma warning(pop)\r
29 \r
30 typedef std::pair<string,string> TStrStrPair;\r
31 typedef std::vector<TStrStrPair> TStrStrVector;\r
32 #endif // !defined TStrStrVector\r
33 \r
34 //\r
35 // Define CMC entry points\r
36 //\r
37 typedef CMC_return_code (FAR PASCAL *LPCMCLOGON) \\r
38    (CMC_string, CMC_string, CMC_string, CMC_object_identifier, \\r
39    CMC_ui_id, CMC_uint16, CMC_flags, CMC_session_id FAR*, \\r
40    CMC_extension FAR*);\r
41 \r
42 typedef CMC_return_code (FAR PASCAL *LPCMCSEND) \\r
43    (CMC_session_id, CMC_message FAR*, CMC_flags, \\r
44    CMC_ui_id, CMC_extension FAR*);\r
45 \r
46 typedef CMC_return_code (FAR PASCAL *LPCMCLOGOFF) \\r
47    (CMC_session_id, CMC_ui_id, CMC_flags, CMC_extension FAR*);\r
48 \r
49 typedef CMC_return_code (FAR PASCAL *LPCMCQUERY) \\r
50    (CMC_session_id, CMC_enum, CMC_buffer, CMC_extension FAR*);\r
51 \r
52 \r
53 ////////////////////////////// Class Definitions /////////////////////////////\r
54 \r
55 // ===========================================================================\r
56 // CMailMsg\r
57 // \r
58 // See the module comment at top of file.\r
59 //\r
60 class CMailMsg  \r
61 {\r
62 public:\r
63         CMailMsg();\r
64         virtual ~CMailMsg();\r
65 \r
66    //-----------------------------------------------------------------------------\r
67    // SetTo\r
68    //    Sets the Email:To address\r
69    //\r
70    // Parameters\r
71    //    sAddress    Address\r
72    //    sName       Optional name\r
73    //\r
74    // Return Values\r
75    //    CMailMsg reference\r
76    //\r
77    // Remarks\r
78    //    Only one To address can be set.  If called more than once\r
79    //    the last address will be used.\r
80    //\r
81    CMailMsg& \r
82    SetTo(\r
83       string sAddress, \r
84       string sName = _T("")\r
85       );\r
86 \r
87    //-----------------------------------------------------------------------------\r
88    // SetCc\r
89    //    Sets the Email:Cc address\r
90    //\r
91    // Parameters\r
92    //    sAddress    Address\r
93    //    sName       Optional name\r
94    //\r
95    // Return Values\r
96    //    CMailMsg reference\r
97    //\r
98    // Remarks\r
99    //    Multiple Cc addresses can be set.\r
100    //\r
101    CMailMsg& \r
102    SetCc(\r
103       string sAddress, \r
104       string sName = _T("")\r
105       );\r
106 \r
107    //-----------------------------------------------------------------------------\r
108    // SetBc\r
109    //    Sets the Email:Bcc address\r
110    //\r
111    // Parameters\r
112    //    sAddress    Address\r
113    //    sName       Optional name\r
114    //\r
115    // Return Values\r
116    //    CMailMsg reference\r
117    //\r
118    // Remarks\r
119    //    Multiple Bcc addresses can be set.\r
120    //\r
121    CMailMsg& \r
122    SetBc(\r
123       string sAddress, \r
124       string sName = _T("")\r
125       );\r
126 \r
127    //-----------------------------------------------------------------------------\r
128    // SetFrom\r
129    //    Sets the Email:From address\r
130    //\r
131    // Parameters\r
132    //    sAddress    Address\r
133    //    sName       Optional name\r
134    //\r
135    // Return Values\r
136    //    CMailMsg reference\r
137    //\r
138    // Remarks\r
139    //    Only one From address can be set.  If called more than once\r
140    //    the last address will be used.\r
141    //\r
142    CMailMsg& \r
143    SetFrom(\r
144       string sAddress, \r
145       string sName = _T("")\r
146       );\r
147 \r
148    //-----------------------------------------------------------------------------\r
149    // SetSubect\r
150    //    Sets the Email:Subject\r
151    //\r
152    // Parameters\r
153    //    sSubject    Subject\r
154    //\r
155    // Return Values\r
156    //    CMailMsg reference\r
157    //\r
158    // Remarks\r
159    //    none\r
160    //\r
161    CMailMsg& \r
162    SetSubject(\r
163       string sSubject\r
164       ) {m_sSubject = sSubject; return *this;};\r
165 \r
166    //-----------------------------------------------------------------------------\r
167    // SetMessage\r
168    //    Sets the Email message body\r
169    //\r
170    // Parameters\r
171    //    sMessage    Message body\r
172    //\r
173    // Return Values\r
174    //    CMailMsg reference\r
175    //\r
176    // Remarks\r
177    //    none\r
178    //\r
179    CMailMsg& \r
180    SetMessage(\r
181       string sMessage\r
182       ) {m_sMessage = sMessage; return *this;};\r
183 \r
184    //-----------------------------------------------------------------------------\r
185    // AddAttachment\r
186    //    Attaches a file to the email\r
187    //\r
188    // Parameters\r
189    //    sAttachment Fully qualified file name\r
190    //    sTitle      File display name\r
191    //\r
192    // Return Values\r
193    //    CMailMsg reference\r
194    //\r
195    // Remarks\r
196    //    none\r
197    //\r
198    CMailMsg& \r
199    AddAttachment(\r
200       string sAttachment, \r
201       string sTitle = _T("")\r
202       );\r
203 \r
204    //-----------------------------------------------------------------------------\r
205    // Send\r
206    //    Send the email.\r
207    //\r
208    // Parameters\r
209    //    none\r
210    //\r
211    // Return Values\r
212    //    TRUE if successful\r
213    //\r
214    // Remarks\r
215    //    First simple MAPI is used if unsuccessful CMC is used.\r
216    //\r
217    BOOL Send();\r
218 \r
219 protected:\r
220 \r
221    //-----------------------------------------------------------------------------\r
222    // CMCSend\r
223    //    Send email using CMC functions.\r
224    //\r
225    // Parameters\r
226    //    none\r
227    //\r
228    // Return Values\r
229    //    TRUE if successful\r
230    //\r
231    // Remarks\r
232    //    none\r
233    //\r
234    BOOL CMCSend();\r
235 \r
236    //-----------------------------------------------------------------------------\r
237    // MAPISend\r
238    //    Send email using MAPI functions.\r
239    //\r
240    // Parameters\r
241    //    none\r
242    //\r
243    // Return Values\r
244    //    -1: cancelled; 0: other failure; 1: success\r
245    //\r
246    // Remarks\r
247    //    none\r
248    //\r
249    int MAPISend();\r
250 \r
251    //-----------------------------------------------------------------------------\r
252    // Initialize\r
253    //    Initialize MAPI32.dll\r
254    //\r
255    // Parameters\r
256    //    none\r
257    //\r
258    // Return Values\r
259    //    TRUE if successful\r
260    //\r
261    // Remarks\r
262    //    none\r
263    //\r
264    BOOL Initialize();\r
265 \r
266    //-----------------------------------------------------------------------------\r
267    // Uninitialize\r
268    //    Uninitialize MAPI32.dll\r
269    //\r
270    // Parameters\r
271    //    none\r
272    //\r
273    // Return Values\r
274    //    void\r
275    //\r
276    // Remarks\r
277    //    none\r
278    //\r
279    void Uninitialize();\r
280 \r
281         /*\r
282         +------------------------------------------------------------------------------\r
283         |\r
284         |       Function:       cResolveName()\r
285         |\r
286         |       Parameters:     [IN]    lpszName = Name of e-mail recipient to resolve.\r
287         |                               [OUT]   ppRecips = Pointer to a pointer to an lpMapiRecipDesc\r
288         |\r
289         |       Purpose:        Resolves an e-mail address and returns a pointer to a \r
290         |                               MapiRecipDesc structure filled with the recipient information\r
291         |                               contained in the address book.\r
292         |\r
293         |       Note:           ppRecips is allocated off the heap using MAPIAllocateBuffer.\r
294         |                               Any user of this method must be sure to release ppRecips when \r
295         |                               done with it using either MAPIFreeBuffer or cFreeBuffer.\r
296         +-------------------------------------------------------------------------------\r
297         */\r
298    int cResolveName( LHANDLE m_lhSession, const char * lpszName, lpMapiRecipDesc *ppRecip );\r
299 \r
300    TStrStrVector  m_from;                       // From <address,name>\r
301    TStrStrVector  m_to;                         // To <address,name>\r
302    TStrStrVector  m_cc;                         // Cc <address,name>\r
303    TStrStrVector  m_bcc;                        // Bcc <address,name>\r
304    TStrStrVector  m_attachments;                // Attachment <file,title>\r
305    string        m_sSubject;                   // EMail subject\r
306    string        m_sMessage;                   // EMail message\r
307 \r
308    HMODULE        m_hMapi;                      // Handle to MAPI32.DLL\r
309    LPCMCQUERY     m_lpCmcQueryConfiguration;    // Cmc func pointer\r
310    LPCMCLOGON     m_lpCmcLogon;                 // Cmc func pointer\r
311    LPCMCSEND      m_lpCmcSend;                  // Cmc func pointer\r
312    LPCMCLOGOFF    m_lpCmcLogoff;                // Cmc func pointer\r
313    LPMAPILOGON    m_lpMapiLogon;                // Mapi func pointer\r
314    LPMAPISENDMAIL m_lpMapiSendMail;             // Mapi func pointer\r
315    LPMAPILOGOFF   m_lpMapiLogoff;               // Mapi func pointer\r
316    LPMAPIRESOLVENAME m_lpMapiResolveName;       // Mapi func pointer\r
317    LPMAPIFREEBUFFER m_lpMapiFreeBuffer;         // Mapi func pointer\r
318    \r
319    BOOL           m_bReady;                     // MAPI is loaded\r
320 };\r