Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Outlook Bilder auslesen (https://www.delphipraxis.net/72805-outlook-bilder-auslesen.html)

DocBorn 7. Jul 2006 06:24


Outlook Bilder auslesen
 
Hallo Allgemeinheit,

bin eigentlich schon ne ganze Weile länger hier registriert, allerdings scheint das Passwort zusenden bei Verlust nicht zu funktionieren, musste mir jedenfalls jetzt einen neuen Benutzer anlegen (mein Alter heißt digleu). Soooaaa, nachdem ich also zur Genüge google und die Suchfunktion verschiedener Foren bemühte habe, habe ich mich dann also dazu entschieden mal nen Beitrag zu schreiben.

Ich bin relativ frisch was OLE in Outlook angeht, komme aber jetzt in die Verlegenheit alle Outlook-Kontakte in mein Programm importieren zu müssen. Dazu habe ich schonmal folgenden Programmcode zusammengesucht (und auch soweit verstanden :)):
Delphi-Quellcode:
procedure TfrmOutlookSync.loadOutlookContacts;
const
  olFolderContacts = $0000000A;
var
  outlook, NameSpace, Contacts: OleVariant;
  i: Integer;
  MMContact: TMMOutlookContact;
begin
  listMain.Items.BeginUpdate;
  try
    listMain.Items.Clear;
    try
      outlook := CreateOleObject('Outlook.Application');
      NameSpace := outlook.GetNameSpace('MAPI');
      Contacts := NameSpace.GetDefaultFolder(olFolderContacts);
      for i := 1 to Contacts.Items.Count do
      begin
        MMContact := TMMOutlookContact.Create;
        try
          MMContact.ReadFromOle(Contacts.Items.Item(i));
          listMain.Items.AddObject(IntToStr(i) + '. ' + MMContact.getFullName, MMContact);
        except
          listLog.Items.Add('Fehler bei i='+IntToStr(i));
        end;
      end;
      Outlook := UnAssigned;
    except
      ShowMessage('Beim importieren ist ein Fehler aufgetreten. Möglicherweise ist Outlook nicht konfiguriert.');
    end;
  finally
    listMain.Items.EndUpdate;
  end;
end;
Dabei ist TMMOutlookContact eine von mir selbst erstellte Klasse, der ich einfach das entsprechende Variant Datenkonstrukt mit .readFromOle übergebe:
Delphi-Quellcode:
procedure TMMOutlookContact.ReadFromOle(AppOle: OleVariant);
begin
  // Contact := AppOle as ContactItem;
  FNachname := AppOle.Lastname;
  FVorname := AppOle.FirstName;
  FWeitererVorname := AppOle.MiddleName;
end;
und .getFullName gibt einfach den Namen des Kontakts zurück. listMain ist eine Listbox wo ich das alles mal testweise anzeige, listLog ein Fehlerlog.
Soa jetzt habe ich auch schon eine Liste von möglichen Eigenschaftsnamen dieses OleVariants im Internet gefunden und könnte damit schon an sehr viele Informationen kommen (gibts da irgendwo vielleicht eine vollständige Liste?), mein Problem ist allerdings, dass man in Outlook ja auch Bilder an seine Kontakte dranhängen kann und ich auch diese gerne auslesen würde. Habe nämlich keinen blassen Schimmer, wie der Eigenschftsname heißen könnt (.Image oder so?) und selbst wenn ich es wüsste hätte ich keine Ahnung wie ich die Daten in nen Stream oder in ne Datei bekommen könnte (letztenendlich solls in einer Datenbank abgelegt werden, aber das bekomme ich hin, weiß halt nur nicht wie ich an die Daten aus den Outlook-Kontakten drankommen soll).

Danke für jede Hilfe im Vorraus und schonmal einen guten Start in den Tag :)

viel Grüße
Lars

Dale 7. Jul 2006 08:28

Re: Outlook Bilder auslesen
 
Hallo Lars,

versuch mal folgenden Code:

Delphi-Quellcode:
var aContactItem : OleVariant;
...
for i := 1 to Contacts.Items.Count do
  aContactItem := Contacts.Item(i)
  aContactItem.Attachments.Add('c:\IrgendeineDatei.txt', olByValue, 10000, 'Ein Name für den Anhang');
  aContactItem.Save;
end;
Gruß Dale

DocBorn 7. Jul 2006 11:41

Re: Outlook Bilder auslesen
 
Hi Dale,

