为什么这两个 IMAP 搜索结果彼此不同?

Why are these two IMAP Search results different from one another?

我正在使用 imaplib,并尝试获取具有特定主题 header 值的电子邮件。

我的代码:

    res, tmp = self.mail.uid('search', None, 'HEADER Subject "SUBJECT_HERE"')
    print(tmp)
    print(res)

    print("test 2 goes:")
    rr, tt = self.mail.search(None, 'HEADER Subject "SUBJECT_HERE"')
    print(tt)
    print(rr)

结果:

[b'225 232 323 324 346 366 382 419 420 425 450 463 517 607 670 751 833 911 1043 1129 1133 1134 1287 1350 1799 1854 1957 1960 1962 1991 2005 2040 2071 2110 2119 2121 2153 2158 2182 2188 2189 2228 2230 2239 2249 2334 2335 2372 2378 2396 2435 2497 2567 2568 2573 2574 2575 2632 2633 2634 2648 2649 2709 2785 2819 2821 2828 2829 2868 2885 2895 2902 2906 2920 2993 2997 2998 3000 3001 3009'] OK test 2 goes:
[b'220 227 318 319 340 360 376 413 414 419 444 457 511 601 664 745 827 905 1037 1123 1127 1128 1281 1344 1793 1848 1951 1954 1956 1985 1999 2034 2065 2104 2113 2115 2147 2152 2176 2182 2183 2222 2224 2233 2243 2328 2329 2366 2372 2390 2429 2491 2561 2562 2567 2568 2569 2625 2626 2627 2641 2642 2702 2778 2812 2814 2821 2822 2861 2878 2888 2895 2899 2913 2986 2990 2991 2993 2994 3002'] OK

我认为这两个命令的结果相同。

但如上所示,这两个获取不同的电子邮件。

有什么区别??

一个(SEARCH)returns个消息序列号(MSN),从1到N编号,随着消息的添加和删除而变化。如果您删除之前的一条消息,现在是第 5 条的消息明天可能是第 4 条。

其他 (UID SEARCH) returns 个 UID,它们不会随着消息被删除而改变。它们是两组完全不同的标识符。 UID 为 5 的消息将保持 UID 5,直到它被删除(或移动等)。

UID 将永远不会在该文件夹的化身中重复使用。如果文件夹被删除并重新创建,或者邮件服务器被重建,文件夹的 UIDVALIDITY 应该会改变,这样您就可以检测到您的缓存不再有效。