如何在专用服务器中获取所有php收件箱消息?
在我们的应用程序中,我们需要连接到用户的电子邮件收件箱并获取所有消息。 该应用程序将在Ubuntu操作系统的专用服务器上运行。 我使用imap扩展(imap_open、imap_fetchheader、imap_fetchbody等)在我的电脑上运行了一些测试。 使用此方法时存在多个问题: 1-连接和获取速度非常慢 2-如果收件箱中存在许多邮件,php脚本将超时 3-应用程序是多用户的,请求数很高 我的搜索结果解决了上述问题: 1-我们必须从谷歌或其他电子邮件服务器租用静态IP进行imap连接 2-我们必须使用PHP CLI从数据库获取订单并获取收件箱消息 3-php中的多线程 总结: 我想用php编写一个bot,每天连接邮件服务器。您建议使用什么连接和获取方式?(图书馆、方法、语言等)。谢谢 **更新:我运行以获取30条第一条消息的代码:如何在专用服务器中获取所有php收件箱消息?,php,email,imap,bots,mail-server,Php,Email,Imap,Bots,Mail Server,在我们的应用程序中,我们需要连接到用户的电子邮件收件箱并获取所有消息。 该应用程序将在Ubuntu操作系统的专用服务器上运行。 我使用imap扩展(imap_open、imap_fetchheader、imap_fetchbody等)在我的电脑上运行了一些测试。 使用此方法时存在多个问题: 1-连接和获取速度非常慢 2-如果收件箱中存在许多邮件,php脚本将超时 3-应用程序是多用户的,请求数很高 我的搜索结果解决了上述问题: 1-我们必须从谷歌或其他电子邮件服务器租用静态IP进行imap连接
$mbox = imap_open('{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'myemailaddress', 'mypassword');
$count = imap_num_msg($mbox);
for($i = $count; $i >= $count - 30; $i--){
$header = imap_fetchheader($mbox, $i);
/* process header & body */
}
imap_close($mbox);
这段代码运行得很好,但当我将imap_fetchheader更改为imap_fetchbody时,需要花费更多的时间
更新:
根据arkascha的回答,我对自己的设计和体系结构进行了研究,发现低速的原因在于与邮件服务器的连接。因为这是一个有I/O限制的任务,我缓存了到每个邮件服务器的imap连接,速度提高了,但没有那么多。我可能有偏见,但我会将Zend Framework与Zend_mail_存储类一起使用:如果可能的话,您可以切换到直接访问mbox或maildir文件,或者更接近底层协议,并在zend_mail_protocol_imap以提高速度。抱歉,您的搜索结果完全错误
- 从imap服务器获取消息不需要静态IP地址。当然不是“从谷歌租来的”。为什么需要这样做
- 我看不出为什么php的cli变体更适合这里。相反,它的效率较低,因为它有更大的启动负载,因为必须为每个请求生成一个进程
- 为什么需要多线程?对于这种情况,它应该提供什么好处?多线程只是交互式的东西感兴趣,因为响应性可能是一个问题。即使这样,这也可能是错误的想法
- 没有任何东西反对使用phps imap扩展
- 为此使用cron作业,并定期执行,而不是一天一次
- 在开始实施之前,投资规划一个干净的体系结构