【问题标题】:Read email imap php阅读电子邮件 imap php
【发布时间】:2013-04-17 04:40:50
【问题描述】:

我使用 PHP - Codeigniter (Peeker Library) 作为后端,并使用 IMAP 从多个电子邮件地址获取电子邮件。

我们有一些复杂的搜索条件来查询 imap 文件夹,为了提高脚本的性能,我们只搜索新电子邮件并存储邮箱名称、唯一 id(邮箱中唯一)、MySQL 表中的一些标题信息。

我想出了两个问题:

  1. 如何跟踪Deleted / Moved 项目?
  2. 有没有办法确定附件是否存在? (因为标题信息没有提供任何附件指示器的线索,我尝试使用imap_fetchstructure,但它会读取包括附件在内的整个邮件,这需要很长时间才能处理)

注意:

我在后端定期运行这个脚本(但不是 一个 cron 作业,外部应用程序将定期初始化脚本 间隔)。此外,我正在使用 PHP 做所有这些,但有其局限性。

请帮帮我。

谢谢

【问题讨论】:

    标签: php mysql codeigniter imap


    【解决方案1】:

    首先,在 IMAP 中,没有要求暗示FETCH BODYSTRUCTURE 将传输带有附件的完整邮件数据。你的假设是错误的,或者你的 IMAP 库有一个严重的错误,或者你在这里使用了错误的函数。

    其次,您提到了跟踪 UID,但没有提及 UIDVALIDITY。阅读RFC 3501 以了解其含义。在不了解协议的情况下,您无法正确实现与 IMAP 对话的应用程序。在RFC 4549 中也给出了进一步的指针。

    您的第三个问题是关于要求删除或移动的项目。在基线 IMAP 中,您不能这样做。知道哪些消息已被删除以及哪些是新消息的唯一方法是显式跟踪 UID——假设给出了 UIDVALIDITY 并且没有更改,您将自上次以来的 UID 列表与您获得的内容进行比较现在,看看哪些是新的,哪些已经过去了。再次阅读 RFC,它们包含对您所有问题的答案以及有关如何优化同步过程的建议。还有一个thesis about IMAP,它更详细地介绍了如何进一步改进协议聊天以及哪些扩展是相关的。不过,这不是一个简单的项目。

    【讨论】:

    • 你为什么走得太远?? php 函数imap_fetchstructure 将读取电子邮件正文的内容以分析结构。您对协议说得太多了,但我说的是我正在使用的语言。在您的第一段中,您说我使用了一些错误的功能或 imap 库有错误。你能再解释一下吗?
    • 好的。 PHP 函数imap_fetchstructure 将有趣的工作卸载到c-client 的mail_fetchstructure_full。该函数(在 UW-IMAPD 的 c-client 库中)发送一个获取 BODY 事物的 IMAP 命令——然而,正如 RFC 3501 定义的那样,这实际上是消息的 结构正文,而不是消息本身的完整原始文本。因此,我是说调用 PHP 的 imap_fetchstructure 确实通过 IMAP 连接读取消息正文的内容。
    • 好的,那为什么阅读带附件的邮件需要很长时间(相对而言)?我并不是说imap_fetchstructure 会物理下载所有内容。例如。如果有 12 mB 的 zip 文件作为附件,并且如果 imap_fetchstructure 仅读取其内容类型、大小、名称等,则可以。
    • 我没有水晶球,所以我不知道在你的系统上什么需要很长时间,也不知道为什么会这样。抱歉,您没有显示任何测量值。
    • 对不起。我仍然猜想它试图阅读内容。不管是什么,都需要很长时间的过程。
    【解决方案2】:

    为什么你不使用 php imap ?与 peeker 库和 php imap 相比,它简单且非常快速,总是会收到新的电子邮件。

    【讨论】:

    • Peeker 是用 PHP IMAP 制作的。
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多