Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

Re: EMails auslesen mit Simple MAPI

  Alt 16. Sep 2009, 15:25
Hallo,
Zitat von hathor:
Lokale Variablen ändern sich.
Schreibe Deine SessionID in eine globale Variable oder in ein Edit-Feld.
Problem bleibt damit bestehen, komme irgendwie nicht dahinter, was hier falsch läuft.

Damit scheint es zu funktionieren:
Delphi-Quellcode:
uses Mapi;

Var
    SessionID: LHANDLE; // <- warum das erforderlich ist, hätte ich gerne mal erklärt.

procedure TForm1.Button1Click(Sender: TObject);
var Err: Cardinal;
    // SessionID: LHANDLE; // <- Wieso muss die ausserhalb der Prozedure deklariert sein?
    MessID: AnsiChar;
    pMsg: PMapiMessage;
    i: Integer;
begin
  Err := MapiLogOn(Handle, '', '', MAPI_EXPLICIT_PROFILE, 0, @SessionID);
  i := 1;
  Err := MapiFindNext(SessionID, 0, nil, nil, 0 {MAPI_UNREAD_ONLY}, 0, @MessID);
  while Err = SUCCESS_SUCCESS do
  begin
    Err := MapiReadMail(SessionID, Handle, @MessID, 0 {MAPI_UNREAD_ONLY or MAPI_PEEK}, 0, pMsg); // <- ab hier simmt die Session-ID nicht mehr
    if (Err = SUCCESS_SUCCESS)
    then begin
      StringGrid1.Cells[0,i] := MessID;
      StringGrid1.Cells[1,i] := pMsg^.lpOriginator^.lpszName + ' (' + pMsg^.lpOriginator^.lpszAddress + ')';
      StringGrid1.Cells[2,i] := pMsg^.lpszSubject;
      StringGrid1.Cells[3,i] := pMsg^.lpszDateReceived;
      Inc(i);
      StringGrid1.RowCount := i + 1;
      Application.ProcessMessages;
    end;
    Err := MapiFreeBuffer(pMsg);
    Err := MapiFindNext(SessionID, 0, nil, @MessID, 0 {MAPI_UNREAD_ONLY}, 0, @MessID);
  end;
  Err := MapiLogOff(SessionID, 0, MAPI_LOGOFF_SHARED, 0);
end;
  Mit Zitat antworten Zitat