仅在Imap和PHP上发送新电子邮件

时间:2014-02-05 09:06:09

标签: php mysql email imap

我正在开发一个将电子邮件下载到数据库中的系统,但我只想从收件箱中抓取新的电子邮件。

此刻我有这个程序:

//find new emails
$news = imap_search($conn, 'SINCE "4 February 2014"');

但是我认为按日期跟踪实际上并不是一个好习惯,而且我希望将其替换为允许我只抓取 Msgno 比上一个更大的电子邮件的查询有

有没有办法让 imap_search()或任何其他功能只选择Msgno大于指定值的电子邮件?

2 个答案:

答案 0 :(得分:0)

可能的方法:

$count = imap_num_msg($connection);
for($msgno = 1; $msgno <= $count; $msgno++) {
$headers = imap_headerinfo($connection, $msgno);
if($headers->Unseen == 'U') {
... do something ...
}
}

答案 1 :(得分:0)

好的,所以我最终通过以下程序解决了这个问题:

  1. 选择您在IMAP中获得的最后一个MSGNO(使用 imap_num_msg()
  2. 选择数据库中的最后一个MSGNO。
  3. 现在,我们只需要在DB上的最后一个和IMAP上的最后一个之间使用For循环。
  4. 在中间下载everysingle电子邮件并将其存储到数据库中。

    // calculamoselmáximo         $ maximo = imap_num_msg($ conn);

        //comenzamos desde... (from db)
        $msgno = 1
    
        //recorremos los mails
        for($msgno <= $maximo; $msgno++) {
    
            //sacamos la información del email especificado
            $email['header']    = imap_headerinfo( $conn, $nuevo );
            $email['body']      = imap_fetchbody ( $conn, $nuevo, 1);
    
            $emails[] = $email;
        }
    

    亲切的问候!