【问题标题】:Getting unique email id with IMAP in PHP在 PHP 中使用 IMAP 获取唯一的电子邮件 ID
【发布时间】:2013-01-31 10:09:50
【问题描述】:

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

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

并非所有电子邮件都有message_id,我看不出message_iduid 之间有什么区别 - 谁能告诉我?

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

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

【问题讨论】:

  • 检查 (From, Date & Size) 可能会给出独特的组合。遗憾的是,使用 PHP-IMAP 的人很少不更新手册中的示例。
  • imap_uid() 是否返回 message_id?没有message_id 的电子邮件会返回什么?
  • 我认为 uid 在某些操作上会发生变化......但我不确定......
  • 我认为大小可以在某些条件下改变......也许我应该检查(发件人、日期、主题、邮箱名称、邮件 ID)?
  • 如果同一发件人在没有message_id 的情况下在一秒钟内发送多封电子邮件怎么办?人类做不到,机器(自动化)可以!

标签: php imap


【解决方案1】:

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

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

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

key:邮件纪元时间 + MailSize

在特定时间,一个接收者 id 可以接收相同大小的不同邮件

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    UID在邮箱内是唯一的,但邮箱之间不映射,所以对于邮箱之间的邮件匹配没有用。

    message_id 旨在对所有电子邮件全局唯一,由发送电子邮件服务器生成。如果服务器配置正确,它发送的每条消息都会有一个 message_id,这可以用来匹配跨邮箱的电子邮件。但是,配置不当的服务器可能不会分配 message_id。在这种情况下,senderaddress 和 udate 的哈希值对我来说始终是唯一的——如果电子邮件在同一微秒内来自同一个人,那将是同一条消息。注意 - 使用发件人而不是发件人 - 发件人比发件人更容易被欺骗。

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2012-11-15
      • 1970-01-01
      • 2012-09-17
      • 2011-03-27
      相关资源
      最近更新 更多