IMAP:PHP:如何获取和存储用于删除特定邮件的消息号

时间:2011-01-01 13:07:47

标签: php imap

我必须使用IMAP读取我的服务器邮件收件箱,然后我必须在网站上显示一些邮件(具有预定义内容的邮件)供管理员使用,稍后管理员可以从管理面板中删除或转移邮件,但如何删除或者从管理面板转移特定邮件?有没有办法将邮件ID存储在邮件中?如何在收件箱中获取特定邮件的ID?

非常感谢你的时间

1 个答案:

答案 0 :(得分:1)

在IMAP中没有商店消息号这样的东西,所以我假设您通俗地使用该术语来表示唯一标识消息的任何数字。如果我对这个假设是正确的,那你就不走运了:也没有这样的数字,至少在IMAP会议期间没有。

以下是您可以尝试的内容:IMAP协议要求每封邮件都有唯一标识符,每个邮箱都有唯一标识符有效值。保证邮件邮箱的唯一标识符唯一标识符有效性值的组合永远不会引用不同的邮件。因此,如果您使用它来识别消息,则至少保证不会意外删除错误的消息。

问题是,唯一标识符有效性值保证仅在IMAP会话期间保持不变。 PHP通常会为每个页面请求创建一个新的IMAP会话,并在请求结束时关闭会话。另一方面,IMAP规范建议,即使跨会话,唯一标识符也保持不变。这使得以下方法看起来很实用:

  1. 按唯一标识符标识邮件(例如,将它们用作用于选择邮件的复选框上的值属性。)。
  2. 将邮箱的唯一标识符有效值存储为表单中的隐藏字段。
  3. 处理表单提交时,请检查通过表单提交的唯一标识符有效值是否与当前表单相同。
  4. 小心:有IMAP服务器,每个会话使用不同的唯一标识符有效值。如果碰巧有这样的实现,你将无法做任何有用的事情。
  5. 您可以致电imap_mailboxmsginfo获取当前唯一标识符有效值。 PHP的IMAP扩展中的大多数其他函数都有一个参数$options,您可以使用该参数指定您使用唯一标识符而不是消息序列号(其他识别消息的方法,比唯一标识符更易变。

    有关IMAP协议的详细信息,请参阅RFC 3501,尤其是 2.3.1消息号