1

私は、imap メール アカウント (現在 gmail でテスト中) に接続して、未確認のメールを取得する機能を持っています。メールを受け取った後、私はそれらをループしてimap_fetch_overview()imap_fetchbody()各メールで実行します。

この関数を実行すると、検索されたすべての電子メールが受信トレイで読み取りに設定されます。

とにかくこれを止める方法はありますか?理想的には、メールが表示されないようにしたいと思います。

これが私の機能です

function build_email_data(){

    $this->connect();

    /* grab emails */
    $emails = imap_search($this->inbox,'UNSEEN');

    /* if emails are returned, cycle through each... */
    if($emails) {

        /* put the newest emails on top */
        rsort($emails);

        $data = array();

        /* for every email... */
        foreach($emails as $email_number) {

            /* get information specific to this email */
            $overview = imap_fetch_overview($this->inbox,$email_number,0);
            $message = imap_fetchbody($this->inbox,$email_number,1);

            $_data['subject'] = $overview[0]->subject;
            $_data['from'] = $overview[0]->from;
            $_data['body'] = $message;
            $_data['owner_id'] = 1;
            $_data['email_number'] = $email_number;
            $_data['folder_id'] = 1;
            $_data['created'] = timestamp_to_mysqldatetime();
            $_data['updated'] = timestamp_to_mysqldatetime();
            $_data['email_date'] = timestamp_to_mysqldatetime(strtotime($overview[0]->date));

            $data[] = $_data;
        }

        $this->disconnect();

        return $data;
    }
}
4

2 に答える 2

3

彼らが READ に設定されている理由と、それを停止する方法を理解しました。

$message = imap_fetchbody($this->inbox,$email_number,1);

このコードは、メッセージを READ に設定します。オプションとして FT_PEEK を追加すると、UNSEEN のままになります

$message = imap_fetchbody($this->inbox,$email_number,1, FT_PEEK);
于 2012-11-14T16:45:37.717 に答える
1

UNSEENとRECENTを混同していませんか?メッセージを取得すると RECENT フラグがクリアされますが、フラグを変更する (\Seen を追加する) だけで SEEN フラグが変更されます。

于 2012-11-14T15:02:29.090 に答える