TIdIMAP4.UIDSearchMailBox() works perfectly for ASCII characters, but for non-ASCII characters, such as in Persian/Farsi, the server doesn't return anything.
For example, when I search for emails that contain "foo" in the body, it works. But when I try to search for "سودابه", it does not work.
The IMAP command for my search is:
C9 UID SEARCH CHARSET UTF-8 UID 84:* BODY {N}\r\nsomething in Farsi that is encoded with UTF-8
Where 84:* is the range of email UIDs, N is the byte count of the UTF-8 encoded search text, and \r\n is a CRLF line break. The command will be submitted in two steps.
I'm pretty sure that there are some emails matching this search criteria.
I saw this issue on Gmail, Microsoft Exchange, and hMail servers.
Do you have any idea?
Here is abstract of my codes:
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 ADoLogLastResponse then
AStr := AStr Format('. Last response is "%s"', [GetLastResponseStr]);
: //saving AStr in file or memo
end;
function TForm1.GetLastResponseStr: String;
var
i: Integer;
begin
Result := '';
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;
I didn't get any response via this approach, Did I go to wrong way?
CodePudding user response:
My problem is solved for hMail server by upgrading from version 3 to 4. but on other mail services is still remained.
CodePudding user response:
As per RFC3501 §6.4.4, you have to expect 3 types of responses:
OK= server understands and supports your request; no search results matched, thoughNO= either theCHARSETor the search criteria is understood but not supportedBAD= command or arguments are not supported; sloppy server implementations might return this for an unsupportedCHARSET
So, are you actually looking at what the server returns (i.e. thru .GetResponse()? Because "it does not work" might be missing that you have different expectations from what actually works as intended.
