使用PHP在IMAP服务器上查找具有确切电子邮件地址的电子邮件

时间:2012-08-08 12:44:15

标签: php email search imap

我想连接到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。在某种程度上可以搜索完全匹配吗?

1 个答案:

答案 0 :(得分: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匹配的所有电子邮件