Odczyt maili od konkretnej daty

0

Dobry dzień,
Odczyt maili - podejście kolejne.
W jaki sposób, puścić odczytywanie maili przy pomocy TIdIMAP4, ale od konkretnej daty? Da się to w ogóle sprawnie jakoś zrobić?

0

a SearchMailBox z flagą skSince nie działa?

0

Jaki kod mam pokazać? Skoro praktycznie nie mam nic. Mam kawałek kodu, który odczytuje maile po kolei. Ale to jest bez sensu. No to pokażę co mam.

procedure TForm1.Button1Click(Sender: TObject);
var
    TheImap: TIdIMAP4;
    TheFlags: TIdMessageFlagsSet;
    TheUID: string;
    i: integer;
    nCount: integer;
    TheMsg: TIdMessage;
begin
  TheImap.Host := hostname;
  TheImap.Username := username;
  TheImap.Password := password;
  TheImap.Connect;

  TheImap.SelectMailBox('INBOX');
  TheMsg := TIdMessage.Create(nil);
  nCount := TheImap.MailBox.TotalMsgs;

  for i := 0 to nCount - 1 do
  begin
    TheImap.GetUID(i + 1, TheUID);
    TheImap.UIDRetrieveHeader(TheUID, TheMsg);
    if TheMsg.Date >= StrToDate('21.10.2022') then ShowMessage(DateToStr(TheMsg.Date) + ' Ok');
  end;
2

Może coś w stylu (kod nie sprawdzony z powodu chwilowego braku dostępu do kompilatora jest taką sklejką czegoś czego kiedyś używałem):

uses
   System.DateUtils;

procedure TForm2.Button1Click(Sender: TObject);
var
  SearchInfo: array of TIdIMAP4SearchRec;
  i: Integer;
begin
  IdIMAP4.Username:= 'login';
  IdIMAP4.Password:= 'haslo';
  IdIMAP4.Host:= 'imap.wp.pl';
  IdIMAP4.Port:= 993;

  IdIMAP4.Connect();
  if IdIMAP4.ConnectionState = csSelected then
  begin
    if IdIMAP4.SelectMailBox('INBOX') then
    begin
      SetLength(SearchInfo, 1);
      SearchInfo[0].SearchKey:= skSince;
      SearchInfo[0].Date:= IncDay(Date(), - 7); //tu data w przykładzie ostatnie 7 dni
      if IdIMAP4.SearchMailBox(SearchInfo) then
      begin
        for i:= 0 to High(IdIMAP4.MailBox.SearchResult) do
        begin
          //tu odczyt czyli Retrieve na postawie IdIMAP4.MailBox.SearchResult[i]
        end;
      end;
    end;
  end;```

1 użytkowników online, w tym zalogowanych: 0, gości: 1