如何知道 Outlook 文件夹中所含项目的总大小和总数?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:06:07

如何知道 Outlook 文件夹中所含项目的总大小和总数?

问:

您好,脚本专家!如何知道“收件箱”和“已发送邮件”文件夹中所含项目的总数及总大小?

-- CS

答:

您好,CS。您知道,个别脚本专家有一个确定此信息的可靠方法。他会做什么?什么都不做;只是无所事事,等待那封 Exchange 管理员必定会发来的邮件,告诉他其邮箱又一次超出了大小限制,并且如果不清除一些邮件的话,将再也无法发送和接收邮件。这时,他就会知道“收件箱”的总大小(太大)以及包含项目的总数(太多)。

当然,聪明的做法是永远也不要效仿脚本专家的人生。明确这一点后,请看另一种确定“收件箱”和“已发送邮件”文件夹中的项目总数(和总大小)的方法:

Const olFolderInbox = 6Const olFolderSentMail = 5Set objOutlook = CreateObject("Outlook.Application")Set objNamespace = objOutlook.GetNamespace("MAPI")Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)Set colItems = objFolder.ItemsWscript.Echo "No. of items in Inbox: " & colItems.CountFor Each objItem in colItemsintSize = intSize + objItem.SizeNextWscript.Echo "Size of Inbox: " & Int(intSize / 1024) & " KB"intSize = 0Set objFolder = objNamespace.GetDefaultFolder(olFolderSentMail)Set colItems = objFolder.ItemsWscript.Echo "No. of items in Sent Mail folder: " & colItems.CountFor Each objItem in colItemsintSize = intSize + objItem.SizeNextWscript.Echo "Size of Sent Mail folder: " & Int(intSize / 1024) & " KB"

是的,我们知道:它看起来的确有点复杂,不是吗?但是别担心;我们将逐步介绍这些代码并详细为您解释。毕竟,这是我们份内的事情。

当然,不止是解释代码,还有在真正的 Microsoft 员工离开后打扫办公室。但是您知道我们是什么意思。

我们首先定义一对常量,稍后将使用它们来指示我们要查看的文件夹:

Const olFolderInbox = 6Const olFolderSentMail = 5

然后,使用下面的两行代码创建一个 Outlook.Application 对象的实例,并将其绑定到 MAPI 命名空间(唯一可以绑定的命名空间):

Set objOutlook = CreateObject("Outlook.Application")Set objNamespace = objOutlook.GetNamespace("MAPI")

此时我们应该提醒您的是,我们的脚本假定 Outlook 已经开始运行。否则,为了启动 Outlook 并登录,您必须进行少量改动。在今天的专栏里我们对此不进行探讨;因为我们还有一个 Office Space 专栏,在那里说明了如何从头启动 Outlook。

啊,原来那个专栏就在这里

连接到 Outlook 之后,下一步需要绑定到“收件箱”并确定其中的项目数。很简单;事实上,只需三行代码而已:

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)Set colItems = objFolder.ItemsWscript.Echo "No. of items in Inbox: " & colItems.Count

正如您所看到的那样,我们首先调用 GetDefaultFolder 方法,传递常量 olFolderInbox;这会将我们绑定到“收件箱”文件夹。然后使用第二行代码返回“收件箱”中的所有项目的集合。事实证明,所有 Outlook 集合都包含一个 Count 属性,此属性可让我们知道集合中的项目数:为了知道“收件箱”中的项目数,我们要做的就是回显 Count 属性的值。这恰恰是我们在第三行中所做的。

不用说,检索文件夹中项目的数量很容易;但确定文件夹的总大小就有点复杂了。那是因为没有能让我们知道文件夹大小的 Size 属性;我们必须自己计算其大小。

嗨,别紧张:这没什么大不了的。“收件箱”中的每一项(例如每封邮件)都必定具有一个 Size 属性,该属性用字节来表示项目的大小。要确定“收件箱”文件夹的总大小,我们要做的就是将文件夹中各个项的大小加起来。为此,我们可以建立一个 For Each 循环来遍历该集合,使其在我们结束之前一直计算文件夹的总大小(存储在名为 intSize 的变量中的计数)。您知道,就是类似下面的内容:

For Each objItem in colItemsintSize = intSize + objItem.SizeNext

在遍历整个集合之后,我们就会知道“收件箱”文件夹的大小。尽管可以用字节来回显该值,但我们决定别出心裁,将该值除以 1024;这样就得到了以千字节 (KB) 表示的大小。我们就是照下面这样做的:

Wscript.Echo "Size of Inbox: " & Int(intSize / 1024) & " KB"

当然,这个结构好像有些怪:Int(intSize / 1024)。但是我们所要做的就是获得以字节为单位的“收件箱”的大小(存储在变量 intSize 中的值),然后将其除以 1024。随后就会获得该值(以千字节为单位的“收件箱”大小),并使用 Int 函数截去小数点后面的数字。通过这种方法我们得到了“收件箱”的大小,比如说 11,318 KB 而不是 11,318.462811 KB。

现在,我们要将 intSize 的值重新设置为 0,然后再次启动整个过程,这次是绑定到“已发送邮件”文件夹:

Set objFolder = objNamespace.GetDefaultFolder(olFolderSentMail)

依此类推。

当然,使用这样的脚本会减少接触到 Exchange 管理员发来的超出限制的警告电子邮件的机会。另一方面,这也确实为您提供了比“太大”和“太多”更为精准的信息。至于哪种方法更适合您,就由您自己决定吧。