在邮件到达IMAP服务器时运行PHP脚本
我试图在PHP中实现一个webmail。我想编写一个PHP CLI脚本,该脚本在每个邮件到达时运行,以将部分(不是全部)传入的电子邮件存储到数据库中用于搜索目的。然后,当用户完成搜索并选择要显示的电子邮件时,将与邮件服务器建立连接以检索完整的电子邮件。为了实现这个场景,我需要在数据库和邮件服务器中的电子邮件之间建立某种连接。在邮件到达IMAP服务器时运行PHP脚本
由于我对邮件服务器的使用知识仅限于Zend Framework的API,我相信我需要从IMAP服务器检索电子邮件是message number
或message unique id
(后面的一个似乎不支持所有邮件服务器)。
至此,我设法找到.forward
(以及其他一些方法)将我的PHP CLI脚本引入到MTA中,以便在每封邮件到达时运行。这样我可以将电子邮件存储到数据库。但是由于message unique id
是由MDA创建的,因此MTA不知道它并且不能提供给我。这意味着稍后当我想从邮件服务器中检索邮件时,我找不到邮件。
最后,这里是我的问题:有没有办法将一个PHP CLI脚本引入到MDA中以用于电子邮件的抵达?如果这取决于邮件服务器,哪些服务器支持这个以及如何?我个人的选择是Dovecot或Courier,但任何其他邮件服务器都可以。
似乎不可能将这样一个PHP CLI脚本引入IMAP服务器(至少我确信Dovecot)。无论如何,我发现这个问题的工作是使用我自己的PHP脚本将新邮件插入IMAP服务器并检索其ID并将该ID存储在数据库中以备将来参考。要明确,电子邮件是由MTA给我的PHP CLI脚本,而不是MDA。正如我之前所说,这是使用.forward
文件轻松完成的。
[UPDATE]
不幸的是,似乎这个解决方案也不能实现。向IMAP服务器插入新电子邮件的方法是APPEND
命令,并且最近添加的邮件服务器的UID
必须支持UIDPLUS
扩展名。目前Dovecot和Courier都不支持这种扩展!如果他们这样做,似乎服务器将返回UID
与APPENDUID
响应。
[更新]
这是我的坏,因为快递不支持UIDPLUS
。所以这个解决方案是有效的,我将要实现的。
什么?两台服务器都支持UIDPLUS。 – Max 2013-05-03 18:25:20
我的快递服务器登录时的性能响应:''* OK [CAPABILITY IMAP4rev1 *** UIDPLUS *** CHILDREN NAMESPACE THREAD = ORDEREDSUBJECT THREAD = REFERENCES SORT QUOTA IDLE ACL ACL2 = UNION STARTTLS] Courier-IMAP就绪。版权所有1998-2008 Double Precision,Inc.请参阅COPYING获取发行信息。'' – Max 2013-05-03 18:26:03
我在我的机器上安装了Dovecot,我确信它不支持'UIDPLUS'。这里是[Dovecot的维基页面](http://wiki2.dovecot.org/FeatUIDPLUS),它没有提及Dovecot是否计划支持它! – Mehran 2013-05-04 04:20:42
这很棘手 - 关于如何设置交付有很多方法。它们中的一些直接使用底层邮件存储,完全绕过你的IMAP服务器,而另一些则使用例如鸽舍的设施。
您是否考虑过在Dovecot附带的notify
插件之上构建?
*使用邮件服务器仅限于Zend Framework的API *不正确。你不能使用PHP的IMAP功能吗? – Raptor 2013-05-03 06:43:42
我没有说“使用邮件服务器仅限于Zend Framework的API”。我说我的知识仅限于Zend Framework的API! – Mehran 2013-05-03 06:45:05