Ermittlung des Standard-Mailprogramms

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Ermittlung des Standard-Mailprogramms

Beitrag von Lewi »

Hi Folks,
hat jemand eine Idee, wie man automatisch den Programmpfad für das Standard-Mailprogramm ermitteln kann?

Mir kam die Idee über die Windows API-Funktion „FindExecutable()“ Aber welche „Extension“ ist mit Outlook bzw. Outlook Express verknüpft?

Gruß, Olaf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ermittlung des Standard-Mailprogramms

Beitrag von AUGE_OHR »

hi,
Lewi hat geschrieben: hat jemand eine Idee, wie man automatisch den Programmpfad für das Standard-Mailprogramm ermitteln kann?
ich mache es mit der Registry :

Code: Alles auswählen

HKEY_CLASSES_ROOT\mailto\shell\open\command
Mir kam die Idee über die Windows API-Funktion „FindExecutable()“ Aber welche „Extension“ ist mit Outlook bzw. Outlook Express verknüpft?
ich denke nicht das es eine "Extension" gibt ... es geht ja alles in die
"Datenbank" und die *.DBX (von OE) kann nicht "direkt" ansprechen.

gruss by OHR
Jimmy
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hi Jimmy,
Dein Tipp ist das, wonach ich gesucht habe. Danke.

Anmerkung: Die Extension ".EML" ist mit OE verknüpft, wenn OE die einzige Mail-Anwendung auf einem System ist. Daher kam mir der Gedanke, über eine Extension und "FindExecutable" die Mail-Anwendung zu ermitteln. Dein Weg ist natürlich weitaus einfacher.

Viele Grüße
Olaf
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Lewi hat geschrieben: Anmerkung: Die Extension ".EML" ist mit OE verknüpft, wenn OE die einzige Mail-Anwendung auf einem System ist.
... aber leider gibt es noch andere Programme die auch ".EML" als
Extension benutzen z.b. ACDSee welcher meint es seit ein Grafik
Format ...

da sind mir die "HKEY_CLASSES_ROOT" Einträge "sicherer" da
die wohl (so meine ich) "zuerst" ausgeführt werden.

gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

eMail mit xBase schreiben

Beitrag von UliTs »

Habt Ihr vielleicht auch eine einfache Lösung, wie man mit xBase++ eine Mail mit Empfänger,Betreff,Text und Anhang abschicken kann?

Uli
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Ulli,

wenn du ASINET hast, kannst es damit tun. Da gibt es auch Beispiele.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

wenn du keine prof sub und damit asinet hast, wird dir eine Toolbox von marshalsoft helfen. ich meine www.marschalsoft.com, ansonsten auf den 3p Seiten von Alaska findest du den Verweis und ich glaube auch eine Testversion.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: eMail mit xBase schreiben

Beitrag von AUGE_OHR »

hi,
UliTs hat geschrieben: Habt Ihr vielleicht auch eine einfache Lösung, wie man mit xBase++
eine Mail mit Empfänger,Betreff,Text und Anhang abschicken kann?
meist du wirklich "abschicken" oder würde dir das "bereitstellen" schon
helfen ? Wenn ja SOCMAPI. Damit kannst deine Mail bis in die "OutBox"
deines Mailprogrammes bekommen.
übrigens sollte man SOCMAPI im Thread laufen lassen ...

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Ermittlung des Standard-Mailprogramms

Beitrag von Martin Altmann »

Hallo Jimmy,
AUGE_OHR hat geschrieben:übrigens sollte man SOCMAPI im Thread laufen lassen ...
warum bist Du dieser Meinung? Nur, weil das Programm sonst bis zum Absenden der Mail blockiert ist? Vielleicht ist aber genau das auch sinnvoll (abhängig vom Aufgabengebiet)...
Wie hast Du das mit dem eigenen Thread gelöst? Einfach eine Funktion, die das Senden übernimmt und die dann an den entsprechenden Stellen per Thread():start(mailingfunktion) aufgerufen?

Übrigens hat mal jemand hier im Forum geschrieben (ich glaube, Wolfgang - aber ich habe es nicht mehr gefunden), dass der Aufruf von SOCMAPI die Einstellung für das aktuelle Verzeichnis (CurDir()) verändert!!!
Da habe ich mich zum Glück noch dran erinnert, als eine unserer Kundinnen einen Programmabsturz hatte - Sie schickte mir dann mal die XPPERROR.LOG und ich habe gesehen, dass Ihr Programm in den Programmteil eigentlich gar nicht reinlaufen kann!!!
Bis ich ihr dann mal eine Version geschickt habe, die in dem Programmteil ein Log schreibt. Sie startete das Programm, führte die Schritte aus, und wollte mir dann nach dem Absturz das log schicken, das es aber nicht gab! Wir haben dann telefoniert, Sie suchte nach der XPPERROR.LOG und fand die aktuellste dann in dem Verzeichnis, in dem Ihr Standardmailprogramm installiert war. Das wäre auch nicht weiter schlimm, wäre das nicht auf einer anderen Partition installiert gewesen, als unser Programm!!
Dadurch, das ich mich dunkel an die o.g. Aussage erinnern konnte, war der "Fehler" dann sehr schnell behoben - vielen Dank nochmals demjenigen, der das damals erwähnt hatte...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Ermittlung des Standard-Mailprogramms

