【问题标题】:New emails only on Imap and PHP仅在 Imap 和 PHP 上的新电子邮件
【发布时间】:2023-03-19 05:53:01
【问题描述】:

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

此时我有这个程序:

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

但是我认为按日期跟踪确实不是一个好习惯,我想将其替换为一个查询,该查询允许我仅抓取 Msgno 大于上一个邮件的电子邮件有。

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

【问题讨论】:

标签: php mysql email imap


【解决方案1】:

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

  1. 选择您在 IMAP 中获得的最后一个 MSGNO(使用 imap_num_msg()
  2. 选择您在数据库中获得的最后一个 MSGNO。
  3. 现在,我们只需使用 For 在 DB 上的最后一个和 IMAP 上的最后一个之间循环。

下载中间的每封邮件并存入数据库。

//calculamos el má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;
    }

亲切的问候!

【讨论】:

  • 是的,但您应该使用 UID,而不是消息序列号。如果删除消息,消息序列号减少,但 UID 不会。
【解决方案2】:

一种可能的方法:

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

【讨论】:

  • 这假设没有其他 IMAP 客户端使用该帐户。
  • 是的,我删除了 "if($headers->Unseen == 'U') {" 行...我从数据库中取出最后一个,然后从db 上的最后一个到 imap 上的最后一个。 (在两个限制之间下载一个)
  • @ChrisRusso:你从..electrictoolbox.com/php-imap-unread-messages获取它
  • @ChrisRusso。每次这样抓取都必须提到源链接。
  • 谢谢兄弟!无论如何都是无用的! Ps:1 周前我在海得拉巴的 Banjara Hills,好地方兄弟 :)
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2011-05-21
  • 2016-01-15
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多