1

我有一个功能可以连接到 imap 电子邮件帐户(目前正在使用 gmail 测试)以获取 UNSEEN 的电子邮件。收到电子邮件后,我会遍历它们并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 回答