Ich versuche, alle meine ungelesenen E-Mails mit IMAP abzurufen, und ich scheint zu verbinden und diese ungelesene Nachricht zu lokalisieren (Ich kann zum Beispiel sehen, dass SearchResult 3 zurückgibt Elemente, die meinen 3 derzeit ungelesenen Nachrichten entsprechen), aber der IMAP.Retrieve-Aufruf gibt immer false zurück und ruft keine von ihnen ab.Ich kann nicht nur ungelesene Nachrichten mit TIdIMAP4 abrufen
Siehst du, was an meinem Code fehlen muss?
procedure TForm1.btnUnreadMessagesClick(Sender: TObject);
var i: integer;
SearchInfo: array of TIdIMAP4SearchRec;
MSG: TIdMessage;
begin
Memo1.Lines.Clear;
IMAP.Host := 'outlook.office365.com';
IMAP.Port := 993;
IMAP.Username := '[email protected]';
IMAP.Password := 'xxxxx';
SSL.Host := IMAP.Host;
SSL.Port := IMAP.Port;
SSL.Destination := SSL.Host + ':' + IntToStr(SSL.Port);
SSL.MaxLineLength := MaxInt;
IMAP.IOHandler := SSL;
IMAP.UseTLS := utUseImplicitTLS;
IMAP.Connect;
IMAP.SelectMailBox('INBOX');
SetLength(SearchInfo, 1);
SearchInfo[0].SearchKey := skUnseen;
IMAP.UIDSearchMailBox(SearchInfo);
for i := 0 to High(IMAP.MailBox.SearchResult) do begin
MSG := TIdMessage.Create(nil);
try
if IMAP.Retrieve(IMAP.MailBox.SearchResult[i], MSG) then begin
// Here is the problem, I never enter this section
Memo1.Lines.Add(MSG.From.Text);
end;
finally
MSG.Free;
end;
end;
IMAP.Disconnect;
end;
Danke für Ihre Hilfe.
Danke Victoria für die Betrachtung. Es macht keinen Unterschied, ich habe SearchInfo [0] hinzugefügt. Datum: = Datum; und es findet die 3 ungelesenen Nachrichten (wie es bereits lokalisierte), aber wenn ich versuche, sie abzurufen, gibt IMAP.Retrieve (IMAP.MailBox.SearchResult [i], MSG) false zurück. :-( –
Es sieht so aus, als ob Sie UIDs (aus Ihrer Suche) mit Sequence-Id-Calls mischen (ich kenne diese Bibliothek nicht, aber so sieht es aus.) Gibt es UID-Versionen von Retrieve? – Max
@Max: your Analyse ist korrekt und ja, es gibt UID-basierte Retreival Funktionen zur Verfügung –