我们已经构build了一个Web服务,需要不断检查电子邮件。 基本上,用户向我们发送一封电子邮件,服务器应该根据该电子邮件进行操作。 我们可以使用一个crontab PHP脚本,每分钟检查一次新邮件,使用POP。 但是这对popserver来说有点冒犯,效率不高(1分钟太长)。
但是,我已经阅读了有关在移动设备上使用IMAP的推送电子邮件。 在我的情况下,不是一个移动设备,而是一个networking服务器。
我可以推送一个电子邮件到我的networking服务器,并执行一个PHP脚本? 我们使用GMail作为POP / SMTP / IMAP服务器。
从答案编辑1 ,我们发现:
我的networking服务器上必须有一个全天候运行的进程(守护进程)来检查邮件
这个守护进程可以使用以下方式与Gmail进行通信:i)使用NOOP的POP或ii)使用IDLE的IMAP
什么是最好的? POP或IMAP? Google似乎会邀请更多的使用IMAP。
我不想过度使用gmail(每隔10secs检查电子邮件的“合理使用”是什么?
谢谢!
如果您使用POP3并保持连接处于打开状态,则可能无法获得新消息 – 我不记得是否属于规范的一部分,但是我所处理的POP3服务器基本上locking了邮箱的持续时间POP3会话,所以只要POP3会话打开(STAT和UIDL和LIST和LAST – 总是返回相同的响应,直到您退出并重新login),就不会有新邮件到达。
如果您使用IMAP,则应该能够保持IMAP连接的打开状态,并定期轮询新邮件。 这比login,检查和断开连接要便宜得多,如果你想每隔(例如)10秒钟就这样做的话。
我不会在前端Web服务器上运行轮询器。 我将有一个后端长时间运行的进程(守护进程)轮询更改,并通过一些消息传递系统与前端Web服务器中的PHP应用程序进行通信。 (“消息传递系统”可以像向共享数据库的表中写入请求和状态信息那样简单)。
如果您愿意,可以使用PHP编写轮询器守护进程。 您可以通过此过程获得额外的体验,并适应不断变化的邮箱:如果用户邮箱不断变化,则保持连接并频繁轮询。 如果邮箱没有更改,请断开IMAP连接,并在5分钟后再次检查。
詹姆士
如果你控制你的web服务器:你可以使用gmail将电子邮件转发到web服务器,然后使用/ etc / aliases文件中的pipe道将电子邮件提供给一个可以从标准英寸中读取的php脚本。等同的机制来pipe理电子邮件到你select的任何电子邮件服务器(MTA)的脚本,我个人使用exim。)基本上,你的别名文件看起来像
username: |/var/www/myphpscript.php
和myphpscript.php将读取STDIN上的电子邮件,并采取行动。
如果您不控制您的Web服务器: IMAP支持一个IDLE命令,该命令允许客户端在等待电子邮件到达时打开与服务器的连接。 (这有点像PUSH通知,除了客户端必须build立并保持与服务器的开放连接)您可以编写一个脚本,该脚本将打开与Gmail IMAP服务器的连接,并使用IDLE命令等待新的电子邮件。 这将需要能够在服务器上运行持久性进程。 可能有一种方法使用像fetchmail这样做,然后将电子邮件传递给一个PHP脚本。
希望有所帮助!
如果你正在托pipe你自己的邮件服务器,你可以使用类似procmail的东西。 我不认为有一个选项来自动处理电子邮件。
如果你在邮件服务器上有pipe理权限,为什么不写一个守护进程/ perl / shell / php脚本来检查文件是否存在,然后睡5秒(或者你关心的时间间隔很短),然后检查再次。 这就是所有你的“推送”邮件服务器将会做的,你将消除一个复杂的层。
编辑
对不起,我误解了。 我以为你控制了stream行的服务器。
你知道pop服务器运行的是什么软件? 学习是否支持某种推送机制还有很长的路要走。
编辑2
看看这个: http : //www.phpclasses.org/browse/package/2.html
它支持“NOOP”,防止空闲连接超时。 听起来就像你需要实现一个PHP POP3客户端。
你不能推POP,这是一个严格的来来去去的协议。
你能够使用自己的邮件服务器,而不是GMail? 否则,GMail是否允许自动转发电子邮件? 无论哪种情况,您都可以设置邮件服务器,然后根据收到的邮件触发操作。
我的答案可能是更多的编程相关的系统pipe理员…
我相信可以通过Google API编写一个脚本来启动一个长期的http请求,这个请求基本上只是等到电子邮件可用。
大多数“推送”电子邮件是客户端启动。 一个客户端会发出一个HTTP请求来请求新的邮件,服务器会在发送时给他们回答。
我怀疑,如果60秒的等待时间对你来说太长,那么你可能要重新考虑你使用Gmail的决定。 Gmail对于正常使用来说相当不错,但是消息的即时传递似乎并不是他们关注系统所做的事情。 Google不提供有关快速传递邮件的许多保证。
如果你运行你自己的服务器,那么他们有许多选项来configuration邮件服务器把消息传递给一个进程。 检查该邮件服务器的文档。