2009-12-12 19:27 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbwin/mapi.c
    + Added support for UNICODE.
    ; Untested, I don't have a mailer on any Windows systems I have
      access to to try it.
      Please make tests with MSVC also, to check UNICODE.
    ! Fixed typo in prev modification.
    ! Added ( ULONG ) cast to -1 value.
    + Added copyright header.

  * contrib/hbwin/tests/testmapi.prg
    + Added some test data to make it work.
      (couldn't test it though, all I get is msgbox that I have no
      mailer)
This commit is contained in:
Viktor Szakats
2009-12-12 18:45:54 +00:00
parent 4148f3b01a
commit 2430d97b22
3 changed files with 49 additions and 29 deletions

View File

@@ -17,6 +17,21 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-12-12 19:27 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbwin/mapi.c
+ Added support for UNICODE.
; Untested, I don't have a mailer on any Windows systems I have
access to to try it.
Please make tests with MSVC also, to check UNICODE.
! Fixed typo in prev modification.
! Added ( ULONG ) cast to -1 value.
+ Added copyright header.
* contrib/hbwin/tests/testmapi.prg
+ Added some test data to make it work.
(couldn't test it though, all I get is msgbox that I have no
mailer)
2009-12-12 18:41 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/vm/vmmt/Makefile
! added missing strapi.c for some compilers which do not use hvmall.c

View File

@@ -6,7 +6,8 @@
* Harbour Project source code:
* MAPI wrappers
*
* Copyright 2009 {list of individual authors and e-mail addresses}
* Copyright 2009 Toninho (toninhofwi yahoo.com.br)
* Copyright 2009 Viktor Szakats (harbour.01 syenar.hu)
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
@@ -57,9 +58,9 @@
#include <mapi.h>
/* TOFIX: Add UNICODE conversion support */
#if ! defined( UNICODE )
#if ! defined( MAPI_UNICODE )
#define MAPI_UNICODE ( ( ULONG ) 0x80000000 )
#endif
HB_FUNC( WIN_MAPISENDMAIL )
{
@@ -80,6 +81,9 @@ HB_FUNC( WIN_MAPISENDMAIL )
PHB_ITEM pToList = hb_param( 9, HB_IT_ARRAY );
PHB_ITEM pFileList = hb_param( 10, HB_IT_ARRAY );
void * hString[ 2 + 2 * 100 + 2 * 100 ];
int iString = 0;
MapiMessage note;
MapiRecipDesc origin;
FLAGS flags = MAPI_LOGON_UI;
@@ -92,10 +96,10 @@ HB_FUNC( WIN_MAPISENDMAIL )
ZeroMemory( &note, sizeof( MapiMessage ) );
ZeroMemory( &origin, sizeof( MapiRecipDesc ) );
note.lpszSubject = ( LPTSTR ) HB_PARSTR( 1, &hSubject, NULL );
note.lpszNoteText = ( LPTSTR ) HB_PARSTR( 2, &hNoteText, NULL );
note.lpszMessageType = ( LPTSTR ) HB_PARSTR( 3, &hMessageType, NULL );
note.lpszDateReceived = ( LPTSTR ) HB_PARSTRDEF( 4, &hDateReceived, NULL );
note.lpszSubject = ( LPSTR ) HB_PARSTR( 1, &hSubject, NULL );
note.lpszNoteText = ( LPSTR ) HB_PARSTR( 2, &hNoteText, NULL );
note.lpszMessageType = ( LPSTR ) HB_PARSTR( 3, &hMessageType, NULL );
note.lpszDateReceived = ( LPSTR ) HB_PARSTRDEF( 4, &hDateReceived, NULL );
if( hb_parl( 6 ) )
note.flFlags |= MAPI_RECEIPT_REQUESTED;
@@ -109,8 +113,8 @@ HB_FUNC( WIN_MAPISENDMAIL )
if( pFrom && hb_arrayLen( pFrom ) >= 2 )
{
origin.lpszName = ( LPTSTR ) hb_arrayGetCPtr( pFrom, 1 );
origin.lpszAddress = ( LPTSTR ) hb_arrayGetCPtr( pFrom, 2 );
origin.lpszName = ( LPSTR ) HB_ARRAYGETSTR( pFrom, 1, &hString[ iString++ ], NULL );
origin.lpszAddress = ( LPSTR ) HB_ARRAYGETSTR( pFrom, 2, &hString[ iString++ ], NULL );
note.lpOriginator = &origin;
}
@@ -132,22 +136,15 @@ HB_FUNC( WIN_MAPISENDMAIL )
{
if( hb_arrayGetCLen( pItem, 1 ) > 0 )
{
/* TOFIX: Add UNICODE conversion */
recipList[ ulCount ].lpszName = ( LPTSTR ) hb_arrayGetCPtr( pItem, 1 );
recipList[ ulCount ].lpszName = ( LPSTR ) HB_ARRAYGETSTR( pItem, 1, &hString[ iString++ ], NULL );
if( hb_arrayGetCLen( pItem, 2 ) > 0 )
{
/* TOFIX: Add UNICODE conversion */
recipList[ ulCount ].lpszAddress = ( LPTSTR ) hb_arrayGetCPtr( pItem, 2 );
}
recipList[ ulCount ].lpszAddress = ( LPSTR ) HB_ARRAYGETSTR( pItem, 2, &hString[ iString++ ], NULL );
}
else
{
/* TOFIX: Add UNICODE conversion */
recipList[ ulCount ].lpszName = ( LPTSTR ) hb_arrayGetCPtr( pItem, 2 );
}
recipList[ ulCount ].lpszName = ( LPSTR ) HB_ARRAYGETSTR( pItem, 2, &hString[ iString++ ], NULL );
recipList[ ulCount ].ulRecipClass = ( ULONG ) hb_arrayGetNL( pItem, 2 );
recipList[ ulCount ].ulRecipClass = ( ULONG ) hb_arrayGetNL( pItem, 3 );
++ulCount;
}
@@ -173,13 +170,12 @@ HB_FUNC( WIN_MAPISENDMAIL )
{
PHB_ITEM pItem = hb_arrayGetItemPtr( pFileList, i + 1 );
if( HB_IS_ARRAY( pItem ) && hb_arrayLen( pItem ) >= 2 )
if( HB_IS_ARRAY( pItem ) && hb_arrayLen( pItem ) >= 1 )
{
/* TOFIX: Add UNICODE conversion */
filedescList[ ulCount ].ulReserved = 0;
filedescList[ ulCount ].lpszFileName = ( LPTSTR ) hb_arrayGetCPtr( pItem, 1 );
filedescList[ ulCount ].lpszPathName = ( LPTSTR ) hb_arrayGetCPtr( pItem, 2 );
filedescList[ ulCount ].nPosition = -1;
filedescList[ ulCount ].lpszFileName = ( LPSTR ) HB_ARRAYGETSTR( pItem, 1, &hString[ iString++ ], NULL );
filedescList[ ulCount ].lpszPathName = ( LPSTR ) HB_ARRAYGETSTR( pItem, 2, &hString[ iString++ ], NULL );
filedescList[ ulCount ].nPosition = ( ULONG ) -1;
++ulCount;
}
}
@@ -196,10 +192,11 @@ HB_FUNC( WIN_MAPISENDMAIL )
hb_strfree( hNoteText );
hb_strfree( hMessageType );
hb_strfree( hDateReceived );
while( --iString >= 0 )
hb_strfree( hString[ iString ] );
}
FreeLibrary( hMapiDll );
}
}
#endif

View File

@@ -2,7 +2,15 @@
* $Id$
*/
PROCEDURE Main( cSubject, cBody, lMailConf, lFromUser, aSender, aDest, aFiles )
PROCEDURE Main()
cSubject := "Test subject"
cBody := "Test body"
lMailConf := .F.
lFromUser := .T.
aSender := { "test from", "from@test.com" }
aDest := { { "test to", "to@test.com" } }
aFiles := { { "testmapi.prg", "" } }
? win_MAPISendMail( cSubject, ; // subject
cBody, ; // menssage