Php 如何使用imap\u ping在新电子邮件到达时获取通知

Php 如何使用imap\u ping在新电子邮件到达时获取通知,php,imap,Php,Imap,我研究了如何在新电子邮件通过IMAP到达邮箱时获得通知。显然有几种方法可以做到这一点,一种是运行cron作业(我不想这么做),另一种是使用名为IMAP-IDLE的函数。我在PHPAPI中找不到关于它的任何东西,但我找到的是一个方法,该方法假设可以做到这一点。 在上面的描述中,它说“它可能会发现新邮件” 有人能给我解释一下吗\给我看一个代码示例。 如果只有在连接处于活动状态时才得到TRUE\FALSE,我如何知道新邮件已到达?使用PHP立即检查新邮件 尝试在服务器上使用检查新邮件的问题在于,该功能

我研究了如何在新电子邮件通过IMAP到达邮箱时获得通知。显然有几种方法可以做到这一点,一种是运行cron作业(我不想这么做),另一种是使用名为IMAP-IDLE的函数。我在PHPAPI中找不到关于它的任何东西,但我找到的是一个方法,该方法假设可以做到这一点。 在上面的描述中,它说“它可能会发现新邮件” 有人能给我解释一下吗\给我看一个代码示例。 如果只有在连接处于活动状态时才得到TRUE\FALSE,我如何知道新邮件已到达?

使用PHP立即检查新邮件 尝试在服务器上使用检查新邮件的问题在于,该功能实际上只用于两个目的:

  • 检查流是否仍处于活动状态
  • 让溪流活下去
现在,如果有新邮件,则此函数的
可能会返回
true
,但您仍然需要在事后获取它

真正的问题 PHP是一种脚本语言-一旦脚本完成执行,它将取消设置所有变量,并使您在下次运行时重新开始。i、 PHP中的eno函数将能够帮助您即时检查是否有新邮件传入,除非您通过延长执行时间来启动运行所需脚本的PHP进程。然而,你真的,真的不应该这样做,这是一种不好的做法,实际上并不是PHP设计的目的

可能的解决方案


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

所有
imap_ping()
所做的是确保用户仍然登录-它不会检查新邮件或任何类似的内容,您可以使用它检查是否仍然登录,作为一个保持活力的人。至于您的问题,您希望PHP检查新电子邮件何时到达?为了什么?要将其发送回浏览器?PHP是一种脚本语言,因此必须从某个地方调用它——这取决于确定您正在寻找的解决方案类型的目的。它将从服务器调用,如果有新的电子邮件,它将向移动客户端发送通知。在php手册中:“bool imap_ping(resource$imap_stream)imap_ping()ping流以查看它是否仍然处于活动状态。它可能会发现新邮件;这是定期“新邮件检查”的首选方法,对于具有非活动超时的服务器也是“保持活动状态”的首选方法。这是定期“新邮件检查”的首选方法吗如果它所做的唯一事情是确保用户仍然登录?该函数仅在您的imap用户仍然登录并且流处于活动状态(这可能表示新邮件)时返回,这是定期检查的首选方法,因为您可以看到
==true){//check new mail}
类型的内容,而不是通过登录过程。查看函数的返回,对于流是否仍然活动,只需判断为true或false。您计划如何向移动客户端发送通知?大多数客户端向服务器发送检查请求,然后返回推送通知响应。将使用APN向移动设备发送通知。如果我理解正确的话,这个函数对我一点帮助都没有。我正在寻找一些东西,当一封新邮件到达邮箱时会提醒服务器。有问题的是,我希望邮件到达时它是即时的,而无需我进行定期检查(每10-15分钟一次)。尝试为您的场景创建解决方案的问题在于PHP是一种脚本语言—一旦它完成执行,它将取消设置所有变量。您可以尝试在无限循环中执行
php
过程,同时不断延长执行时间,但您真的不应该这样解决它。这样做的最佳选择是在c/c++中创建一个
守护进程
,该守护进程可以在后台持续运行,如果您确实希望它尽可能接近即时,则执行检查并发送通知。