通过PHP循环检查Gmail IMAP是否有新邮件

3

我正在研究一种应用程序,基于新的Gmail IMAP电子邮件触发PHP脚本。如何最好地知道Gmail IMAP帐户上有新邮件到达?我只能想到配置cron作业。我在Linux(Ubuntu)盒子上运行PHP + Nginx。

2个回答

4
我发现这是手机公司开发人员验证客户Gmail的方式。
首先,正常地建立连接,然后:
$t1=time();//mark time in
$tt=$t1+(60*1);//total time = t1 + n seconds

do{
    if(isset($t2)) unset($t2);//clean it at every loop cicle
    $t2=time();//mark time
    if(imap_num_msg($imap)!=0){//if there is any message (in the inbox)

        $mc=imap_check($imap);//messages check
        //var_dump($mc); die;//vardump it to see all the data it is possible to get with imap_check() and them customize it for yourself


    }else echo 'No new messagens';

    sleep(rand(7,13));//Give Google server a breack
    if(!@imap_ping($imap)){//if the connection is not up
        //start the imap connection the normal way like you did at first
    }

}while($tt>$t2);//if the total time was not achivied yet, get back to the beginning of the loop

就是这样了。

顺便说一下,以下是关于IMAP如何工作的一些好信息。我的观点是:由于IMAP使得保持一种“实时同步”连接成为可能,如果您不想配置MTA来接收电子邮件(像我一样),那么IMAP是一个真正的选项,可以让您“推送邮件”。

  • 每次连接到您的电子邮件时,连接会保持活动状态5至10分钟,除非您手动断开连接
  • Gmail限制每个帐户同时连接10个。
  • 然而,IMAP帐户应该检查邮箱,然后在预设的行业标准29分钟内与IMAP服务器保持活动通道(IMAP-IDLE)才会超时。如果您将自动检索设置为20-30分钟之间,则应将手机连接到远程IMAP框。
  • 当GMAIL收到电子邮件时,它应该向IMAP空闲会话发送响应,而mobiPush几乎可以立即捕获它。
  • 所有时间表都是每10分钟检索一次Gmail邮件,此选项将在邮件到达Gmail服务器时立即同步传入的电子邮件。

2

获取电子邮件账户信息只有两种方式,一种是连接到该账户,定期读取新消息(例如通过cron-job),另一种是将电子邮件转发到自己的服务器上,并将新到达的电子邮件传递给一个PHP脚本。

Zend_Mail 是 Zend Framework 的一部分,其中包括 Zend_Mail_Storage_Imap(可以不使用MVC结构),可连接到 Gmail 以轮询账户。


谢谢,阿利斯特。由于我在我的域中使用Google应用程序,您会推荐什么解决方案?如果是cronjob,您有示例吗? - Roger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接