mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 04:39:45 +00:00
mapi32: Create new message and show editor window.
This commit is contained in:
parent
6e33bfb767
commit
b4ea2ead8a
@ -25,10 +25,13 @@
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winerror.h"
|
||||
#include "objbase.h"
|
||||
#include "objidl.h"
|
||||
#include "mapi.h"
|
||||
#include "mapix.h"
|
||||
#include "mapiutil.h"
|
||||
@ -59,6 +62,7 @@ static ULONG sendmail_extended_mapi(LHANDLE mapi_session, ULONG_PTR uiparam, lpM
|
||||
LPSPropValue props;
|
||||
ULONG entry_len;
|
||||
DWORD obj_type;
|
||||
IMessage* msg;
|
||||
ULONG values;
|
||||
HRESULT ret;
|
||||
|
||||
@ -147,6 +151,113 @@ static ULONG sendmail_extended_mapi(LHANDLE mapi_session, ULONG_PTR uiparam, lpM
|
||||
IMsgStore_OpenEntry(msg_store, props[0].Value.bin.cb, (LPENTRYID) props[0].Value.bin.lpb,
|
||||
NULL, MAPI_MODIFY, &obj_type, (LPUNKNOWN *) &folder);
|
||||
|
||||
/* Create a new message */
|
||||
if (IMAPIFolder_CreateMessage(folder, NULL, 0, &msg) == S_OK)
|
||||
{
|
||||
ULONG token;
|
||||
SPropValue p;
|
||||
|
||||
/* Define message properties */
|
||||
p.ulPropTag = PR_MESSAGE_FLAGS;
|
||||
p.Value.l = MSGFLAG_FROMME | MSGFLAG_UNSENT;
|
||||
|
||||
IMessage_SetProps(msg, 1, &p, NULL);
|
||||
|
||||
p.ulPropTag = PR_SENTMAIL_ENTRYID;
|
||||
p.Value.bin.cb = props[0].Value.bin.cb;
|
||||
p.Value.bin.lpb = props[0].Value.bin.lpb;
|
||||
IMessage_SetProps(msg, 1,&p, NULL);
|
||||
|
||||
/* Set message subject */
|
||||
if (message->lpszSubject)
|
||||
{
|
||||
p.ulPropTag = PR_SUBJECT_A;
|
||||
p.Value.lpszA = message->lpszSubject;
|
||||
IMessage_SetProps(msg, 1, &p, NULL);
|
||||
}
|
||||
|
||||
/* Set message body */
|
||||
if (message->lpszNoteText)
|
||||
{
|
||||
LPSTREAM stream = NULL;
|
||||
|
||||
if (IMessage_OpenProperty(msg, PR_BODY_A, &IID_IStream, 0,
|
||||
MAPI_MODIFY | MAPI_CREATE, (LPUNKNOWN*) &stream) == S_OK)
|
||||
{
|
||||
IStream_Write(stream, message->lpszNoteText, strlen(message->lpszNoteText)+1, NULL);
|
||||
IStream_Release(stream);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add message attachments */
|
||||
if (message->nFileCount > 0)
|
||||
{
|
||||
FIXME("TODO: %d attachments\n", message->nFileCount);
|
||||
}
|
||||
|
||||
IMessage_SaveChanges(msg, KEEP_OPEN_READWRITE);
|
||||
|
||||
/* Prepare the message form */
|
||||
|
||||
if (IMAPISession_PrepareForm(session, NULL, msg, &token) == S_OK)
|
||||
{
|
||||
ULONG access = 0, status = 0, flags = 0, pc = 0;
|
||||
ULONG pT[2] = {1, PR_MSG_STATUS};
|
||||
|
||||
/* Retrieve message status, flags, access rights and class */
|
||||
|
||||
if (IMessage_GetProps(msg, (LPSPropTagArray) pT, 0, &pc, &props) == S_OK)
|
||||
{
|
||||
status = props->Value.ul;
|
||||
MAPIFreeBuffer(props);
|
||||
}
|
||||
|
||||
pT[1] = PR_MESSAGE_FLAGS;
|
||||
|
||||
if (IMessage_GetProps(msg, (LPSPropTagArray) pT, 0, &pc, &props) == S_OK)
|
||||
{
|
||||
flags = props->Value.ul;
|
||||
MAPIFreeBuffer(props);
|
||||
}
|
||||
|
||||
pT[1] = PR_ACCESS;
|
||||
|
||||
if (IMessage_GetProps(msg, (LPSPropTagArray) pT, 0, &pc, &props) == S_OK)
|
||||
{
|
||||
access = props->Value.ul;
|
||||
MAPIFreeBuffer(props);
|
||||
}
|
||||
|
||||
pT[1] = PR_MESSAGE_CLASS_A;
|
||||
|
||||
if (IMessage_GetProps(msg, (LPSPropTagArray) pT, 0, &pc, &props) == S_OK)
|
||||
{
|
||||
/* Show the message form (edit window) */
|
||||
|
||||
ret = IMAPISession_ShowForm(session, 0, msg_store, folder, NULL,
|
||||
token, NULL, 0, status, flags, access,
|
||||
props->Value.lpszA);
|
||||
|
||||
switch (ret)
|
||||
{
|
||||
case S_OK:
|
||||
retval = SUCCESS_SUCCESS;
|
||||
break;
|
||||
|
||||
case MAPI_E_USER_CANCEL:
|
||||
retval = MAPI_E_USER_ABORT;
|
||||
break;
|
||||
|
||||
default:
|
||||
TRACE("ShowForm failure: %x\n", ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IMessage_Release(msg);
|
||||
}
|
||||
|
||||
/* Free up the resources we've used */
|
||||
IMAPIFolder_Release(folder);
|
||||
IMsgStore_Release(msg_store);
|
||||
|
Loading…
Reference in New Issue
Block a user