Outlook E-Mails aus Ordner auflisten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Milchgesicht
Beiträge: 10
Registriert: Do 8. Jan 2015, 16:37

Outlook E-Mails aus Ordner auflisten

Beitrag von Milchgesicht »

Hi.
Ich versuche die E-Mails in einem Ordner von Outlook per OLE auszulesen und aufzulisten.
Es lässt sich auch der Betreff auslesen aber wenn ich die Zeit und den Absender auslesen möchte, klappt das nur beim ersten Datensatz. Beim zweiten Datensatz bekomme ich die Meldung : "Sender is not supported by automation object" bzw. "Receivedtime is not supported by automation object". Wie gesagt, der erste Datensatz ist kein Problem und auch den Betreff (subject) kann ich für alle folgenden Datensätze auslesen.
Ich bin etwas ratlos, da ich offensichtlich einen Denkfehler habe frage ich hier nach euren Erfahrungen und Ideen.
Anbei mein Codeschnipsel:

Code: Alles auswählen

            OutlookFolder := OutlookNameSpace.GetFolderFromID(EntryID);
            OutlookFolderEmailItems := OutlookFolder.Items;
            OutlookFolderEmailItems.Sort('[ReceivedTime]', False);

            itemcount:=OutlookFolderEmailItems.Count;

            for count:=1 to itemcount do
            begin

              EMails:=OutlookFolderEmailItems.Item(count);

              Betreff:=EMails.Subject;
              Absender:=EMails.Sender.Address;
              Zeit:=EMails.ReceivedTime;
 
            end;     
Vielen Dank im Voraus

Milchgesicht
Beiträge: 10
Registriert: Do 8. Jan 2015, 16:37

Re: Outlook E-Mails aus Ordner auflisten

Beitrag von Milchgesicht »

Ok, ich habe mich wohl nicht richtig gut ausgedrückt. Entschuldigung dafür, ich versuche es etwas zu konkretisieren.
Hier erstmal die ganze Prozedur:

Code: Alles auswählen

var
   count, itemcount: Integer;
   OutlookApplication, OutlookNameSpace, OutlookFolder, OutlookFolderEmailItems, EMails: Variant;
   EntryID, Betreff, Absender, Zeit: String;
begin
  OutlookApplication := Null;


     try
        OutlookApplication := CreateOleObject('Outlook.Application');
     except
           OutlookApplication := Null;
     end;


     If VarIsNull(OutlookApplication) = False then
        begin
            OutlookNameSpace := OutlookApplication.GetNameSpace('MAPI');
            OutlookNameSpace.Logon('', '', False, True);
            EntryID:=XXX;                                                                            
            OutlookFolder := OutlookNameSpace.GetFolderFromID(EntryID);
            OutlookFolderEmailItems := OutlookFolder.Items;
            OutlookFolderEmailItems.Sort('[ReceivedTime]', False);
            itemcount:=OutlookFolderEmailItems.Count;
            for count:=1 to itemcount do
            begin
              EMails:=OutlookFolderEmailItems.Item(count);
              Betreff:=EMails.Subject;
              Absender:=EMails.Sender.Address;
              Zeit:=EMails.ReceivedTime;
            end;
        end;

     Emails := Unassigned;
     OutlookFolderEmailItems := Unassigned;
     OutlookFolder := Unassigned;
     OutlookNameSpace := Unassigned;
     OutlookApplication := Unassigned;
end;   
Das Problem ist, dass mir in der for-Schleife der Betreff von jeder Mail ausgegeben wird aber nicht die Zeit und der Absender.
Dies ist darauf begründet, dass Sender.Address und auch ReceivedTime nicht mit einem anderen Wert als "1" zurecht kommen.
Sofern es sich also um die erste Mail handelt, wird alles korrekt ausgegeben aber sobald count > 1 bricht das Prinzip zusammen.
Ich verstehe nur nicht wieso das so ist und bitte hier um einen Denkanstoss, selbst wenn niemand eine Lösung hat, vielleicht gibt es Ideen oder einfach nur einen Tipp in die richtige Richtung.
Vielen Dank.

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Outlook E-Mails aus Ordner auflisten

Beitrag von wp_xyz »

Ich bin mit der Outlook-Automation nie glücklich geworden, obwohl ich mich in meiner Delphi-Zeit viel damit befasst hatte. Erst mit der (kommerziellen) smmsg-Komponente von https://www.scalabium.com/, kam ich weiter, und diese funktioniert sogar, ohne Outlook installiert zu haben. Ist zwar nur für Delphi, aber ich konnte sie für Lazarus umschreiben (relativ einfach) und an einigen alten Outlook-Dateien testen (jetzt habe ich aber seit Jahren kein Outlook mehr).

