我无法使用 TIdIMAP4 检索未读消息
I can't retrieve just Unread Messages using TIdIMAP4
我正在尝试使用 IMAP 检索我所有未读的电子邮件,我似乎可以连接并找到那些未读的邮件(例如,我可以看到 SearchResult returns 3 个项目对应于我的3 条当前未读消息),但 IMAP.Retrieve 调用始终 returns 错误,未检索任何消息。
您看到我的代码中一定缺少什么了吗?
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 := 'xxxxx@acme.com';
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;
感谢您的帮助。
当使用 SearchMailBox()
时,SearchResult
数组包含序号。
使用 UIDSearchMailBox()
时,SearchResult
数组包含 UID。
Retrieve()
需要一个序号。由于您有 UID,请使用 UIDRetrieve()
,例如:
IMAP.UIDRetrieve(IntToStr(IMAP.MailBox.SearchResult[i]), MSG)
我正在尝试使用 IMAP 检索我所有未读的电子邮件,我似乎可以连接并找到那些未读的邮件(例如,我可以看到 SearchResult returns 3 个项目对应于我的3 条当前未读消息),但 IMAP.Retrieve 调用始终 returns 错误,未检索任何消息。
您看到我的代码中一定缺少什么了吗?
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 := 'xxxxx@acme.com';
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;
感谢您的帮助。
当使用 SearchMailBox()
时,SearchResult
数组包含序号。
使用 UIDSearchMailBox()
时,SearchResult
数组包含 UID。
Retrieve()
需要一个序号。由于您有 UID,请使用 UIDRetrieve()
,例如:
IMAP.UIDRetrieve(IntToStr(IMAP.MailBox.SearchResult[i]), MSG)