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
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;```