在电子邮件到达IMAP服务器时运行PHP脚本

时间:2013-05-03 06:41:53

标签: imap php dovecot

我正在尝试用PHP实现webmail。我想编写一个PHP CLI脚本,该脚本在每次到达电子邮件时都会运行,以便将(并非所有)传入电子邮件的某些部分存储到数据库中以供搜索。然后,当用户完成搜索并选择要显示的电子邮件时,将建立与邮件服务器的连接以检索完整的电子邮件。为了实现这种情况,我需要在数据库和邮件服务器中的电子邮件之间建立某种连接。

由于我使用邮件服务器的知识仅限于Zend Framework的API,我认为我需要从IMAP服务器检索电子邮件的是message numbermessage unique id(稍后会发布)似乎所有邮件服务器都不支持。)

到目前为止,我已经设法找到.forward(以及其他一些方法)将我的PHP CLI脚本介绍给MTA,以便在每次到达电子邮件时运行。这样我就可以将电子邮件存储到数据库中。但是这不会做,因为message unique id是由MDA创建的,因此MTA不知道它并且它们无法提供给我。这意味着当我想要从邮件服务器检索电子邮件时,我以后找不到电子邮件。

最后,我的问题是:有没有办法将PHP CLI脚本引入MDA以便电子邮件到达?如果这取决于邮件服务器,哪些服务器支持这个以及如何支持?我个人的选择是Dovecot或Courier,但任何其他邮件服务器都可以。

2 个答案:

答案 0 :(得分:0)

似乎不可能将这样的PHP CLI脚本引入IMAP服务器(至少我确定Dovecot)。无论如何,我发现这个问题的工作是使用我自己的PHP脚本将新邮件插入IMAP服务器并检索它们的id,然后将id存储在数据库中以供将来引用。为了清楚起见,MTA向我的PHP CLI脚本发送了电子邮件,而不是MDA。正如我之前所说,使用.forward文件可以轻松完成。

[UPDATE]

不幸的是,似乎这个解决方案也无法实现。向IMAP服务器插入新电子邮件的方法是APPEND命令,并且最近添加的邮件服务器的UID必须支持UIDPLUS扩展名。 Dovecot和Courier目前都不支持此扩展!如果他们这样做,服务器似乎会返回带有UID响应的APPENDUID

[UPDATE]

这是我的不好,因为Courier确实支持UIDPLUS。所以这个解决方案是有效的,也是我要实现的解决方案。

答案 1 :(得分:0)

这很棘手 - 有很多方法可以设置交付方式。其中一些直接与底层邮件存储一起使用,完全绕过您的IMAP服务器,而其他人使用例如Dovecot的设施。

您是否考虑过在Dovecot附带的notify插件之上构建?