Modify the script as you like, I have not added any filters to get the total overview.-------------------------------------------------
Account: name@domain.com
Total used space: 52,457 MB
Folders:
INBOX: 1632 (49,17 MB)
-Sent: 3 (0,00 MB)
--ASubDir: 0 (0,00 MB)
-Trash: 2 (0,01 MB)
-Drafts: 0 (0,00 MB)
Trash: 0 (0,00 MB)
Sent: 1 (0,00 MB)
Spam: 81 (2,29 MB)
Archive: 0 (0,00 MB)
Code: Select all
'------------------------------------------------
' Size report of all users for each directory
' Created by: Lars Werner
' Date: 18.06.2020
' Warranty: Out of the door...
'------------------------------------------------
Option Explicit
' #### CONFIG START
Const HMSADMINUSER = "Administrator" ' Admin username
Const HMSADMINPWD = "yourpassword" ' Admin password
Const HMSSERVER = "localhost" ' hMailServer Server (host / DCOM)
' #### CONFIG END
Dim oApp, oDomain, oAccount, oFolders
Dim x, y
' On Error Resume Next
Set oApp = CreateObject("hMailServer.Application", HMSSERVER)
Call oApp.Authenticate(HMSADMINUSER, HMSADMINPWD)
'-------------
'Loop through all domains, accounts and then recursive count all the mails
For x = 0 To oApp.Domains.Count - 1
Set oDomain = oApp.Domains.Item(x)
'If oDomain.Active Then
For y = 0 To oDomain.Accounts.Count - 1
Set oAccount = oDomain.Accounts.Item(y)
Wscript.Echo "--------------------------------------------------"
wscript.echo "Account: " & oAccount.Address
wscript.echo "Total used space: " & oAccount.Size & " MB"
wscript.echo ""
WScript.echo "Folders:"
Set oFolders = oAccount.IMAPFolders
'Start recursive listing for this user
call RecursiveFolder(oFolders, 0)
'Space up for the next user
wscript.echo ""
Next
'End If
Next
'-------------
'Recursize function that will be called again and again until no more subfolders exists
Function RecursiveFolder(oFld, nLevel)
Dim nIntCount, oFolder, oMessages, oMessage, nSize, nCount, z
For nIntCount = 0 to oFld.Count - 1
nSize = 0
set oFolder = oFld.Item(nIntCount)
set oMessages = oFolder.Messages
nCount = oMessages.Count 'Number of messages
'Loop through each message and sum up the sizes
for z = 0 to oMessages.Count - 1
set oMessage = oMessages.Item(z)
nSize = nSize + oMessage.Size
Next
'Print out the folder, message count and size
WScript.echo replace(space(nLevel), " ", "-") & oFolder.Name & ": " & nCount & " (" & FormatNumber(nSize / 1024, 2) & " MB)" '& " ---> " & nIntCount & "/" & oFld.Count - 1
'If there are subfolders, do the next one
if Not IsNull(oFolder.SubFolders) then
if oFolder.SubFolders.Count > 0 then
call RecursiveFolder(oFolder.SubFolders, nLevel + 1)
end if
end if
Next
End Function