9

如何计算 IMAP 帐户中每封电子邮件的唯一 ID 字符串?

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

并非所有电子邮件都有一个message_id,我看不出和之间message_id有什么区别uid- 有人可以告诉我吗?

在我看来,message_id使用imap_append时没有改变- 有人可以确认吗?

为每封电子邮件生成唯一的 id 字符串时,除了消息 id、fx 电子邮件标题和日期之外,还有许多其他选项,但我不知道该选择什么: http ://www.php.net/manual/en/ function.imap-headerinfo.php

4

2 回答 2

13

UID is unique within a mailbox, but does not map between mailboxes, so is of no use for matching emails between mailboxes.

message_id is intended to be globally unique for all emails and is generated by the sending email server. If the server is configured correctly, every message it sends will have a message_id, and this can be used to match an email across mailboxes. However, badly configured servers may not assign a message_id. In this case, a hash of senderaddress & udate has always proved to be unique for me - if the emails came from the same person at the same microsecond, it's gonna be the same message. Note - use sender rather than from - from can be spoofed easier than sender.

于 2013-10-14T16:09:31.837 回答
4

根据我的说法,可以按如下方式生成唯一 ID:

键:邮件的纪元时间(来自日期字段)

但同时用户可以收到多封邮件。

key:邮件的纪元时间 + MailSize

在特定时间,收件人 ID 可以接收相同大小的不同邮件

KEY:邮件纪元时间 + MailSize + Recieveing Server IP(可以从received: 字段中获取)

在特定时间,收件人 ID 也可以从同一 IP 接收相同大小的不同邮件。

key:邮件的epoch时间+MailSize+Recieveing Server IP(可以从received:字段中获取)+邮件的md5sum。

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

消息 ID 通常是发送消息的设备的标识符,或者可能是其他东西,完全取决于域,并且对于不同的邮件可以相同,并且可能完全不存在。

uid 是 imap 服务器用来跟踪邮件身份的东西。但是,如果在邮件已被删除或移动并且由于服务器代码有问题,则可能会为不同的邮件分配相同的 uid。

于 2013-02-15T13:03:22.097 回答