Этот вопрос похож на этот: PHP imap_search: символы UTF-8 / не ASCII на почтовых серверах Microsoft Exchange
Но с той разницей, что почтовый серверв этом случае поддерживается поиск по UTF-8, и мы также используем UTF-8 в функции imap_search
.
У меня есть тема электронного письма, подобная этой: mountainguan测试
Я хочу найтиэлектронная почта с этой темой или ее частью с использованием этого кода PHP:
$mailbox = "{any-mail.server.com:993/imap/ssl}INBOX";
$mailbox_username = "someone@server.com";
$mailbox_password = "*******";
echo "Trying to connect to '$mailbox'...\n";
$mbox_connection = imap_open($mailbox, $mailbox_username, $mailbox_password);
$mailsIds = imap_search($mbox_connection, 'SUBJECT "mountain"', SE_UID, "UTF-8");
if(!$mailsIds) {
echo "No emails found!\n";
imap_close($mbox_connection);
die();
}
echo "Found " . count($mailsIds) . " email(s)...\n";
foreach($mailsIds as $mailId) {
echo "+------ P A R S I N G ------+\n";
$headersRaw = imap_fetchheader($mbox_connection, $mailId, FT_UID);
$header = imap_rfc822_parse_headers($headersRaw);
echo "From: " . imap_utf8($header->fromaddress) . "\n";
echo "Subject: " . imap_utf8($header->subject) . "\n";
}
Когда я ищу SUBJECT "mountain"
, он возвращает сообщение, как и ожидалось:
$ php imap-test.php
Trying to connect to '{any-mail.server.com:993/imap/ssl}'...
Found 1 email(s)...
+------ P A R S I N G ------+
From: Someone Else <someone@other-server.com>
Subject: mountainguan测试
Когда яизмените поиск на SUBJECT "测试"
сейчас, он возвращает это:
$ php imap-test.php
Trying to connect to '{any-mail.server.com:993/imap/ssl}'...
No emails found!
Тот же поиск работает через OpenSSL, поэтому я ожидаю, что он работает и с PHP:
openssl s_client -connect any-mail.server.com:993
a LOGIN someone@server.com *******
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE QUOTA] Logged in
a SELECT "inbox"
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft unknown-0 unknown-1 $NotJunk $Forwarded)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft unknown-0 unknown-1 $NotJunk $Forwarded \*)] Flags permitted.
* 9 EXISTS
* 0 RECENT
* OK [UNSEEN 9] First unseen.
* OK [UIDVALIDITY 1500057051] UIDs valid
* OK [UIDNEXT 5388] Predicted next UID
* OK [HIGHESTMODSEQ 14790] Highest
a OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
a UID SEARCH SUBJECT "mountain"
* SEARCH 5387
a OK Search completed (0.001 + 0.000 secs).
a UID SEARCH SUBJECT "测试"
* SEARCH 5387
a OK Search completed (0.001 + 0.000 secs).
a UID FETCH 5387 (BODY[HEADER.FIELDS (subject date)])
* 9 FETCH (UID 5387 FLAGS (\Seen) BODY[HEADER.FIELDS (SUBJECT DATE)] {245}
Subject: =?UTF-8?Q?mountainguan=E6=B5=8B=E8=AF=95?=
Date: Sat, 4 May 2019 01:11:57 +0200
)
a OK Fetch completed (0.001 + 0.000 secs).
a logout
* BYE Logging out
a OK Logout completed (0.000 + 0.000 secs).
closed
В чем проблема с использованием PHP imap_search()
здесь?Нужно ли преобразовывать / де- или кодировать что-то из строки поиска во что-то еще?