TIdIMAP4.UIDSearchMailBox()對于ASCII字符完全有效,但是對于非ASCII字符,例如波斯語/波斯語,服務器沒有任何回傳。
例如,當我搜索正文中包含 "foo "的電子郵件時,它可以作業。但是,當我試圖搜索 "?????? "時,它卻不起作用。
我的搜索的IMAP命令是:
C9 UID SEARCH CHARSET UTF-8 UID 84:* BODY {N}
法爾西語的東西,用UTF-8編碼
其中84:*是電子郵件UID的范圍,N是UTF-8編碼的搜索文本的位元組數,
是CRLF換行符。該命令將分兩步提交。
我很確定,有一些郵件符合這個搜索標準。
我很確定,有一些郵件符合這個搜索標準。
我在Gmail、Microsoft Exchange和hMail服務器上看到這個問題。
你有什么想法嗎?
你有什么想法嗎?
以下是我的代碼的摘要:
procedure TForm1. btn_GetMailsBySearchClick(Sender: TObject);。
begin
:
DoLog('Searching mail box started') 。
if not id_IMAP.UIDSearchMailBox(FSearchInfoArray) then
begin
DoLog(SearchMailBox failed, True)。
Exit。
end;
:
end;
procedure TForm1. DoLog(const ADesc: String; ADoLogLastResponse: Boolean);
var
AStr: String。
begin
:
AStr := Format('[%s]: %s', [DateTimeToStr(Now), ADesc])。)
if ADoLogLastResponsethen
AStr := AStr Format(' 。最后的回應是"%s"',[GetLastResponseStr])。)
: //saving AStr in file or memo .
結束。
function TForm1.GetLastResponseStr: String;
var
i: 整數。
begin
結果 := ''。
with id_IMAP.LastCmdResult.Text do
for i :=0 to Count - 1 do
begin
if Result <> '' then Result := Result #13#10;
Result := Result Strings[i];
end。
end;
我通過這種方法沒有得到任何回應,我是不是走錯了路?
uj5u.com熱心網友回復:
我的問題在hMail服務器上通過從3版升級到4版得到了解決,但在其他郵件服務上仍然存在。
uj5u.com熱心網友回復:
根據RFC3501 §6.4.4,你必須期待三種型別的回應:
OK= 服務器理解并支持你的請求;但沒有匹配的搜索結果NO=CHARSET或搜索標準被理解,但不被支持NO=CHARSET或搜索標準被理解,但不被支持BAD= 命令或引數不被支持;馬虎的服務器實作可能對不支持的CHARSET回傳這個結果
那么,你是否真的在看服務器回傳的內容(即通過.GetResponse())?因為"它不作業"可能缺少的是你對實際作業的預期與預期不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/316494.html
標籤:
