我想连接到 IMAP 服务器并查找发送到的所有电子邮件abc@server.tld
。我试过了:
$mbox = imap_open("{imap.server.tld/norsh}", "imap@server.tld", "5ecure3");
$result = imap_search($mbox, "TO \"abc@server.tld\"", SE_UID);
但这也列出了发送到的电子邮件,例如123abc@server.tld
. 是否有可能搜索完全匹配?
简短的回答:你不能。我在RFC 2060 - Internet Message Access Protocol - Version 4rev1中没有找到任何可以完成的内容。
但是,有一个解决方法。首先获取所有包含abc@server.tld
的电子邮件,然后遍历结果并仅选择完全匹配的内容。
$searchEmail = "abc@server.tld";
$emails = imap_search($mbox, "TO $searchEmail");
$exactMatches = array();
foreach ($emails as $email) {
// get email headers
$info = imap_headerinfo($mbox, $email);
// fetch all emails in the TO: header
$toAddresses = array();
foreach ($info->to as $to) {
$toAddresses[] = $to->mailbox . '@' . $to->host;
}
// is there a match?
if (in_array($searchEmail, $toAddresses)) {
$exactMatches[] = $email;
}
}
现在你有所有匹配abc@server.tld
的电子邮件$exactMatches