php 如何使用IMAP获取邮箱的完整大小?

dsf9zpds  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(137)

我使用library PHP作为IMAP连接。
如何使用IMAP获取邮箱的完整大小?
我尝试了以下代码,但它只返回收件箱目录的大小:

  1. var_dump($imap->getMailboxStatistics());

字符串

sqyvllje

sqyvllje1#

在IMAP中没有获得邮箱总大小的标准方法。RFC 3501不包括用于此的命令,并且也没有提供这样的功能的扩展。
您的代码可能会发出类似FETCH 1:* (RFC822.SIZE)的命令并在本地求和。不幸的是,这是一种相当浪费的方法。

8i9zcol2

8i9zcol22#

被接受的答案在发布时是正确的,但现在不一定是正确的了。
2018年发布的RFC 8438提供了STATUS=SIZE扩展,允许在STATUS命令中请求邮箱大小,例如
更妙的是,如果服务器还支持LIST-EXTENDEDLIST-STATUS,您可以通过将其作为SIZE项请求,在LIST STATUS响应中获得它。如果不使用流水线,则可能涉及2n+13n+1 RTT的单次往返。
不幸的是,很少有IMAP服务器支持此扩展;你可以打赌没有商业供应商会支持它。在这种情况下,您将不得不退回到FETCH 1:* (RFC822.SIZE)。除了浪费,这可能需要非常长的时间(想想10秒或更长时间)在大型邮箱(具有数万封邮件)。响应的绝对大小也可以很大:几个MB。如果您这样做,我还建议缓存这个值,如果可能的话,并使用STATUS响应来使该高速缓存无效。这样,如果邮箱没有更改,就不需要重新计算大小。您还可以进行进一步的优化(如增量FETCH),在此代码片段中讨论了在STATUS=SIZE不可用时计算远程IMAP文件夹的大小。

相关问题