为什么imap uid不是唯一的?在不同的文件夹?

Alv*_*ena 5 php imap

我将我的邮箱元素保存到mysql数据库(在我的Intranet中执行快速搜索,因为imap_search'速度太慢).

我正在连接到服务器和文件夹,并迭代消息.

简化代码:

$numMsg = imap_num_msg($conn);

for($i=1;$i<=$numMsg;$i++){
    $uid = imap_uid($conn,$i);
    echo("msg_num:".$i." - uid:".$uid);
}
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

msg_num:5 - uid:5msg_num:6 - uid:6msg_num:7 - uid:7msg_num:8 - uid:8msg_num:9 - uid:9msg_num:10 - uid:10msg_num:11 - uid:11msg_num:12 - uid:12

这是完全错误的!

uid 不应该是独一无二的吗?

我在我拥有的5个子文件夹中以及在收件箱中的已发送邮件中获得此UID,我得到了uids (msg_num:5 - uid:1503msg_num:6 - uid:1504msg_num:7 - uid:1506)

Max*_*Max 14

是的,UID只对每个文件夹唯一.消息的完整持久唯一ID是文件夹名称,文件夹UIDVALIDITY和消息UID的元组.在正确实现的服务器上,该元组将只引用一条消息.

例如:(SENT,1,100)表示发送文件夹的第一个版本中ID为100的消息.UIDVALIDITY往往是大约10位数字,如果文件夹被删除并重新创建或需要由服务器软件重新索引/重新生成,则应该更改.

  • 不幸的是,IMAP协议不允许您正常跟踪文件夹中的电子邮件.当它移动文件夹时,它将成为一个全新的消息.它不保留其UID.实际上,基线IMAP规范甚至没有MOVE命令.您必须将其复制到另一个文件夹(当然必须是新邮件),然后删除第一个文件夹. (2认同)