ich glaube das was dein Code macht ist ein neues Attachment hinzufügen und das ist ja genau das Gegenteil von dem was ich machen will ... aber vielleicht ist der Trick das Bild als Attachment an den Contact-Datensatz zu betrachten, damit werde ich mal rumprobieren und bescheidgeben, wenn ich was brauchbares gefunden habe oder verzweifelt bin. Wenn bis dahin allerdings schon jemand ne gute Idee hat bin ich dafür natürlich dankbar :).

Lg Lars

marabu 7. Jul 2006 12:06

Re: Outlook Bilder auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Lars,

du kannst das Erzeugen und Initialisieren deines Objektes zusammenfassen - mit einem speziellen Konstruktor oder so:

Delphi-Quellcode:
function CreateMMOutlookContact(contact: OleVariant): TMMOutlookContact;
begin
  Result := TMMOutlookContact.Create;
  with contact as ContactItem do
  begin
    Result.FNachname := Lastname;
    Result.FVorname := FirstName;
    Result.FWeitererVorname := MiddleName;
  end;
end;
Aber das nur nebenbei.

Zitat:

Zitat von DocBorn
Soa jetzt habe ich auch schon eine Liste von möglichen Eigenschaftsnamen dieses OleVariants im Internet gefunden und könnte damit schon an sehr viele Informationen kommen (gibts da irgendwo vielleicht eine vollständige Liste?)

Es gibt sie - in der Outlook Online-Hilfe. Wenn ich richtig gezählt habe sind es beim ContactItem von OL2002 152 Eigenschaften - Bilder sind dabei Attachments.

Grüße vom marabu

Dale 7. Jul 2006 12:37

Re: Outlook Bilder auslesen
 
du hast natürlich vollkommen recht, ich Dusel!
Folgender Code ist dann wohl besser:

Delphi-Quellcode:
var lNameSpace    : NameSpace;
    lFolder       : MAPIFolder;
    lItemColl     : Items;
    i, j          : Integer;
    lElement      : OleVariant;
    lContact      : ContactItem;
begin
  OutlookApplication1.Connect;
  lNameSpace := OutlookApplication1.GetNamespace('MAPI');
  lFolder := lNamespace.PickFolder;
  lItemColl := lFolder.Items;
  IF lItemColl.Count > 0 THEN
    BEGIN
      FOR i := 1 to lItemColl.Count do
        BEGIN

          // Anlagen speichern
          IF (lElement.Attachments.Count > 0) THEN
            BEGIN
              FOR j:= 1 to lElement.Attachments.Count DO
              lElement.Attachments.Item(j).SaveAsFile(
                Format('c:\Anlagen\%s', [lElement.Attachments.Item(j).FileName]));
            END;
        END;
    END;
  OutlookApplication1.Disconnect;
end;
Gruß Dale

DocBorn 7. Jul 2006 13:09

Re: Outlook Bilder auslesen
 
jeppa auf so einen Code bin ich jetzt auch gekommen :). Allerdings rechne ich halt damit, dass nur ein Bild an einem Contact dran hängt ... und es funktioniert *lufspring*

dankö

DocBorn 7. Jul 2006 14:48

Re: Outlook Bilder auslesen
 
hm ich hätte jetzt doch noch eine Frage:

Fernziel hier ist eine Synkronisation mit Outlook (weil das so den Weg auf alle möglichen MDAs etc. darstellt), dabei währe es sehr günstig eine Art ID für die Datensätze zu haben, hat dieser OleVariant Datentyp irgendeine Property, die einen Datensatz in Outlook eindeutig identifiziert? Damit Änderungen in Outlook von meiner Applikation bemerkt und in die Datenbank übernommen werden können.

Naja und dann würde mich mal so generell interessieren ob es irgendwo eine List gibt auf der _alle_ Properties von diesem Outlook-Contact drauf stehen. Habe jetzt schon so eine 30-40 Punkte lange Liste, allerdings ist das ja garantiert noch nicht alles (da kann man ja schon alleine 15 verschiedene Telefonnummern oder so speichern).

Danke im Voraus

Lg Lars

Dale 7. Jul 2006 14:54

Re: Outlook Bilder auslesen
 
diese Liste hatte marabu bereits zum Download an seinen Beitrag gehängt: marabus Beitrag

Gruß Dale

DocBorn 7. Jul 2006 14:57

Re: Outlook Bilder auslesen
 
*dau*

okidoki da stehen ja einige Dinge wie "EntryID" oder so drin, damit sollte ich ja was gebacken bekommen ....

dankööö

DocBorn 7. Jul 2006 15:54

Re: Outlook Bilder auslesen
 
k ich glaube die EntryID ist genau das was ich gesucht habe .... Danke nochmal :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.
Seite 1 von 2  1 2      

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