sync mapi32 to wine 1.1.39

svn path=/trunk/; revision=45881
This commit is contained in:
Christoph von Wittich 2010-03-05 18:40:20 +00:00
parent 1a12523fbe
commit 7249fc91c0
16 changed files with 250 additions and 155 deletions

View file

@ -0,0 +1,30 @@
/*
* MAPI32 German resources
*
* Copyright 2009 André Hentschel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "Das senden der E-Mails scheiterte, da Sie keinen MAPI E-Mail Programm installiert haben."
IDS_SEND_MAIL, "E-Mail senden"
}

View file

@ -0,0 +1,30 @@
/*
* MAPI32 English resources
*
* Copyright 2009 Owen Rudge for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "Mail sending failed as you do not have a MAPI mail client installed."
IDS_SEND_MAIL, "Send Mail"
}

View file

@ -0,0 +1,33 @@
/*
* MAPI32 Spanish resources
*
* Copyright 2010 José Manuel Ferrer Ortiz
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "El envío de correo ha fallado debido a que no tiene instalado un cliente de correo MAPI."
IDS_SEND_MAIL, "Enviar correo"
}

View file

@ -0,0 +1,33 @@
/*
* MAPI32 French resources
*
* Copyright 2009 Frédéric Delanoy
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "L'envoi de courriel a échoué car aucun client mail MAPI n'est installé."
IDS_SEND_MAIL, "Envoyer un courriel"
}

View file

@ -0,0 +1,33 @@
/*
* MAPI32 Lithuanian resources
*
* Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "Nepavyko išsiųsti laiškų, nes neturite įdiegto MAPI pašto kliento."
IDS_SEND_MAIL, "Laiškų siuntimas"
}

View file

@ -0,0 +1,33 @@
/*
* MAPI32 Russian resources
*
* Copyright 2009 Vladimir Pankratov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include "res.h"
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE
{
IDS_NO_MAPI_CLIENT, "Невозможно отправить почту: не установлен почтовый клиент MAPI."
IDS_SEND_MAIL, "Отправка почты"
}

View file

@ -15,6 +15,7 @@
<library>wine</library>
<library>shlwapi</library>
<library>shell32</library>
<library>user32</library>
<library>advapi32</library>
<library>uuid</library>
<library>ntdll</library>

View file

@ -145,17 +145,17 @@
205 stub FDecodeID@12
206 stub CchOfEncoding@4
207 stdcall CbOfEncoded@4(ptr) CbOfEncoded
208 stdcall MAPISendDocuments(ptr ptr ptr ptr long)
209 stdcall MAPILogon(long ptr ptr long long ptr)
210 stdcall MAPILogoff(long long long long)
211 stdcall MAPISendMail(long long ptr long long)
212 stdcall MAPISaveMail(ptr ptr ptr long long ptr)
213 stdcall MAPIReadMail(ptr ptr ptr long long ptr)
214 stdcall MAPIFindNext(ptr ptr ptr ptr long long ptr)
215 stdcall MAPIDeleteMail(ptr ptr ptr long long)
217 stdcall MAPIAddress(ptr ptr ptr long ptr long long ptr long ptr ptr)
208 stdcall MAPISendDocuments(ptr str str str long)
209 stdcall MAPILogon(ptr str str long long ptr)
210 stdcall MAPILogoff(ptr ptr long long)
211 stdcall MAPISendMail(ptr ptr ptr long long)
212 stdcall MAPISaveMail(ptr ptr ptr long long str)
213 stdcall MAPIReadMail(ptr ptr str long long ptr)
214 stdcall MAPIFindNext(ptr ptr str str long long ptr)
215 stdcall MAPIDeleteMail(ptr ptr str long long)
217 stdcall MAPIAddress(ptr ptr str long str long ptr long long ptr ptr)
218 stdcall MAPIDetails(ptr ptr ptr long long)
219 stdcall MAPIResolveName(ptr ptr ptr long long ptr)
219 stdcall MAPIResolveName(ptr ptr str long long ptr)
220 stub BMAPISendMail
221 stub BMAPISaveMail
222 stub BMAPIReadMail

View file

@ -34,6 +34,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mapi);
LONG MAPI_ObjectCount = 0;
HINSTANCE hInstMAPI32;
/***********************************************************************
* DllMain (MAPI32.init)
@ -45,6 +46,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
hInstMAPI32 = hinstDLL;
DisableThreadLibraryCalls(hinstDLL);
load_mapi_providers();
break;

View file

@ -1835,7 +1835,7 @@ IMAPIProp_fnSetProps(LPMAPIPROP iface, ULONG ulValues,
else
{
/* Add new value */
if (!(item = IMAPIPROP_AddValue(This, &lpProps[i])))
if (!IMAPIPROP_AddValue(This, &lpProps[i]))
hRet = MAPI_E_NOT_ENOUGH_MEMORY;
}
}

