'******收集环境数据,请按实际情况修改下列5个变量******
Dim sPwd,sDomain,sLogfile,sTmpDBidFile,iDays
sPwd = "password" 'hMailServer的管理员Administrator密码
sDomain = Trim(InputBox("请输入要清理的域如yourdomain.com:","hMailServer旧邮件清理")) '域名用输入以适应多域名的情况
sLogfile = "..\Logs\ClearOlderMails_" & date() & ".log"
sTmpDBidFile = "..\Logs\tmpDBID.txt"
iDays = 180 '天数在此设置,避免不小心输入较小的数字导致误删近期邮件
'******确认******
If MsgBox("注意,删除的邮件无法恢复!" & vbCr & "本程序需要一定时间执行,结束会弹出处理结果,请耐心等待。" & vbCr & "确定要删除指定域:" & vbCr & sDomain & vbCr & "下包含的所有 " & iDays & " 天前的邮件吗?",vbYesNo+vbQuestion+vbDefaultButton2,"确认") = vbNo then wscript.quit
'******开始处理******
Dim obApp
Set obApp = CreateObject("hMailServer.Application")
Call obApp.Authenticate("Administrator", sPwd) '获得操作权限
Dim obDomain,bolDomainExist
bolDomainExist = False
For i=0 to obApp.Domains.Count-1
If obApp.Domains.Item(i).Name = sDomain then bolDomainExist = True
Next
If bolDomainExist = False Then
msgBox "域:" & sDomain & " 不存在,无法处理。",vbOKOnly+vbExclamation,"出错"
wscript.quit
end if
Set obDomain = obApp.Domains.ItemByName(sDomain) '获得域
Dim obAccount,obIMAPFolder,obMessages,obMessage
Set FSO3 = CreateObject("Scripting.FileSystemObject")
Set str3 = FSO3.OpenTextFile(sLogfile,8,True) '追加方式打开日志
For i=0 to obDomain.Accounts.count-1
Set obAccount = obDomain.Accounts.Item(i)
Set obMessages = obAccount.Messages
dim iCount
iCount = 0
'if obAccount.Address="user@yourdomain.com" then '可以这里指定账号测试,以免误删,误删邮件无法恢复!!!
Set FSO4 = CreateObject("Scripting.FileSystemObject")
Set str4 = FSO4.OpenTextFile(sTmpDBidFile,2,True) '新建存放邮件DBID的临时文件
For j=0 to obMessages.count-1
if DateDiff("d",obMessages.Item(j).InternalDate,now()) > iDays then '清理***iDays***天前的邮件
iCount = iCount + 1 '统计删除邮件数目
'记录将要删除的邮件DBID,不在这个FOR循环里删除原因是删除后会改变obMessges.count,导致循环下标越界
strResponses = str4.Writeline(obMessages.Item(j).ID) '写DBID
end if
Next
str4.Close
Set str4 = FSO4.OpenTextFile(sTmpDBidFile,1,True) '只读方式打开
Do Until str4.AtEndOfStream
Call obMessages.DeleteByDBID(str4.ReadLine) '删除邮件,无法恢复!!!
Loop
str4.Close
if iCount > 0 then
strResponses = str3.Writeline(Now() & " -> " & obAccount.Address & "–> " & iCount & " messages has been deleted") '写日志
end if
'end if
next
str3.Close
Set wshshell=Createobject("wscript.shell")
wshshell.Run sLogfile '打开日志查看处理结果
'******处理结束******