AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Abfrage ob MAPI vorhanden und eingerichtet
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage ob MAPI vorhanden und eingerichtet

Ein Thema von stalkingwolf · begonnen am 6. Nov 2013 · letzter Beitrag vom 18. Aug 2020
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#1

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 8. Nov 2013, 09:10
Ja, es gibt eine Möglichkeit. Wenn mal als Hersteller eines Mailprogramms (ich bin so einer) seine Dienste im Betriebssystem zur Versendung mit Mails anbieten will, muss man sich dafür in der Registry eintragen (Anmerkung nur am Rande, dazu braucht man Adminrechte).

Ob sich ein E-Mail-Programm eingetragen hat, kannst Du mit dieser Funktion testen:

Delphi-Quellcode:
function GetStandardClient: String;
const
  cMailClient = '\SOFTWARE\Clients\Mail';
var
  reg: TRegistry;
  RegClientDefault: string;
  RegClientDefaultCurUser: string;
begin
  reg := TRegistry.Create;
  RegClientDefault := '';
  RegClientDefaultCurUser := '';

  try
    with reg do begin
      CloseKey;
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyReadOnly(cMailClient) then begin
        RegClientDefault := reg.ReadString('');
      end;
    end;
  finally
    reg.Free;
  end;

  reg := TRegistry.Create;
  try
    with reg do begin
      CloseKey;
      RootKey := HKEY_CURRENT_USER;
      if OpenKeyReadOnly(cMailClient) then begin
        RegClientDefaultCurUser := reg.ReadString('');
      end;
    end;
  finally
    reg.Free;
  end;

  if RegClientDefaultCurUser <> 'then begin
    if RegClientDefaultCurUser = RegClientDefault then begin
      Result := RegClientDefault;
    end else begin
       Result := RegClientDefault + ' in Registry HKEY_LOCAL_MACHINE und' + #13 +
                 RegClientDefaultCurUser + ' in HKEY_CURRENT_USER';
    end;
  end else begin
    Result := RegClientDefault;
  end;
end;
Damit kann man also den Namen des Programms rausfinden, dass im System die Mails bearbeitet (ich nutze es natürlich, um zu testen, ob sich unverschämterweise ein anderes Programm hier vorgedrängelt hat).

Wenn Du 100%-tig sichergehen willst, dass da nicht nur ein E-Mail-Spaßprogramm installiert ist, das nur "mailto-" Aufrufe abgreift, musst Du in der Registry auch noch den Eintrag DLLPath prüfen. Jedes MAPI-fähige Mailprogramm muss nämlich seine eigene MAPI-Implementation machen und eine DLL dafür ins System bringen. Die mapi32.dll ruft dann diese DLL vom Hersteller auf, die dann das E-Mail-Programm startet und dieses muss dann die Nachricht letztendlich bearbeiten.

Auch wenn Du Dein Problem schon gelöst hast, vielleicht stehst Du noch mal vor dieser Situation und hast keine Umgehungsmöglichkeit.

Ich habe Dir noch einen Screenshot angehängt, wo Du das mit dem Regitry-Eintrag mal optisch nachvollziehen kannst. Der stammt von meiner Entwicklungsmaschine, daher wundere Dich nicht über den Standort der MAPI-Dll, auf einer echten Installation wäre die im Programmverzeichnis von Safer Mail zu finden.
Angehängte Grafiken
Dateityp: jpg MAPI.jpg (69,1 KB, 27x aufgerufen)

