2013-02-15 214 views
7

如何计算IMAP帐户中每封电子邮件的唯一ID字符串?在PHP中使用IMAP获取唯一的电子邮件ID

我正在制作一个脚本,它必须经常将所有丢失的邮件从一个IMAP帐户复制到另一个IMAP帐户。我想避免在每次更新时重复复制,因此我必须确定一个帐户上的内容以及另一个帐户上的内容。

并非所有的电子邮件都有message_id,我看不到message_iduid之间有什么区别 - 有人可以告诉我吗?

在我看来,使用imap_appendmessage_id没有改变 - 任何人都可以证实?

当为每封电子邮件有很多其他的选择不仅仅是消息ID,FX电子邮件标题和日期的唯一ID字符串,但我不知道该选择什么样的:根据我的 http://www.php.net/manual/en/function.imap-headerinfo.php

+0

检查('从','日期'和'大小')可能会给出独特的组合。可悲的是,很少有人使用过PHP-IMAP,因此不会更新手册中的示例。 – SparKot 2013-02-15 12:38:25

+0

'imap_uid()'返回'message_id'吗?没有'message_id'的邮件会返回什么? – SparKot 2013-02-15 12:43:05

+0

我认为uid更改了一些操作,但我不确定... – 2013-02-15 12:46:50

回答

2

键:唯一的ID可如下生成的邮件具有划时代时间(日期字段)

但在同一时间,用户可以得到多个邮件。

键:邮件+ MailSize

在特定时间的划时代时间reciever ID可以收到同样大小

KEY的diferent邮件:邮件的出现时间+ MailSize + Recieveing服务器IP(可从接收到的字段获得)

在特定时间,接收者id可以从相同的大小接收不同的邮件ip也。

键:邮件的时代+邮件大小+接收服务器IP(可以从收件人:字段)+ md5sum的邮件。

此密钥的重复的可能性非常非常低。

消息标识通常是发送消息的设备的标识符,也可能是其他内容,完全取决于域,对于不同的邮件可能相同,并且可能完全不存在。

uid是imap服务器用来跟踪邮件身份的东西。但是如果在邮件被删除或移动之前以及有问题的服务器代码的情况下,可能不同的邮件可能被分配了相同的uid。

7

UID在邮箱内是唯一的,但不在邮箱之间映射,因此在邮箱之间匹配邮件是没有用的。

message_id旨在全球唯一的所有电子邮件,并由发送电子邮件服务器生成。如果服务器配置正确,它发送的每条消息都将有一个message_id,并且可用于跨邮箱匹配邮件。但是,配置错误的服务器可能不会分配message_id。在这种情况下,对于我而言,发送邮件的散列值总是被证明是唯一的 - 如果电子邮件在同一个微秒来自同一个人,它将成为相同的邮件。注 - 使用发件人而不是发件人可能比发件人更容易欺骗。

相关问题