【问题标题】:IMAP : PHP : How can I get and store message number for deleting a particular mailIMAP : PHP : 如何获取和存储用于删除特定邮件的邮件编号
【发布时间】:2011-06-02 05:28:47
【问题描述】:

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

非常感谢您的宝贵时间

【问题讨论】:

  • 不是我否决了这个问题,但它相当模糊,因此目前难以回答。什么是“管理面板” - 这是您正在编写的应用程序中的特定内容,还是现有内容的一部分?您已经使用什么方法来阅读 IMAP 收件箱?你已经尝试过什么?

标签: php imap


【解决方案1】:

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

您可以尝试以下方法:IMAP 协议要求每封邮件都有一个唯一标识符,并且每个邮箱都有一个唯一标识符有效性值唯一标识符和消息邮箱的唯一标识符有效性值的组合保证不会引用不同的消息。所以如果你用它来识别消息,你至少可以保证不会意外删除错误的消息。

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

  1. 通过唯一标识符识别消息(例如,将它们用作用于选择消息的复选框的值属性。)。
  2. 将邮箱的唯一标识符有效性值存储为表单中的隐藏字段。
  3. 在处理表单提交时,检查通过表单提交的唯一标识符有效性值是否与当前相同。
  4. 注意:有 IMAP 服务器,每个会话使用不同的唯一标识符有效性值。如果你碰巧有这样的实现,你将无法做任何有用的事情。

您可以通过调用imap_mailboxmsginfo 获取当前的唯一标识符有效值。 PHP 的 IMAP 扩展中的大多数其他函数都有一个参数 $options,您可以使用该参数指定您使用 唯一标识符 而不是 消息序列号(另一种方式来识别消息,这比 唯一标识符 更不稳定)。

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

【讨论】:

猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2017-02-02
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多