SocMAPI und Outlook 2013
Verfasst: Di, 20. Okt 2015 17:06
Guten Tag,
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:
Bekomme ich zuerst "FAILURE", beim zweiten mal (ohne die Anwendung zu verlassen) "LOGIN_FAILURE".
Hat jemand eine Idee?
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