【问题标题】:PHP method for imap_search by date按日期进行 imap_search 的 PHP 方法
【发布时间】:2023-03-25 07:00:01
【问题描述】:

我试图仅显示最近 5 分钟内收到的电子邮件,例如:

$since = date('d-M-Y G\:i', time() - 300); // current time - 5 min
$mb = imap_search ($m_mail, 'UNSEEN SINCE ' . $since . '');

有没有简单的方法来做到这一点?我找到了一种方法:获取当天(例如:2010 年 5 月 9 日)所有看不见的邮件,循环浏览这些电子邮件,然后检查是否在最后 X 分钟内发送了任何邮件。如果是这样,请回显它(使用 imap_headerinfo->udate )。

但是,当我查看 gmail.com 时,在 17:08 收到了一封电子邮件,而在我的服务器上,这封电子邮件似乎是在 14:08 收到的

更新:我解决了问题,它显示电子邮件是在 17:04 在 gmail.com 中发送的,而在我的应用程序中显示的是 14:04。我将全球服务器时区更改为 GMT +0 并设置应用程序时区。现在它正确显示了我的时间,但我仍然不知道如何以更短的方式获取最近 X 时间内收到的电子邮件。

【问题讨论】:

    标签: php gmail imap


    【解决方案1】:

    由于 PHP 使用不允许按时间搜索的 IMAP2 搜索工具,这可能是唯一的解决方案。或者您可以查看 RECENT 标志,但这仍然需要循环浏览当天的所有消息。

    【讨论】:

      【解决方案2】:

      我使用上面的搜索:

      $mailbox = imap_open($str_conexao, $login, $senha) or die("Can't connect: " . imap_last_error());
      
      echo $since = date("D, d M Y", strtotime("-1 days"));
      
      $search = imap_search($mailbox, 'FROM "somebody@exemple.com" SINCE "'.$since.' 00:00:00 -0700 (PDT)"', SE_UID);
      echo "<PRE>";
        var_dump($search);
      echo "</PRE>";
      foreach ($search as $msg_id)
      {
          //Pega informações da mensagem
          $overview = imap_fetch_overview($mailbox, $msg_id, FT_UID);
          echo "<PRE>";
           var_dump($overview);
          echo "</PRE>";
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-18
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        相关资源
        最近更新 更多