SocMAPI und Outlook 2013

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
AP++
Rookie
Rookie
Beiträge: 6
Registriert: Fr, 06. Mär 2015 9:54

SocMAPI und Outlook 2013

Beitrag von AP++ »

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:

Code: Alles auswählen

SendeEmail( "test@platzhalter.de", "Test", "Text mit Umbrüchen", "C:\test.pdf" )
Bekomme ich zuerst "FAILURE", beim zweiten mal (ohne die Anwendung zu verlassen) "LOGIN_FAILURE".

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
Hat jemand eine Idee?
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: SocMAPI und Outlook 2013

Beitrag von Wolfgang Ciriack »

Ist es vielleicht eine Office 64-bit Version ? Damit funktioniert der Versand nicht.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SocMAPI und Outlook 2013

Beitrag von Tom »

Bei mir schon.
Herzlich,
Tom
AP++
Rookie
Rookie
Beiträge: 6
Registriert: Fr, 06. Mär 2015 9:54

Re: SocMAPI und Outlook 2013

Beitrag von AP++ »

Ich habe gestern Office nochmal installiert und extra drauf geachtet, dass ich die 32 bit Version installiere.
Outlook ist auch richtig eingerichtet, ich kann manuell oder mit "mailto:" eMails versenden.

Bild
Antworten