Announcement

Collapse
No announcement yet.

Outlook: MSG-Viewer oder wie kann ich MSG-Files in einem Delphi-Form anzeigen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Outlook: MSG-Viewer oder wie kann ich MSG-Files in einem Delphi-Form anzeigen?

    Hallo zusammen,

    habe folgendes Problem: Habe diverse Outlook-MSG-Files in einem Verzeichnis und möchte deren Inhalte nun in einem Delphi-Programm anzeigen können (am Besten nur den EMail-Text mitsamt seinen eingebetteten Objekten, falls vorhanden). Gibt es hierzu eine Delphi-Komponente, die mir dies ermöglicht (ähnlich der RichText-Komponente) oder gibt es eine andere Möglichkeit diese Dateien in einem Delphi-Formular zu visualisieren?

    Bin für jeden Tip sehr dankbar!

    Gruss
    Jan

  • #2
    Hallo Jan,

    zum Auslesen der msg-Datei braucht man offenbar Extended MAPI. Die entsprechenden Header für Delphi findest Du auf www.dimastr.com.

    Im folgende Code, den ich beim Googlen gefunden und etwas erweitert habe
    (http://groups.google.com/groups?q=OpenIMsgOnIStg+and+Delphi&hl=de&lr=&selm= 3d9d36f7%40newsgroups.borland.com&rnum=10).

    Es wird eine msg-Datei ausgelesen, und einige der Daten werden in einer Listview, sowie der Mail-Body in einem Memo angezeigt. Die Konstanten für die Identifikation der Daten (PR_XXXX) findest du in der Unit MapiDefs.pas (wobei anzumerken ist, dass ich nicht alle Werte auslesen konnte).

    <PRE>
    uses
    ActiveX, imessage,
    MapiDefs, MapiTags, MapiUtil;
    <BR>
    const
    cMsgName = 'test.msg';
    <BR>
    procedure TForm1.Button1Click(Sender: TObject);
    var
    vIStorage : IStorage;
    Rslt : HResult;
    pMalloc : IMalloc;
    pMsgSes : PMSGSESS;
    pDummy : TMSGCALLRELEASE;
    pProp : PSPropValue;
    lpWidestr : Pointer;
    viMsg : MapiDefs.IMessage;
    filename : widestring;
    begin
    filename := ExtractFilePath(ParamStr(0)) + cMsgName;
    // voller Pfadname nötig!!!
    if FileExists(filename) then begin
    if MAPIInitialize(nil)=S_OK then begin
    try
    pDummy := nil;
    pMsgSes := nil;
    viMsg := nil;
    // Open the outlook file and place it in a IStorage
    Rslt := StgOpenStorage(
    PWideChar(filename),
    nil,
    (STGM_READ or STGM_SHARE_DENY_WRITE),
    nil,
    0,
    vIStorage
    );

    Pointer(pMalloc) := MapiGetDefaultMalloc;
    if Rslt = S_OK then
    Rslt := OpenIMsgOnIStg(
    pMsgSes,
    @MAPIAllocateBuffer,
    @MAPIAllocateMore,
    @MAPIFreeBuffer,
    pMalloc,
    nil,
    vIStorage,
    pDummy, 0, 0,
    viMsg
    );

    if Rslt = S_OK then begin // Read a property
    Rslt := HrGetOneProp(viMsg, PR_SUBJECT, pProp);
    if Rslt = S_OK then begin
    with Listview1.Items.Add do begin
    Caption := 'Subject';
    SubItems.Add(pProp.Value.lpszA);
    end;
    end;

    Rslt := HrGetOneProp(viMsg, PR_RECEIVED_BY_NAME, pProp);
    if Rslt = S_OK then
    with Listview1.Items.Add do begin
    Caption := 'Received by';
    SubItems.Add(pProp.Value.lpszA);
    end;

    Rslt := HrGetOneProp(viMsg, PR_RECEIVED_BY_EMAIL_ADDRESS, pProp);
    if Rslt = S_OK then
    with Listview1.Items.Add do begin
    Caption := 'Received by (E-mail address)';
    SubItems.Add(pProp.Value.lpszA);
    end;

    Rslt := HrGetOneProp(viMsg, PR_SENT_REPRESENTING_NAME, pProp);
    if Rslt = S_OK then
    with Listview1.Items.Add do begin
    Caption := 'Sent Representing';
    SubItems.Add(pProp.Value.lpszA);
    end;

    Rslt := HrGetOneProp(viMsg, PR_RCVD_REPRESENTING_NAME, pProp);
    if Rslt = S_OK then
    with Listview1.Items.Add do begin
    Caption := 'Received Representing';
    SubItems.Add(pProp.Value.lpszA);
    end;

    Rslt := HrGetOneProp(viMsg, PR_IMPORTANCE, pProp);
    if Rslt = S_OK then
    with Listview1.Items.Add do begin
    Caption := 'Importance';
    SubItems.Add(IntToStr(pProp.Value.L)); // L = longint
    end;

    Rslt := HrGetOneProp(viMsg, PR_BODY, pProp);
    if Rslt = S_OK then
    Memo1.Lines.Text := pProp.Value.lpszA;
    end;
    pointer(viMsg) := nil;
    finally
    MAPIUninitialize;
    end;
    end;
    end;
    end;
    </PRE&gt

    Comment

    Working...
    X