View file

@ -0,0 +1,26 @@
/*
* MAPI32 resources
*
* Copyright 2009 Owen Rudge for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
#include <windef.h>
/* Strings */
#define IDS_NO_MAPI_CLIENT 1
#define IDS_SEND_MAIL 2

View file

@ -30,6 +30,7 @@
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "winuser.h"
#include "objbase.h"
#include "objidl.h"
#include "mapi.h"
@ -41,6 +42,7 @@
#include "shlwapi.h"
#include "wine/debug.h"
#include "util.h"
#include "res.h"
WINE_DEFAULT_DEBUG_CHANNEL(mapi);
@ -383,27 +385,11 @@ cleanup: ;
* Success: SUCCESS_SUCCESS
* Failure: MAPI_E_FAILURE
*
* NOTES
* The fallback procedure is a temporary hack.
*/
ULONG WINAPI MAPISendMail( LHANDLE session, ULONG_PTR uiparam,
lpMapiMessage message, FLAGS flags, ULONG reserved )
{
ULONG ret = MAPI_E_FAILURE;
unsigned int i, to_count = 0, cc_count = 0, bcc_count = 0;
unsigned int to_size = 0, cc_size = 0, bcc_size = 0, subj_size, body_size;
char *to = NULL, *cc = NULL, *bcc = NULL;
const char *address, *subject, *body;
static const char format[] =
"mailto:\"%s\"?subject=\"%s\"&cc=\"%s\"&bcc=\"%s\"&body=\"%s\"";
char *mailto = NULL, *escape = NULL;
char empty_string[] = "";
HRESULT res;
DWORD size;
TRACE( "(0x%08x 0x%08lx %p 0x%08x 0x%08x)\n", session, uiparam,
message, flags, reserved );
WCHAR msg_title[READ_BUF_SIZE], error_msg[READ_BUF_SIZE];
/* Check to see if we have a Simple MAPI provider loaded */
if (mapiFunctions.MAPISendMail)
@ -413,133 +399,13 @@ ULONG WINAPI MAPISendMail( LHANDLE session, ULONG_PTR uiparam,
if (MAPIInitialize(NULL) == S_OK)
return sendmail_extended_mapi(session, uiparam, message, flags, reserved);
/* Fall back on our own implementation */
if (!message) return MAPI_E_FAILURE;
/* Display an error message since we apparently have no mail clients */
LoadStringW(hInstMAPI32, IDS_NO_MAPI_CLIENT, error_msg, sizeof(error_msg) / sizeof(WCHAR));
LoadStringW(hInstMAPI32, IDS_SEND_MAIL, msg_title, sizeof(msg_title) / sizeof(WCHAR));
for (i = 0; i < message->nRecipCount; i++)
{
if (!message->lpRecips)
{
WARN("No recipients found\n");
return MAPI_E_FAILURE;
}
MessageBoxW((HWND) uiparam, error_msg, msg_title, MB_ICONEXCLAMATION);
address = message->lpRecips[i].lpszAddress;
if (address)
{
switch (message->lpRecips[i].ulRecipClass)
{
case MAPI_ORIG:
TRACE( "From: %s\n", debugstr_a(address) );
break;
case MAPI_TO:
TRACE( "To: %s\n", debugstr_a(address) );
to_size += lstrlenA( address ) + 1;
break;
case MAPI_CC:
TRACE( "Cc: %s\n", debugstr_a(address) );
cc_size += lstrlenA( address ) + 1;
break;
case MAPI_BCC:
TRACE( "Bcc: %s\n", debugstr_a(address) );
bcc_size += lstrlenA( address ) + 1;
break;
default:
TRACE( "Unknown recipient class: %d\n",
message->lpRecips[i].ulRecipClass );
}
}
else
FIXME("Name resolution and entry identifiers not supported\n");
}
if (message->nFileCount) FIXME("Ignoring attachments\n");
subject = message->lpszSubject ? message->lpszSubject : "";
body = message->lpszNoteText ? message->lpszNoteText : "";
TRACE( "Subject: %s\n", debugstr_a(subject) );
TRACE( "Body: %s\n", debugstr_a(body) );
subj_size = lstrlenA( subject );
body_size = lstrlenA( body );
ret = MAPI_E_INSUFFICIENT_MEMORY;
if (to_size)
{
to = HeapAlloc( GetProcessHeap(), 0, to_size );
if (!to) goto exit;
to[0] = 0;
}
if (cc_size)
{
cc = HeapAlloc( GetProcessHeap(), 0, cc_size );
if (!cc) goto exit;
cc[0] = 0;
}
if (bcc_size)
{
bcc = HeapAlloc( GetProcessHeap(), 0, bcc_size );
if (!bcc) goto exit;
bcc[0] = 0;
}
if (message->lpOriginator)
TRACE( "From: %s\n", debugstr_a(message->lpOriginator->lpszAddress) );
for (i = 0; i < message->nRecipCount; i++)
{
address = message->lpRecips[i].lpszAddress;
if (address)
{
switch (message->lpRecips[i].ulRecipClass)
{
case MAPI_TO:
if (to_count) lstrcatA( to, "," );
lstrcatA( to, address );
to_count++;
break;
case MAPI_CC:
if (cc_count) lstrcatA( cc, "," );
lstrcatA( cc, address );
cc_count++;
break;
case MAPI_BCC:
if (bcc_count) lstrcatA( bcc, "," );
lstrcatA( bcc, address );
bcc_count++;
break;
}
}
}
ret = MAPI_E_FAILURE;
size = sizeof(format) + to_size + cc_size + bcc_size + subj_size + body_size;
mailto = HeapAlloc( GetProcessHeap(), 0, size );
if (!mailto) goto exit;
sprintf( mailto, format, to ? to : "", subject, cc ? cc : "", bcc ? bcc : "", body );
size = 1;
res = UrlEscapeA( mailto, empty_string, &size, URL_ESCAPE_SPACES_ONLY );
if (res != E_POINTER) goto exit;
escape = HeapAlloc( GetProcessHeap(), 0, size );
if (!escape) goto exit;
res = UrlEscapeA( mailto, escape, &size, URL_ESCAPE_SPACES_ONLY );
if (res != S_OK) goto exit;
if ((UINT_PTR)ShellExecuteA( NULL, "open", escape, NULL, NULL, 0 ) > 32)
ret = SUCCESS_SUCCESS;
exit:
HeapFree( GetProcessHeap(), 0, to );
HeapFree( GetProcessHeap(), 0, cc );
HeapFree( GetProcessHeap(), 0, bcc );
HeapFree( GetProcessHeap(), 0, mailto );
HeapFree( GetProcessHeap(), 0, escape );
return ret;
return MAPI_E_NOT_SUPPORTED;
}
ULONG WINAPI MAPISendDocuments(ULONG_PTR uiparam, LPSTR delim, LPSTR paths,

View file

@ -1037,7 +1037,7 @@ void load_mapi_providers(void)
TRACE("appName: %s\n", debugstr_w(appName));
appKey = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * (lstrlenW(regkey_mail) +
lstrlenW(regkey_backslash) + lstrlenW(appName)));
lstrlenW(regkey_backslash) + lstrlenW(appName) + 1));
if (!appKey)
goto cleanUp;

View file

@ -61,5 +61,6 @@ typedef struct MAPI_FUNCTIONS {
} MAPI_FUNCTIONS;
extern MAPI_FUNCTIONS mapiFunctions;
extern HINSTANCE hInstMAPI32;
#endif

View file

@ -24,3 +24,10 @@
#define WINE_PRODUCTVERSION_STR "1.0.0.0"
#include "wine/wine_common_ver.rc"
#include "De.rc"
#include "En.rc"
#include "Es.rc"
#include "Fr.rc"
#include "Lt.rc"
#include "Ru.rc"

View file

@ -27,7 +27,7 @@ extern "C" {
#ifndef __LHANDLE
#define __LHANDLE
typedef ULONG LHANDLE, *LPLHANDLE;
typedef ULONG_PTR LHANDLE, *LPLHANDLE;
#endif
#define lhSessionNull ((LHANDLE)0)