Zum aktuellen Problem kann ich wenig sagen, der Code sieht - aus der Erinnerung heraus - korrekt aus. Bist du sicher, dass für Absender und Zeit die richtigen Felder abgefragt werden? Und stimmt das mit der EntryID? Was passiert wenn du GetDefaultFolder(6) (6 für Inbox) statt GetFolderFromID verwendest? Auf der Office97-CD gab es eine HLP-Datei, in der das komplette Objekt-Modell von Outlook mit allen Bezeichnern enthalten war. Nur kann man HLP-Dateien heute nicht mehr lesen...

Hier ein paar Links, die ich auf die Schnelle gefunden habe:
https://www.delphi-treff.de/tipps-trick ... n-steuern/
http://www.skzimmelman.com/Articles/del ... gh_com.htm
https://stackoverflow.com/questions/645 ... ith-delphi

Milchgesicht
Beiträge: 10
Registriert: Do 8. Jan 2015, 16:37

Re: Outlook E-Mails aus Ordner auflisten

Beitrag von Milchgesicht »

Erst einmal vielen Dank für die Mühe.
Die SMMSG-Komponente gucke ich mir an, wenn es mein Problem löst und sie bezahlbar ist wäre das eine Option auch wenn natürlich mein Anspruch ist, die Bordmittel zu verwenden.

Bzgl. der der Frage zu den Feldern, nein, ich bin mir nicht sicher aber laut den Links, die ich fand wird es so gemacht.
Die Links, die du anbringst kenne ich, leider wird es auch dort genau so oder eben gar nicht gemacht.
Das Problem ist ja, dass die Abfrage grundsätzlich funktioniert aber eben nur für den Betreff und bei Absender und Zeit nur beim ersten Datensatz. Daher meine Annahme eines Denkfehlers meinerseits.

Die EntryID habe ich bewusst zu XXX geändert hier für den Post, das ist ansonsten korrekt.
Ich hatte es ursprünglich mit GetDefaultFolder(6) versucht, das hatte den gleichen Effekt. GetFolderFromID habe ich deswegen verwendet um einen anderen Ordner auswählen zu können, um auszuschliessen, dass es am Ordner selbst liegt, trotzdem Danke auch für diesen Hinweis.

Die Idee mit der Office 97 CD muss ich mir mal durch den Kopf gehen lassen, ggf kann ich die noch irgendwo organisieren, das wäre interessant zu wissen.

Insgesamt großen Dank, ich werde berichten, sobald ich neue Erkenntnisse habe.
Sollte jemand anderes sonst noch eine Idee finden oder meinen Code korrigieren können, auch sehr gerne.

Milchgesicht
Beiträge: 10
Registriert: Do 8. Jan 2015, 16:37

Re: Outlook E-Mails aus Ordner auflisten

Beitrag von Milchgesicht »

Was noch zu sagen ist, ich bin auch kein Freund von der Outlook-Automation.
Mein Problem ist, dass ich keine Modern-Auth-Verbindung über IMAP mit Synapse oder Indy zu standen bringe und das Postfach keine andere Authentifizierung zulässt.
Ferner Kann ich signierte Anhänge nicht per IMAP einlesen, weil ich dann den MIMI-Typ decodieren muss, was ich auch nicht zuverlässig hinbekomme.
Diese beiden Punkte möchte ich mir vereinfachen mit der Outlook-Automation.

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: Outlook E-Mails aus Ordner auflisten

Beitrag von wp_xyz »

Ich habe die HLP-Datei als zip mal angehängt. Vielleicht findest du ein Tool, das das zumindest nach chm konvertieren oder vielleicht daraus den rtf-Text extrahieren kann. Ich habe eine VM mit Windows 2000, dort kann ich die Datei noch lesen, aber nicht weiter verwerten, höchstens drucken, aber das nur Thema für Thema, und das macht bei Tausenden von Themen keinen Spaß...

Beim Durchstöbern der Datei finde ich die Eigenschaft Email.Sender nicht, stattdessen nur .SenderName. Email.ReceivedTime dagegen wird erwähnt.

Schicke mir eine PN, dann zeige ich dir, wo du das von mir modifizierte smmsg herunterladen kannst. Du kannst dann ausprobieren, ob es funktioniert (meine Erfahrungen damit sind 20 Jahre alt...), und wenn es das tut, dich bei scalabium um eine Lizenz bemühen. Eins jetzt schon: beim Ausprobieren ist mir gerade aufgefallen, dass die Konvertierung nur unter Windows läuft, für echtes "Cross-Platform" müsste man mehr Arbeit reinstecken...
Dateianhänge
vbaoutl.zip
(206.13 KiB) 67-mal heruntergeladen

Antworten