ich habe ein Problem mit dem Outlook 2013. Eine neuerer Version haben wir nicht, bei den früheren so wie Thunderbird scheint es zu funktionieren.
Wenn ich die SendeEmail aufrufe:
Code: Alles auswählen
SendeEmail( "test@platzhalter.de", "Test", "Text mit Umbrüchen", "C:\test.pdf" )
Code: Alles auswählen
#define SUCCESS_SUCCESS 0
#define MAPI_USER_ABORT 1
#define MAPI_E_FAILURE 2
#define MAPI_E_LOGIN_FAILURE 3
#define MAPI_E_DISK_FULL 4
#define MAPI_E_INSUFFICIENT_MEMORY 5
#define MAPI_E_ACCESS_DENIED 6
#define MAPI_E_TOO_MANY_SESSIONS 8
#define MAPI_E_TOO_MANY_FILES 9
#define MAPI_E_TOO_MANY_RECIPIENTS 10
#define MAPI_E_ATTACHMENT_NOT_FOUND 11
#define MAPI_E_ATTACHMENT_OPEN_FAILURE 12
#define MAPI_E_ATTACHMENT_WRITE_FAILURE 13
#define MAPI_E_UNKNOWN_RECIPIENT 14
#define MAPI_E_BAD_RECIPTYPE 15
#define MAPI_E_NO_MESSAGES 16
#define MAPI_E_INVALID_MESSAGE 17
#define MAPI_E_TEXT_TOO_LARGE 18
#define MAPI_E_INVALID_SESSION 19
#define MAPI_E_TYPE_NOT_SUPPORTED 20
#define MAPI_E_AMBIGUOUS_RECIPIENT 21
#define MAPI_E_MESSAGE_IN_USE 22
#define MAPI_E_NETWORK_FAILURE 23
#define MAPI_E_INVALID_EDITFIELDS 24
#define MAPI_E_INVALID_RECIPS 25
#define MAPI_E_NOT_SUPPORTED 26
CLASS mmSocMapi
EXPORTED:
VAR lErrorMessage
VAR lastError
VAR snDllHandle
VAR socMapiIsInit
VAR socMapiInit
VAR socMapiDeInit
VAR socMapiIsLoggedOn
VAR socMapiLogOn
VAR socMapiLogoff
VAR socMapiSendMail
VAR lSendDirekt
INLINE METHOD init( lErrorMessage )
DEFAULT lErrorMessage TO TRUE
::lSendDirekt := FALSE
::lErrorMessage := lErrorMessage
::lastError := SUCCESS_SUCCESS
IF ::snDllHandle = NIL
::snDllHandle := DllLoad("SOCMAPI.DLL")
ENDIF
RETURN self
INLINE METHOD socMapiIsInit()
IF ::socMapiIsInit = NIL
::socMapiIsInit := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiIsInit" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiIsInit )
INLINE METHOD socMapiInit()
IF ::SocMapiInit = NIL
::SocMapiInit := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiInit" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiInit )
INLINE METHOD socMapiDeInit()
IF ::socMapiDeInit = NIL
::socMapiDeInit := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiDeInit" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiDeInit )
INLINE METHOD socMapiIsLoggedOn()
IF ::socMapiIsLoggedOn = NIL
::socMapiIsLoggedOn := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiIsLoggedOn" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiIsLoggedOn )
INLINE METHOD socMapiLogOn()
IF ::socMapiLogOn = NIL
::socMapiLogOn := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiLogon" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiLogOn )
INLINE METHOD socMapiLogoff()
IF ::socMapiLogoff = NIL
::socMapiLogoff := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiLogoff" ) //+DLL_CALLMODE_COPY
ENDIF
RETURN DllExecuteCall( ::socMapiLogoff )
INLINE METHOD socMapiSendMail(cAdresses,cSubject,cMessage,cAttachments)
IF ::socMapiSendMail = NIL
IF ::lSendDirekt
::socMapiSendMail := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiPostMail" ) //+DLL_CALLMODE_COPY
ELSE
::socMapiSendMail := DllPrepareCall( ::snDllHandle, DLL_STDCALL+DLL_CALLMODE_COPY, "SocMapiSendMail" ) //+DLL_CALLMODE_COPY
ENDIF
//::socMapiSendMail := DllPrepareCall( ::snDllHandle, DLL_STDCALL, "SocMapiSendMail" )
ENDIF
RETURN DllExecuteCall( ::socMapiSendMail,cAdresses,cSubject,cMessage,cAttachments )
INLINE METHOD sendEmail(cAdresses,cSubject,cMessage, cAttachments)
LOCAL nErr := SUCCESS_SUCCESS
DEFAULT cAdresses TO ""
DEFAULT cSubject TO ""
DEFAULT cMessage TO ""
DEFAULT cAttachments TO ""
BEGIN SEQUENCE
IF !Fexists("SOCMAPI.DLL")
nErr := -1
BREAK
ENDIF
IF ::socMapiIsInit() == 0
nErr := ::socMapiInit()
IF nErr # 0
BREAK
ENDIF
ENDIF
IF ::socMapiIsLoggedOn() == 0
nErr := ::socMapiLogon()
IF nErr # 0
BREAK
ENDIF
ENDIF
nErr := ::socMapiSendMail(cAdresses,cSubject,cMessage,cAttachments)
::lastError := nErr
IF nErr # 0 .AND. nErr # MAPI_USER_ABORT
BREAK
ENDIF
nErr := ::socMapiLogoff()
IF nErr # 0
BREAK
ENDIF
nErr := ::socMapiDeInit()
IF nErr # 0
BREAK
ENDIF
RECOVER
IF ::lErrorMessage
mmpAlertBox():showFehlerBox(::errorText(nErr),,,, "SocMAPI Fehlercode" )
ENDIF
END SEQUENCE
// um auch USER_ABORT gemeldet zu bekommen
IF ::lastError == SUCCESS_SUCCESS
::lastError := nErr
ENDIF
RETURN self
INLINE METHOD destroy()
IF !(::snDllHandle = NIL) .AND. ::snDllHandle # 0
DllUnLoad( ::snDllHandle )
ENDIF
RETURN self
INLINE METHOD errorText(nErr)
LOCAL cErr := ""
DO CASE
CASE nErr == -1
cErr := "SOCMAPI.DLL ist nicht vorhanden!"
CASE nErr == SUCCESS_SUCCESS
cErr := "Successful!"
CASE nErr == MAPI_USER_ABORT
cErr := "USER_ABORT"
CASE nErr == MAPI_E_FAILURE
cErr := "FAILURE"
CASE nErr == MAPI_E_LOGIN_FAILURE
cErr := "LOGIN_FAILURE"
CASE nErr == MAPI_E_DISK_FULL
cErr := "DISK_FULL"
CASE nErr == MAPI_E_INSUFFICIENT_MEMORY
cErr := "INSUFFICIENT_MEMORY"
CASE nErr == MAPI_E_ACCESS_DENIED
cErr := "ACCESS_DENIED"
CASE nErr == MAPI_E_TOO_MANY_SESSIONS
cErr := "TOO_MANY_SESSIONS"
CASE nErr == MAPI_E_TOO_MANY_FILES
cErr := "TOO_MANY_FILES"
CASE nErr == MAPI_E_TOO_MANY_RECIPIENTS
cErr := "TOO_MANY_RECIPIENTS"
CASE nErr == MAPI_E_ATTACHMENT_NOT_FOUND
cErr := "ATTACHMENT_NOT_FOUND"
CASE nErr == MAPI_E_ATTACHMENT_OPEN_FAILURE
cErr := "ATTACHMENT_OPEN_FAILURE"
CASE nErr == MAPI_E_ATTACHMENT_WRITE_FAILURE
cErr := "ATTACHMENT_WRITE_FAILURE"
CASE nErr == MAPI_E_UNKNOWN_RECIPIENT
cErr := "UNKNOWN_RECIPIENT"
CASE nErr == MAPI_E_BAD_RECIPTYPE
cErr := "BAD_RECIPTYPE"
CASE nErr == MAPI_E_NO_MESSAGES
cErr := "NO_MESSAGES"
CASE nErr == MAPI_E_INVALID_MESSAGE
cErr := "INVALID_MESSAGE"
CASE nErr == MAPI_E_TEXT_TOO_LARGE
cErr := "TEXT_TOO_LARGE"
CASE nErr == MAPI_E_INVALID_SESSION
cErr := "INVALID_SESSION"
CASE nErr == MAPI_E_TYPE_NOT_SUPPORTED
cErr := "TYPE_NOT_SUPPORTED"
CASE nErr == MAPI_E_AMBIGUOUS_RECIPIENT
cErr := "AMBIGUOUS_RECIPIENT"
CASE nErr == MAPI_E_MESSAGE_IN_USE
cErr := "MESSAGE_IN_USE"
CASE nErr == MAPI_E_NETWORK_FAILURE
cErr := "NETWORK_FAILURE"
CASE nErr == MAPI_E_INVALID_EDITFIELDS
cErr := "INVALID_EDITFIELDS"
CASE nErr == MAPI_E_INVALID_RECIPS
cErr := "INVALID_RECIPS"
CASE nErr == MAPI_E_NOT_SUPPORTED
cErr := "NOT_SUPPORTED"
OTHERWISE
cErr := "Unknown Mapi Error ID: "+Var2Char(nErr)
ENDCASE
RETURN cErr
ENDCLASS
FUNCTION SendeEmail(cAdresse,cBetreff,cBody,cAnhang,lDirekt)
LOCAL oThread := mmBaseThread():new()
LOCAL nRet := NIL
oThread:start( {|| nRet := SendeEmail2(cAdresse,cBetreff,cBody,cAnhang,lDirekt) } )
oThread:synchronize(0)
oThread := NIL
RETURN nRet
FUNCTION SendeEmail2(cAdresse,cBetreff,cBody,cAnhang,lDirekt)
LOCAL cDrive := CurDrive()
LOCAL cPath,oMapi
LOCAL nRet := NIL
DEFAULT lDirekt TO FALSE
IF cDrive == "\"
cPath := CurDir()
ELSE
cPath := cDrive+":\"+CurDir()
ENDIF
oMapi := mmSocMapi():new()
oMapi:lSendDirekt := lDirekt
oMapi:sendEmail(cAdresse,;
cBetreff,;
cBody ,;
cAnhang )
nRet := oMapi:lastError
oMapi := NIL
CurDir(cPath)
RETURN nRet