From: Christoph von Wittich Date: Fri, 5 Mar 2010 18:40:20 +0000 (+0000) Subject: [MAPI32] X-Git-Tag: backups/header-work@57446~208^2~102 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7249fc91c006e1544f2471dbacda8b7fce24cb8c [MAPI32] sync mapi32 to wine 1.1.39 svn path=/trunk/; revision=45881 --- diff --git a/reactos/dll/win32/mapi32/De.rc b/reactos/dll/win32/mapi32/De.rc new file mode 100644 index 00000000000..2c811d15a0c --- /dev/null +++ b/reactos/dll/win32/mapi32/De.rc @@ -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" +} diff --git a/reactos/dll/win32/mapi32/En.rc b/reactos/dll/win32/mapi32/En.rc new file mode 100644 index 00000000000..9a6bf77998f --- /dev/null +++ b/reactos/dll/win32/mapi32/En.rc @@ -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" +} diff --git a/reactos/dll/win32/mapi32/Es.rc b/reactos/dll/win32/mapi32/Es.rc new file mode 100644 index 00000000000..534f4d4dbc9 --- /dev/null +++ b/reactos/dll/win32/mapi32/Es.rc @@ -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" +} diff --git a/reactos/dll/win32/mapi32/Fr.rc b/reactos/dll/win32/mapi32/Fr.rc new file mode 100644 index 00000000000..ab14e4ad377 --- /dev/null +++ b/reactos/dll/win32/mapi32/Fr.rc @@ -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" +} diff --git a/reactos/dll/win32/mapi32/Lt.rc b/reactos/dll/win32/mapi32/Lt.rc new file mode 100644 index 00000000000..b66bf3da010 --- /dev/null +++ b/reactos/dll/win32/mapi32/Lt.rc @@ -0,0 +1,33 @@ +/* +* MAPI32 Lithuanian resources +* + * Copyright 2009 Aurimas Fišeras +* +* 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" +} diff --git a/reactos/dll/win32/mapi32/Ru.rc b/reactos/dll/win32/mapi32/Ru.rc new file mode 100644 index 00000000000..66626da23a2 --- /dev/null +++ b/reactos/dll/win32/mapi32/Ru.rc @@ -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, "Отправка почты" +} diff --git a/reactos/dll/win32/mapi32/mapi32.rbuild b/reactos/dll/win32/mapi32/mapi32.rbuild index 93a8d539875..4832457070b 100644 --- a/reactos/dll/win32/mapi32/mapi32.rbuild +++ b/reactos/dll/win32/mapi32/mapi32.rbuild @@ -15,6 +15,7 @@ wine shlwapi shell32 + user32 advapi32 uuid ntdll diff --git a/reactos/dll/win32/mapi32/mapi32.spec b/reactos/dll/win32/mapi32/mapi32.spec index 04be363d2bc..8037c9b54d8 100644 --- a/reactos/dll/win32/mapi32/mapi32.spec +++ b/reactos/dll/win32/mapi32/mapi32.spec @@ -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 diff --git a/reactos/dll/win32/mapi32/mapi32_main.c b/reactos/dll/win32/mapi32/mapi32_main.c index 906c22e2c9f..6c35563a448 100644 --- a/reactos/dll/win32/mapi32/mapi32_main.c +++ b/reactos/dll/win32/mapi32/mapi32_main.c @@ -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; diff --git a/reactos/dll/win32/mapi32/prop.c b/reactos/dll/win32/mapi32/prop.c index 1a157da352f..5a7e8db0565 100644 --- a/reactos/dll/win32/mapi32/prop.c +++ b/reactos/dll/win32/mapi32/prop.c @@ -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; } } diff --git a/reactos/dll/win32/mapi32/res.h b/reactos/dll/win32/mapi32/res.h new file mode 100644 index 00000000000..658f8f609b0 --- /dev/null +++ b/reactos/dll/win32/mapi32/res.h @@ -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 + +/* Strings */ +#define IDS_NO_MAPI_CLIENT 1 +#define IDS_SEND_MAIL 2 diff --git a/reactos/dll/win32/mapi32/sendmail.c b/reactos/dll/win32/mapi32/sendmail.c index cbbff9847e9..e1156498cd1 100644 --- a/reactos/dll/win32/mapi32/sendmail.c +++ b/reactos/dll/win32/mapi32/sendmail.c @@ -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, diff --git a/reactos/dll/win32/mapi32/util.c b/reactos/dll/win32/mapi32/util.c index 71a5e1aec59..90cfa6ecd67 100644 --- a/reactos/dll/win32/mapi32/util.c +++ b/reactos/dll/win32/mapi32/util.c @@ -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; diff --git a/reactos/dll/win32/mapi32/util.h b/reactos/dll/win32/mapi32/util.h index fd813ca5892..df03d6e5f9a 100644 --- a/reactos/dll/win32/mapi32/util.h +++ b/reactos/dll/win32/mapi32/util.h @@ -61,5 +61,6 @@ typedef struct MAPI_FUNCTIONS { } MAPI_FUNCTIONS; extern MAPI_FUNCTIONS mapiFunctions; +extern HINSTANCE hInstMAPI32; #endif diff --git a/reactos/dll/win32/mapi32/version.rc b/reactos/dll/win32/mapi32/version.rc index d3a620bd8fb..e7c3d5926fb 100644 --- a/reactos/dll/win32/mapi32/version.rc +++ b/reactos/dll/win32/mapi32/version.rc @@ -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" diff --git a/reactos/include/psdk/mapi.h b/reactos/include/psdk/mapi.h index 2d335ea588a..7d19734c599 100644 --- a/reactos/include/psdk/mapi.h +++ b/reactos/include/psdk/mapi.h @@ -27,7 +27,7 @@ extern "C" { #ifndef __LHANDLE #define __LHANDLE -typedef ULONG LHANDLE, *LPLHANDLE; +typedef ULONG_PTR LHANDLE, *LPLHANDLE; #endif #define lhSessionNull ((LHANDLE)0)