Beitrag von UliTs »

Ich war's mit dem Hinweis zum Wechsel des "aktuellen Verzeichnisses". :wink:

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ermittlung des Standard-Mailprogramms

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:
AUGE_OHR hat geschrieben:übrigens sollte man SOCMAPI im Thread laufen lassen ...
warum bist Du dieser Meinung? Nur, weil das Programm sonst bis zum Absenden der Mail blockiert ist? Vielleicht ist aber genau das auch sinnvoll (abhängig vom Aufgabengebiet)...
Ich lege es nur in den Ausgang und will dann zurück in meine Anwendung.
Martin Altmann hat geschrieben: Wie hast Du das mit dem eigenen Thread gelöst? Einfach eine Funktion, die das Senden übernimmt und die dann an den entsprechenden Stellen per Thread():start(mailingfunktion) aufgerufen?
Ich baue mir zunächst die Adresse, Betreff, Text etc. zusammen und dann

Code: Alles auswählen

//
// 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
      //-- Store mail directly to outbox
      nErr := DllExecuteCall( scDLLSocMapiSendMail, cAdresses, cSubject, cMessage,;
                                                    cAttachments, nFlag )
      IF nErr != SUCCESS_SUCCESS .AND. nErr != MAPI_USER_ABORT
         BREAK nErr
      ENDIF
   RECOVER USING nErr
      NotifyError( nErr )
   END SEQUENCE

   DllExecuteCall( scDLLSocMapiLogoff )

RETURN
Martin Altmann hat geschrieben: Übrigens hat mal jemand hier im Forum geschrieben (ich glaube, Wolfgang - aber ich habe es nicht mehr gefunden), dass der Aufruf von SOCMAPI die Einstellung für das aktuelle Verzeichnis (CurDir()) verändert!!!
tja hättes du das heute morgen schon geschrieben ... weil das mit dem *.BAT ja nicht klappte
hab ich ja mal "auf die schnelle" paar Zeile dann mit RunShell() geschrieben und war mir sicher
das es "funktioniert". Leider habe ich dabei ebenfalls übersehen "wo" ich die Application in dem
Augenblick befindet ... da lag nun "SwapIt.TXT" ... nur leider im Verzeichnis von MapPoint :(

Wenn man also activeX oder DllCall benutzt dann sollte man auf die Verzeichnisse achten !!!
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Ermittlung des Standard-Mailprogramms

Beitrag von Martin Altmann »

Hallo Uli,
dann Dir nochmals vielen Dank!!

Jimmy,
danke für Deinen Code. So wie ich das sehe, kannst Du also aus Deinem Programm heraus beliebig viele Mails "starten", ohne eine wirklich abzusenden - Du hast dann also mehrere offene und begonnene Mails in eigenen Fenstern (in Deinem Outlook). Was passiert denn nun, wenn Du Dein Programm beendest? Dann werden die einzelnen Threads ja auch beendet - aber die begonnenen Mails (die Outlook-Fenster) bleiben doch trotzdem noch offen und können verschickt werden - oder?
Und das Problem mit dem Verzeichniswechsel hatte ich ja bereits am Samstag Nachmittag erkannt und gelöst - das Problem war ja, erstmal zu merken, dass das Outlook bei ihr auf einer anderen Partition liegt, als das Programm und dann habe ich mich ja auch sofort an das Posting hier erinnert...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Ermittlung des Standard-Mailprogramms

Beitrag von AUGE_OHR »

moin,
Martin Altmann hat geschrieben: danke für Deinen Code. So wie ich das sehe, kannst Du also aus Deinem Programm heraus beliebig viele Mails "starten", ohne eine wirklich abzusenden - Du hast dann also mehrere offene und begonnene Mails in eigenen Fenstern (in Deinem Outlook).
nope eigentlich geht es immer nur mit einer Email. (theoretisch ja, aber ich nutze es anders)

das Outlook "Fenster" mit der Mail Pop ja "onTop" auf. Darin kann ich dann noch Änderrungen
vornehmen oder verwerfen wozu der User eine Aktion auslösen MUSS, den solange OE geöffnet
ist ist die Application "angehalten" (was man hier im Code nicht sieht ) und wartet auf das Ende
von OE ... es sei den es ist kein User "da" dann kommt "irgendwann" ein Timeout und er bricht
die Aktion ab.

Ich bin mir nicht mehr sicher warum Thread, aber ich glaube es hatte was mit meinen Events zu
tun sodas sich, ohne Thread, nach SocMapi "nichts mehr reagiert", aber nicht abegstürzt ist da
die "Timeout"s noch funktionieren und er irgendwann "ausloggt"

Ich will also keine "massen" Email versenden, sondern brauche die "Kontroll" des User und deshalb
wird die auch "angezeigt" statt die gleich in "Ausgang" zu legen (was ja auch geht).

Wenn ich nun "unbeaufsichtigt" Email´s senden will benutze ich eigentlich SEE32, den da hab ich
ja eine "Kontrolle" die ich über OE nicht habe (bricht mittendrin ab und bleibt in dem Bild stehen)
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Ermittlung des Standard-Mailprogramms

Beitrag von Martin Altmann »

Hallo Jimmy,
aah - OK. Aber genau das Verhalten legt er bei mir auch an den Tag - ohne Aufruf in einem Thread.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten