AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MAPI Schnittstelle zu Outlook 2016 und höher
Thema durchsuchen
Ansicht
Themen-Optionen

MAPI Schnittstelle zu Outlook 2016 und höher

Ein Thema von helste · begonnen am 23. Nov 2020 · letzter Beitrag vom 27. Nov 2020
Antwort Antwort
Seite 1 von 2  1 2      
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 11:46
Delphi-Version: 2007
Hallo,

ich habe Probleme mit einer Verbindung zu Outlook 2016 und höher. Soll angeblich daran liegen, dass Outlook2016 nur noch MAPI/http aber nicht mehr MAPI/RPC unterstützt.
Leider konnte ich keine Dokumentation finden, mit der ich weiter kommen.
Ich brauche eine Möglichkeit Mails über Outlook zu senden und eine Möglichkeit Mails aus einem bestimmten Ordern von Outlook zu übernehmen.

Unten ein Beispiel, wie ich aktuell auf Outlook zugreife um Mails aus einem bestimmten Ordner abzuholen. Das funktioniert bisher wie es soll, aber ab Outlook 2016 nicht mehr.

Was gibt es für Alternativen, bzw. wie kann ich das gleiche für neuere Outlookversionen erreichen? Wäre super, wenn mir jemand weiter helfen könnte.
Ich verwende Delphi 2007 und Delphi XE 10.1 Berlin.

Delphi-Quellcode:
uses
   ......,
   Outlook2000;

procedure mailimport;

var
   inboxfolder,
   importfolder : mapifolder;
   Outlook : TOutlookapplication;
   items : _items;

begin
.....

Outlook := TOutlookapplication.create (self);
if assigned (Outlook) then
   begin
   try
      inboxfolder := outlook.getNamespace ('MAPI').GetDefaultFolder (olfolderinbox);
      if assigned (inboxfolder) then
         begin
         i := 1;
         while (i <= inboxfolder.Folders.Count) and not assigned (importfolder) do
            begin
            if uppercase (inboxfolder.Folders.Item(i).Name) = 'IMPORTthen
               importfolder := inboxfolder.Folders.Item(i)
            else
               inc (i);
            end;
         if assigned (importfolder) then
            begin
            items := importfolder.Get_Items;
            i := items.Count;
            while i > 0 do
               begin
               if items.item(i).QueryInterface(_mailitem, opmi) = s_ok then
                  begin
                  mi := items.item(i) as mailitem;

                  mi.Subject,
                  mi.Body, etc. in Datenbank speichern

                  mi.Delete;
                  mi := nil;
                  if items.count < i then
                     i := items.Count;
                  end;
               dec (i);
               end;
            end;
         end;
   except
      end;
   Outlook.free;
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 12:32
Hallo.

Ich verwende aktuell ActiveX/OLE und bin damit ganz zufrieden.
Es geht alles was ich brauche. Mailbody is HTML, eingebettete Bilder sind möglich, etc... auch
Das einzige was an braucht ist Outlook lokal installiert. Die Outlook App reicht.
Delphi-Quellcode:
  Outlook: OLEVariant;
  MailItem: Variant;
  MailInspector : Variant;
  Recipient: Variant;

begin
  try
    Outlook := GetActiveOleObject('Outlook.Application');
  except
    Outlook := CreateOleObject('Outlook.Application');
  end;
  try
    MailItem := Outlook.CreateItem(0); // 0 = mail folder
....
end;
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 12:36
Danke erstmal für die Antwort.
Ich meine mich erinnern zu können, dass ich das auch mal so gemacht habe. Aus einem mir nicht mehr erinnerlichem Grund habe ich das dann auf die aktuelle Art geändert.

Und das funktioniert auch mit Outlook 2016, 2019 und 365?

Ich werde es mal probieren. Lokales Outlook ist da wo ich das brauche eh installiert. Sollte also kein Problem sein,
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
691 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 13:20
Outlook 2019 habe ich auf meinem Rechner am rennen und mit 365 geht es auch. Das verwenden meine Anwender.

Bei älteren Versionen habe ich auch MAPI bevorzugt. Da war ActiveX ein nicht zu gewinnender Kampf.
MAPI läuft auf Win10 nicht mehr rund. Irgendwie hat die Schnittstelle weniger Funktionen als vorher und MAPI CDO konnte ich nicht installieren.
Ich habe noch POP3/SMTP via Komponente von /NSoftware drinne.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 14:13
Super. Vielen Dank. Ich probiere es mal aus. Bei mir habe ich Outlook 2007 installiert. Damit geht es schon mal. Ältere Versionen hat von meinen Anwendern keiner mehr. Jetzt muss ich es nur noch auf 2016, 2019 und 365 probieren.

Vielen Dank nochmal.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 14:24
Wir hatten uns nach ewigem Krampf mit der MAPI eine Konsolenanwendung gebastelt.

C# .NET und mit den Mailschnittstellen der Microsoft.Office.Interop.Outlook.dll darin, die zum Office des selben Herstellers gut funktionieren.


In der Anwendung gibt es dann eine Option, wo zwischen MAPI und dieser ConsolenApp gewählt werden kann.
$2B or not $2B

Geändert von himitsu (23. Nov 2020 um 14:53 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#7

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 14:53
Bei mir hat ein kleiner Eingriff in die Registry geholfen - siehe angefügten Schnipsel. Da ist Microschrott wohl mit 32 und 64 bit durcheinander geraten.
Angehängte Dateien
Dateityp: txt MAPI_WOW6432Registry.reg.txt (742 Bytes, 65x aufgerufen)
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 17:03
Danke schon mal für die Antworten. Ich bin gerade dabei was auszuprobieren. Funktioniert auch schon teilweise.

Was mir fehlt ist einfach eine Referenz, wo ich die ganzen Variablen finde, die ich abfragen kann.

Strg-Leertaste liefert bei OLEVariant nichts.

Ich habe mir mal was aus Fundstücken im Netz zusammen gebastelt. Ich weiß da wo die ???? sind nicht wie ich zu den entsprechenden Daten komme. Wären auch noch weitere interessand wo replyto, etc.
Wo finde ich eine komplette Aufzählung aller möglichen Daten, die ich aus dem OLEVariant eMail bekomme? Das gleiche interessiert mich auch für die übrigen Variants, wie Inbox und z.B. importfolder.


Bitte fehlende Fehlerbehandlung und Aufräumarbeiten ignorieren. Ist nur quick and dirty, um die Funktionsweise zu testen.

Delphi-Quellcode:

function getEmails(var Subject, Sender, Adress, CC, BB, Body, Attachment : string):boolean;

var
   oleOutlook : OLEVariant;
   oleNameSpace : OLEVariant;
   importfolder : OLEVariant;
   Inbox : OLEVariant;
   eMail : OLEVariant;
   i : integer;
   ok : boolean;

begin
Result := False;
CoInitialize(NIL);
try
   oleOutlook := GetActiveOleObject('Outlook.Application');
except
   oleOutlook := CreateOleObject('Outlook.Application');
   end;
try
   oleNameSpace := oleOutlook.GetNameSpace('MAPI');
   ok := false;
   Inbox := oleNameSpace.GetDefaultFolder(olFolderInbox);
   i := 0;
   while i < Inbox.Folders.Count do
      begin
      if uppercase (Inbox.Folders[i+1].Name) = 'IMPORTthen
         begin
         importfolder := Inbox.Folders[i+1];
         ok := true;
         i := Inbox.Folders.Count;
         end;
      end;
   if ok and (importfolder.Items.Count > 0) then
      begin
      email := importfolder.Items (1);
      Subject := eMail.Subject;
// Sender := eMail.from; ????? Wie kriege ich den Absender
      Adress := eMail.to;
      cc := eMail.cc;
      bb := eMail.bcc;
      body := eMail.body;
// Attachment := eMail.Attachments.text; ????? Wie kriege ich eine Liste der Anhänge
      Result := TRUE;
      email.delete;
      end;
except
   end;
oleOutlook := NULL;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 17:08
Strg-Leertaste liefert bei OLEVariant nichts.
Das kann auch nicht gehen, da diese Infos erst zur Laufzeit bekannt sind.

Was mir fehlt ist einfach eine Referenz, wo ich die ganzen Variablen finde, die ich abfragen kann.
Beim Hersteller nachsehn?
https://docs.microsoft.com/de-de/off...ok.application
$2B or not $2B
  Mit Zitat antworten Zitat
helste

Registriert seit: 16. Jul 2009
72 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: MAPI Schnittstelle zu Outlook 2016 und höher

  Alt 23. Nov 2020, 17:09
Super. Vielen Dank. Das habe ich gesucht. Werde mich da mal durchkämpfen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz