通过PHP检查Gmail IMAP以获取循环中的新消息

时间:2011-02-05 17:02:14

标签: php gmail imap

我正在研究一个应用程序,用于根据到达Gmail的新IMAP电子邮件触发PHP脚本。了解新电子邮件的最佳方式是什么?已通过Gmail IMAP帐户登录?除了配置一个cron作业,我想不出什么。我在Linux(Ubuntu)盒子上运行PHP + Nginx。

2 个答案:

答案 0 :(得分:4)

我发现这就是celular公司开发人员为验证客户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是获取“电子邮件pusshed”的真正选择“给你。

  • 每次连接到电子邮件时,连接都会保持活动状态5到10分钟,除非您手动断开连接
  • Gmail确实将每个帐户限制为10个并发连接。
  • 然而,IMAP帐户应该检查邮箱,然后在超时之前将活动频道保留到IMAP服务器(IMAP-IDLE)的预设行业标准29分钟。如果将自动检索设置设置为20-30分钟,则应将手机连接到远程IMAP盒。
  • 当GMAIL收到电子邮件时,它应该向IMAP空闲会话发送响应,而mobiPush应该立即接收它。
  • 所有计划每10分钟检索一次Gmail邮件,此选项会在收到的电子邮件到达Gmail服务器时立即同步。

答案 1 :(得分:1)

只有两种方法可以从电子邮件帐户获取信息,连接到它,定期读取信息(例如,通过cron-job)获取新邮件,或者将电子邮件转发到您自己的服务器,管理新电子邮件到达PHP脚本。

Zend_Mail,Zend Framework的一部分有Zend_Mail_Storage_Imap(可以在没有其他MVC结构的情况下使用),它可以连接到Gmail来轮询帐户。