Outlook und Attachments
Moderator: Moderatoren
Outlook und Attachments
Möglicherweise hat jemand eine Lösung für mich.
Ich versuche aus einer XBase Appl. Outlook mit Empfänger EMail-Adresse zu öffnen und eine PDF Datei einzubinden.
Ohne PDF Datei geht es ohne Probleme.
Ich versuche es über DLLCall mit der Shell32.DLL.
Für eine schnelle Antwort wäre ich Euch sehr dankbar.
Gruß Mario
Ich versuche aus einer XBase Appl. Outlook mit Empfänger EMail-Adresse zu öffnen und eine PDF Datei einzubinden.
Ohne PDF Datei geht es ohne Probleme.
Ich versuche es über DLLCall mit der Shell32.DLL.
Für eine schnelle Antwort wäre ich Euch sehr dankbar.
Gruß Mario
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Outlook und Attachments
hi,
suche mal auf der Alaska Homepage in der ASCN Section nach
SOCMAPI zum "senden" per MAPI sowie :
C:\ALASKA\XPPW32\SOURCE\samples\activex\olimport\
um an die Outlook Empfänger Adressen ran zu kommen.
mit den beiden "Bausteinen" sollte du dir eine Schnittstelle zusammen
stellen können.
gruss by OHR
Jimmy
du willst "senden", richtig ?Mario Ulbig hat geschrieben: Ich versuche aus einer XBase Appl. Outlook mit Empfänger EMail-Adresse zu öffnen und eine PDF Datei einzubinden.
suche mal auf der Alaska Homepage in der ASCN Section nach
SOCMAPI zum "senden" per MAPI sowie :
C:\ALASKA\XPPW32\SOURCE\samples\activex\olimport\
um an die Outlook Empfänger Adressen ran zu kommen.
mit den beiden "Bausteinen" sollte du dir eine Schnittstelle zusammen
stellen können.
gruss by OHR
Jimmy
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
In Verbindung mit der Api-Funktion "ShellExecute" kannst mit dem Aufruf von Outlook eine Datei übergeben:
Für "cExe" bietet sich an über API in der Registry den Eintrag "HKEY_CLASSES_ROOT\
\mailto\shell\open\command" auszulesen und den String zu nach der Anwendung zu extrahieren.
Gruß, Olaf
Code: Alles auswählen
ShellExecuteA(GetApp():getHWnd(), SHELL_OPEN, cExe, " /a "+cFile, "", SW_SHOW)
\mailto\shell\open\command" auszulesen und den String zu nach der Anwendung zu extrahieren.
Gruß, Olaf
Hallo Olaf,
vielen Dank für die schnelle Antwort. Leider bekomme ich bei
dem Aufruf die Outlookfehlermeldung:
"Das Befehlszeilenargument ist ungültig. Überprüfen Sie den verwendeten Befehl."
Nachstehen der Code
Gruß Mario
/////////////////////////////////////////////////////////////////////////
FUNCTION OpenEMail( cAdresse, cAnhang )
PRIVATE cDest, cDatei
cDest :="mailto:"+alltrim(cAdresse)
cDatei :=alltrim(cAnhang)
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a "+cDatei,CurDir(),SW_RESTORE)
RETURN(NIL)
vielen Dank für die schnelle Antwort. Leider bekomme ich bei
dem Aufruf die Outlookfehlermeldung:
"Das Befehlszeilenargument ist ungültig. Überprüfen Sie den verwendeten Befehl."
Nachstehen der Code
Gruß Mario
/////////////////////////////////////////////////////////////////////////
FUNCTION OpenEMail( cAdresse, cAnhang )
PRIVATE cDest, cDatei
cDest :="mailto:"+alltrim(cAdresse)
cDatei :=alltrim(cAnhang)
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a "+cDatei,CurDir(),SW_RESTORE)
RETURN(NIL)
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hallo Mario,
beachte die Freizeichen bei dem Parameter: " /a " + cFile. Also jeweils ein Freizeichen vor und nach dem Parameter "/a"
Den Parameter "cDir" brauchst Du nicht notwendiger Weise. Der Pfad kann auch in der Datei enthalten sein.
Beispiel:
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a c:\TEMP\MEINEDATEI.DOC","",SW_RESTORE)
Gruß, Olaf
beachte die Freizeichen bei dem Parameter: " /a " + cFile. Also jeweils ein Freizeichen vor und nach dem Parameter "/a"
Den Parameter "cDir" brauchst Du nicht notwendiger Weise. Der Pfad kann auch in der Datei enthalten sein.
Beispiel:
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a c:\TEMP\MEINEDATEI.DOC","",SW_RESTORE)
Gruß, Olaf
Sorry Olaf,
aber bei mir scheint die Sache nicht zu funktionieren. Ich habe es mit
Variable und auch mit Pfad und Dateiangabe. Die Fehlermeldung ist
immer die gleiche. (siehe oben)
cDest :="mailto:"+alltrim(cAdresse)
cDatei :=alltrim(cAnhang)
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a d:\start.txt","",SW_RESTORE)
oder
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a "+cDatei,"",SW_RESTORE)
Woran könnte es noch liegen?
Guß Mario
aber bei mir scheint die Sache nicht zu funktionieren. Ich habe es mit
Variable und auch mit Pfad und Dateiangabe. Die Fehlermeldung ist
immer die gleiche. (siehe oben)
cDest :="mailto:"+alltrim(cAdresse)
cDatei :=alltrim(cAnhang)
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a d:\start.txt","",SW_RESTORE)
oder
DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cDest," /a "+cDatei,"",SW_RESTORE)
Woran könnte es noch liegen?
Guß Mario
Super Olaf,
diesmal ging OUTLOOK auf und mein Attachment hängt dran.
In cDest stand "mailto:mustermann@mail.de"
D.h. ich sollte Outlook direkt aufrufen. Wenn es mit diesem Aufruf OK ist
und mit der Option /a eine Datei anhängen kann, so gibt es bestimmt
auch noch die Optionen für Empfänger und Betreff.
Stimmt das, und wenn ja kannst du mir die auch noch nennen.
Ich wäre ständig in deiner Schuld!
Danke Mario
diesmal ging OUTLOOK auf und mein Attachment hängt dran.
In cDest stand "mailto:mustermann@mail.de"
D.h. ich sollte Outlook direkt aufrufen. Wenn es mit diesem Aufruf OK ist
und mit der Option /a eine Datei anhängen kann, so gibt es bestimmt
auch noch die Optionen für Empfänger und Betreff.
Stimmt das, und wenn ja kannst du mir die auch noch nennen.
Ich wäre ständig in deiner Schuld!
Danke Mario
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Zu 1.
Du hast sicherlich den falschen Registry-Schlüssel gezogen. Unter "HKEY_CLASSES_ROOT\
\mailto\shell\open\command" sollte sich eigentlich kein "mailto:" befinden.
Zu 2.
Die Aufrufparameter für Outlook findest Du hier:
http://www.docoutlook.de/outlook/ol2000 ... ameter.htm
Normaler Weise werden "Betreff" und "Text" über "mailto:" an das Mail-Programm übergeben. Soweit ich weiß, können über "mailto" allerdings keine Dateien an eine eMail-Nachricht angefügt werden.
Du hast sicherlich den falschen Registry-Schlüssel gezogen. Unter "HKEY_CLASSES_ROOT\
\mailto\shell\open\command" sollte sich eigentlich kein "mailto:" befinden.
Zu 2.
Die Aufrufparameter für Outlook findest Du hier:
http://www.docoutlook.de/outlook/ol2000 ... ameter.htm
Normaler Weise werden "Betreff" und "Text" über "mailto:" an das Mail-Programm übergeben. Soweit ich weiß, können über "mailto" allerdings keine Dateien an eine eMail-Nachricht angefügt werden.
Sorry Olaf, auch wenn ich nerve.
Aber dieser Part ist sehr wichtig.
Der Registryeintrag wird korr. ausgelesen. Sobald ich versuche
eine EMail Adresse an Outlook zu übermitteln, geht nur noch Outlook
auf und steht im Hauptfenster. (da wo alle Ordner sichtbar sind)
Sprich er ignoriert die nachfolgenden Parameter.
In der Registry steht folgender Aufruf:
"C:\PROGRA~1\MICROS~2\Office\OUTLOOK.EXE" -c IPM.Note /m "%1" /a "%2"
Das heißt doch, das Outlook mit zwei Parametern zurecht kommen
sollte, oder?
Hat es schon mal jemand geschafft Outlook zu öffnen und eine Datei als
Anhang und eine EMailadresse für den Empfänger zu übergeben, wenn ja
WIE.
Danke Mario
Aber dieser Part ist sehr wichtig.
Der Registryeintrag wird korr. ausgelesen. Sobald ich versuche
eine EMail Adresse an Outlook zu übermitteln, geht nur noch Outlook
auf und steht im Hauptfenster. (da wo alle Ordner sichtbar sind)
Sprich er ignoriert die nachfolgenden Parameter.
In der Registry steht folgender Aufruf:
"C:\PROGRA~1\MICROS~2\Office\OUTLOOK.EXE" -c IPM.Note /m "%1" /a "%2"
Das heißt doch, das Outlook mit zwei Parametern zurecht kommen
sollte, oder?
Hat es schon mal jemand geschafft Outlook zu öffnen und eine Datei als
Anhang und eine EMailadresse für den Empfänger zu übergeben, wenn ja
WIE.
Danke Mario
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
wichtig bei SOCMAPI ist das du es im Thread startest !
gruss by OHR
Jimmy
wichtig bei SOCMAPI ist das du es im Thread startest !
Code: Alles auswählen
PROCEDURE MAPISEND(cJahr,cMonat,aJOB)
LOCAL cAdresses := "Testi@Testmann.de"
LOCAL cSubject := "DATEV Dateien 20"+cJahr+"/"+cMonat
LOCAL cMessage := ""
LOCAL cAttachments := ""
LOCAL nFlag := NOFLAG
...
cMessage := "hi,"+CRLF+;
"anbei die DATEV Daten 20"+cJahr+"/"+cMonat+CRLF+CRLF+;
"Umsatz "+cMWSTVOLL+"% :"+STR(sum14,9,2)+CRLF+;
"Mwst "+cMWSTVOLL+"% :"+STR(mwst14,9,2)+CRLF+;
"Umsatz "+cMWSTHALB+"% :"+STR(sum7,10,2)+CRLF+;
"Mwst "+cMWSTHALB+"% :"+STR(mwst7,9,2)+CRLF+CRLF+;
"Mwst Gesamt "+STR(mwstges,9,2)+CRLF+;
"Skonto "+STR(skontoges,8,2)+CRLF+;
"Endsumme "+STR(endsumme,12,2)+CRLF+CRLF+;
"gebucht nach DATEV "+STR(nEndsume,12,2)+CRLF+CRLF+;
"Differenz :"+STR((nEndsume-endsumme),12,2)+CRLF+CRLF+;
"mfg."+CRLF+;
"Jimmy"
IF TESTZIP(cJahr,cMonat)
cAttachments := ZPATH+"YIU"+cJahr+cMonat+".ZIP"
IF FILE(cAttachments)
ELSE
MSGBOX("bitte erstellen sie "+cAttachments+" manuell")
cAttachments := ""
ENDIF
ENDIF
//
// so und nun einen Thread starten, dann funktioniert es
//
oMAPI := Thread():new()
oMAPI:start("SENDNOW", cAdresses , cSubject ,cMessage , cAttachments , nFlag)
RETURN
PROCEDURE SENDNOW(cAdresses , cSubject ,cMessage , cAttachments , nFlag)
LOCAL nErr
//if not already logged on, Logon to new MAPI session
IF DllExecuteCall( scDLLSocMapiIsLoggedOn ) == 0
IF (nErr := DllExecuteCall(scDLLSocMapiLogon)) != SUCCESS_SUCCESS
NOTIFYERROR( nErr )
RETURN
ENDIF
ENDIF
BEGIN SEQUENCE
//-- Pop up maileditor
* MsgBox("mail will be send with Maileditor popping up")
nErr := DllExecuteCall( scDLLSocMapiSendMail , cAdresses , cSubject ,cMessage , cAttachments , nFlag )
if nErr != SUCCESS_SUCCESS .and. nErr != MAPI_USER_ABORT
break nErr
endif
* //-- Store mail directly to outbox
* MsgBox("mail will be stored directly to outbox")
* nErr := DllExecuteCall( scDLLSocMapiPostMail , cAdresses , cSubject ,;
* cMessage , cAttachments , nFlag)
* if nErr != SUCCESS_SUCCESS
* break nErr
* endif
* MsgBox("mail successfully stored to outbox")
RECOVER USING nErr
NotifyError (nErr)
END SEQUENCE
DllExecuteCall(scDLLSocMapiLogoff)
RETURN
Jimmy
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hier nun eine Mail-Versandfunktion für Outlook mittels ActiveX:
Falls kein Exchange-Server im Einsatz ist, erfolgt leider eine Sicherheitsmeldung beim Versand einer Mail. Siehe dazu einen Beitrag unter:
http://zerbit.de/artikel/show.asp?id=19
Mit der Outlook Redemption v. 4.3 lässt sich allerdings das Problem der Sicherheitsabfrage umgehen: http://www.dimastr.com/redemption/
Gruß, Olaf
Code: Alles auswählen
#include "activex.ch"
#pragma library( "ascom10.lib" )
Function MailWithOutlook( cAdress, cSubject, cBody, cAttach)
Local oMail
Local oOutlook
Local oMailItem := NIL
cAdress := IIF( cAdress == NIL,"", cAdress)
cSubject := IIF( cBody == NIL ,"", cSubject)
cBody := IIF (cBody == NIL, "", cBody )
oOutlook := CreateObject("Outlook.Application")
IF Empty( oOutlook )
MsgBox( "Outlook nicht installiert" )
RETURN ( NIL )
ENDIF
oMail := oOutlook:CreateItem(0)
oMail:Recipients:Add( cAdress)
oMail:Subject := cSubject
oMail:body := cBody
if ! emty( cAttach )
oMail:Attachments:Add(cAttach)
ENDIF
oMail:Send()
oMail:= NIL
oOutLook:quit()
oOutlook:destroy()
Return ( NIL )
http://zerbit.de/artikel/show.asp?id=19
Mit der Outlook Redemption v. 4.3 lässt sich allerdings das Problem der Sicherheitsabfrage umgehen: http://www.dimastr.com/redemption/
Gruß, Olaf
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9373
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Hubert.
Das funzt mit allen Outlook-Versionen.
Ich kann nur davon abraten, mit RunShell auf irgendwelche Applikationen parametrisiert zuzugreifen. Damit hat man sehr wenig Kontrolle. Active X ist in dieser Hinsicht weitaus komfortabler, außerdem schneller - und man hat die Möglichkeit, eine eigene Fehlerbehandlung zu integrieren, die Applikation zu "verstecken" und vieles mehr.
Das funzt mit allen Outlook-Versionen.
Ich kann nur davon abraten, mit RunShell auf irgendwelche Applikationen parametrisiert zuzugreifen. Damit hat man sehr wenig Kontrolle. Active X ist in dieser Hinsicht weitaus komfortabler, außerdem schneller - und man hat die Möglichkeit, eine eigene Fehlerbehandlung zu integrieren, die Applikation zu "verstecken" und vieles mehr.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12910
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
activeX Schnittstelle. Das Beispiel von Olaf geht nur mit "Outlook"
beides sind aber MAPI Clients sodas SOCMAPI damit funktioniert !
gruss by OHR
Jimmy
wie du schon angezweifelt hast gibt es für "OutLook Express" keineLewi hat geschrieben: Tom. bist Du Dir dessen sicher, dass es auch mit OE Express funktioniert? Ich habe da meine Zweifel!
Nachtrag: Falls ja, wo finde ich denn Informationen zum Object-Modell von OE-Express?
activeX Schnittstelle. Das Beispiel von Olaf geht nur mit "Outlook"
beides sind aber MAPI Clients sodas SOCMAPI damit funktioniert !
gruss by OHR
Jimmy
An alle die, die mir so schnell geholfen haben.
Erst einmal ein großes DANKE, für die schnelle Reaktion. Ich habe das
Problem mit der SOCMAPI.DLL gelößt. Muß aber sagen, das was Tom gepostet hat erscheint mir sinnvoll, so das ich einen zweiten Versuch
starten werde.
Ich werde mir den Code von Olaf mal zur Brust nehmen.
Dieses Forum habe ich bereits einigen Leuten empfohlen.
Gruß Mario
Erst einmal ein großes DANKE, für die schnelle Reaktion. Ich habe das
Problem mit der SOCMAPI.DLL gelößt. Muß aber sagen, das was Tom gepostet hat erscheint mir sinnvoll, so das ich einen zweiten Versuch
starten werde.
Ich werde mir den Code von Olaf mal zur Brust nehmen.
Dieses Forum habe ich bereits einigen Leuten empfohlen.
Gruß Mario
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Hallo Mario,
ja klar.
Die Zeile
sorgt dafür.
Gruß, Olaf
ja klar.
Die Zeile
Code: Alles auswählen
cAdress := IIF( cAdress == NIL,"", cAdress)
Gruß, Olaf