【问题标题】:How to get a notification when a new Email arrives using imap_ping如何使用 imap_ping 在新电子邮件到达时获得通知
【发布时间】:2013-04-21 16:24:53
【问题描述】:

我研究了如何在新电子邮件通过 IMAP 到达邮箱时获得通知。显然有几种方法可以这样做,一种是运行 cron-job(我不想这样做),另一种是使用名为 IMAP-IDLE 的函数。我在 PHP API 中找不到任何关于它的信息,但我确实发现了 imap_ping 方法,它应该可以做到这一点。 在上面的描述中它说“它可能会发现新邮件” 有人可以向我解释一下\给我看一个关于如何做到这一点的代码示例。 如果我只有在连接有效的情况下得到 TRUE \ FALSE,我怎么知道有新邮件到达?

【问题讨论】:

  • 所有imap_ping() 所做的是确保用户仍然登录 - 它不会检查新电子邮件或任何类似的东西,您可以使用它来检查是否仍然登录,并且作为保持=-活着。至于您的问题,您希望 PHP 检查新电子邮件何时到达?出于什么目的?将其发送回浏览器? PHP 是一种脚本语言,因此它必须从某个地方调用 - 这取决于确定您正在寻找的解决方案类型的目的。
  • 它将从服务器调用,如果有新电子邮件,它将向移动客户端发送通知。来自 php 手册:“bool imap_ping (resource $imap_stream) imap_ping() ping 流以查看它是否仍然处于活动状态。它可能会发现新邮件;这是首选方法 用于定期“新邮件检查”,以及对具有不活动超时的服务器进行“保持活动”。”如果它唯一的作用是确保用户仍然登录,那么定期“新邮件检查”的首选方法是什么?
  • 该函数仅在您的 imap 用户仍处于登录状态且流式传输处于活动状态(可能表示新邮件)时返回,这是定期检查的首选方法,如您所见==true) { //check new mail} 类型的东西,而不是通过登录过程。查看函数的返回值,只是判断流是否还活着的真假。您打算如何将通知发送到移动客户端?大多数客户端向服务器发送检查请求,然后返回推送通知的响应。
  • 将使用 Apns 发送到移动设备的通知。如果我理解正确,该功能对我没有任何帮助。我正在寻找能够在新电子邮件到达邮箱时提醒服务器的东西。有问题的部分是我希望它在邮件到达时是即时的,而无需我进行定期检查(每 10-15 分钟)
  • 尝试为您的方案创建解决方案的问题是 PHP 是一种脚本语言 - 一旦它完成执行,它unset 的所有变量。您可以尝试分叉一个php 在无限循环中运行所需脚本的进程,同时继续延长执行时间,但您真的真的不应该解决它方法。最好的办法是在 c/c++ 中创建一个daemon,它可以在后台持续运行,如果你真的希望它尽可能接近即时,它会进行检查并发送通知。

标签: php imap


【解决方案1】:

使用 PHP 即时检查新邮件

尝试使用imap_ping()检查服务器上的新邮件的问题是该功能实际上只有两个目的:

  • 检查流是否仍处于活动状态
  • 保持流活着

现在,如果有新邮件,stream可能为这个函数返回true,但你仍然需要在后文中获取它。

真正的问题

PHP 是一种脚本语言 - 一旦脚本完成执行,它unset 的所有变量都会让您在下次运行时重新开始。即 PHP 中的 no 函数将能够帮助您立即检查是否有新邮件进来,除非您分叉运行所需脚本的 PHP 进程并延长执行时间。但是,您真的,真的不应该这样做,这是一种不好的做法,而且真的不是 PHP 的设计初衷。

可能的解决方案

要做你想做的事,最好的办法是制作一个 c/c++ 守护程序或类似的东西,它会在后台持续运行。你可以让它检查新邮件,然后用它通知移动设备,或者如果你使用 PHP 比使用 c/c++ 更好,你可以创建一个脚本来通知当守护进程发现新邮件时。实现取决于您,但检查何时收到新邮件的解决方案不是用 PHP 可行(也不应该)完成的。

【讨论】:

  • 创建一个每分钟运行 PHP 脚本的 CRON 作业怎么样?
猜你喜欢
  • 2015-05-29
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
相关资源
最近更新 更多