2

我想连接到 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. 是否有可能搜索完全匹配?

4

1 回答 1

2

简短的回答:你不能。我在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

于 2012-08-10T14:37:56.733 回答