2011-02-05 120 views
3

我正在研究基于到达Gmail的新IMAP电子邮件来触发PHP脚本的应用程序。知道新电子邮件的最佳方式是通过Gmail IMAP帐户获得的?我想不出什么,但配置一个cron作业。我在Linux(Ubuntu)盒子上运行PHP + Nginx。通过PHP检查循环中的新邮件的Gmail IMAP

回答

4

我发现这只是celular公司开发人员在做验证客户端gmail的方式。

好,开始建立连接normaly,则:

$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([email protected]_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服务器时立即同步传入的电子邮件。
1

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

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

+0

谢谢,阿利斯特。当我在我的域中使用Google Apps时,您会推荐什么解决方案?如果cronjob,你会有一个例子吗? – Roger 2011-02-05 17:59:47