0

我正在尝试在 PHP 中实现网络邮件。我想编写一个 PHP CLI 脚本,该脚本在每封电子邮件到达时运行,以将传入电子邮件的某些部分(不是全部)存储到数据库中以进行搜索。然后,当用户完成搜索并选择要显示的电子邮件时,会连接到邮件服务器以检索完整的电子邮件。为了实现这个场景,我需要在数据库和邮件服务器中的电子邮件之间建立某种连接。

由于我使用邮件服务器的知识仅限于 Zend Framework 的 API,因此我认为从 IMAP 服务器检索电子邮件所需的内容是 amessage number或 a message unique id(后来似乎并非所有邮件服务器都支持)。

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

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

4

2 回答 2

0

似乎不可能将这样的 PHP CLI 脚本引入 IMAP 服务器(至少我确定 Dovecot)。无论如何,我为这个问题找到的解决方法是使用我自己的 PHP 脚本将新邮件插入 IMAP 服务器并检索它们的 id,然后将 id 存储在数据库中以供将来参考。需要明确的是,电子邮件是由 MTA 而非 MDA 提供给我的 PHP CLI 脚本的。正如我之前所说,这很容易使用.forward文件完成。

[更新]

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

[更新]

自从 Courier 支持以来,这是我的错UIDPLUS。所以这个解决方案是有效的,也是我要实施的。

于 2013-05-03T09:58:54.083 回答
0

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

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

于 2013-05-03T11:15:15.467 回答