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-インターネットメッセージアクセスプロトコル-バージョン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 に答える