Geändert von Harry Stahl ( 8. Nov 2013 um 10:38 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#2

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 11. Nov 2013, 13:30
Hallo Harry,

ich hab einmal gerade auf meinem Testrechner und auf meinem Lokalen Rechner geschaut.

In beiden Rechnern steht in Local_Machine ein Eintrag.
Bei meinem lokalen Rechner Outlook und Thunderbird.
Beide haben einen DLLPATH Eintrag.

Auf dem Testrechner ist kein Emailclient eingerichtet, aber es steht in Local_Machine dennoch ein Eintrag. Und Zwar Hotmail mit einem DLLPath.
Dennoch erhalte ich auf diesem Rechner die Meldung, das kein Emailprogramm eingerichtet ist.

Scheint also nicht 100% zu funktionieren.

Gruß
Sven
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.585 Beiträge
 
Delphi 12 Athens
 
#3

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 11. Nov 2013, 14:08
FileExist(DLLPath) hilft auch nichts?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#4

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 11. Nov 2013, 14:14
Die existiert sogar.
%ProgramFiles%\Internet Explorer\hmmapi.dll
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.261 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 11. Nov 2013, 14:58
Das Programm hat sich ordentlich Registriert, aber es wurde nicht eingerichtet. Das wirst Du nicht erkennen können, da jedes Programm das anders handelt.

Es wird wohl auch so sein, das dies pro Windowsbenutzer eingerichtet sein muss!!!!!!
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.561 Beiträge
 
Delphi 12 Athens
 
#6

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 11. Nov 2013, 17:53
Auf dem Testrechner ist kein Emailclient eingerichtet, aber es steht in Local_Machine dennoch ein Eintrag. Und Zwar Hotmail mit einem DLLPath.
Dennoch erhalte ich auf diesem Rechner die Meldung, das kein Emailprogramm eingerichtet ist.
Ja, Deine Konstellation ist natürlich etwas anders, als die, die ich mit meinem Programm vorfinde. Bei meiner Konstellation hat ja dann schon mal ein Anwender das vorhandene Programm (nämlich meines gestartet), der User ist also angemeldet und hat Zugriff auf ein E-Mail-Programm.

Bei Dir hat ein User per RDP Zugriff auf den Rechner. Hat dort auch ein Konto, aber für ihn ist kein E-Mail-Programm installiert. Das ist zwar da (deswegen der Eintrag in Lcal_Machine), aber nicht für ihn.

Wenn Du nur den Current-User-Eintrag bei bestehendem RDP-Zugriff auf dem Server-PC testest, ist dann dort auch ein Eintrag für ein E-Mail-Programm im Registry-Eintrag drin?
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
552 Beiträge
 
#7

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 14. Nov 2013, 08:52
Nein.
Aber auf meinem Rechner, Windows 7, auch nicht. Dort steht es ebenfalls in Local_Machine.
Ich würde ja sagen Current_User->Local_Machine. Das wäre z.b auf meinem Rechner richtig, auf dem Terminalserver falsch.

Aber wie gesagt, ich hab es anders gelöst. Es würde mich zwar interessieren, aber Zeit habe ich aktuell keine mich damit zu beschäftigen.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.140 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Abfrage ob MAPI vorhanden und eingerichtet

  Alt 18. Aug 2020, 16:24
Okay, Totengräber.

Ich stand auch gerade vor dem Problem, auch mit der DnD-Suite.

TOutlookDataFormat.Messages.Count kann man auch prüfen, wenn MAPI nicht initialisiert ist. Daher rufe ich OleCheck(MAPIInitialize(@MapiInit)); jetzt erst dann auf, wenn im Drop-Event das erste Mal TOutlookDataFormat.Messages.Count > 0 ist:
Delphi-Quellcode:
  if (FOutlookDataFormatAdapter.DataFormat as TOutlookDataFormat).Messages.Count > 0 then
    begin
      // Ruft man MAPIInitialize grundsätzlich (beim Start) auf, kommt ein grafisches Meldungsfenster, wenn kein MAPI installiert ist.
      // Es wird zwar offenbar auch eine Exception geschmissen wird. Solange diese aber nicht mit leerem except-Block ignoriert sondern zu behandeln versucht wird, verursacht OleCheck anschließend einen Deadlock, ohne dass eine Fehlerbehandlung durchgeführt wird.
      if not FMapiInitizializeCalled then
      begin
        FMapiInitizializeCalled := True;
        OleCheck(MAPIInitialize(@MapiInit));
      end;

      OutlookDataFormat := FOutlookDataFormatAdapter.DataFormat as TOutlookDataFormat;

      // tue tolle Dinge
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz