hMailServer定期删除收件箱

本来邮箱客户端设置了接收后删除邮件,结果hmailserver还是不删除,导致一直在膨胀,还好有AI,直接搞个计划任务就把旧邮件给删了:

# ============================================
# 配置参数
# ============================================
$AdminUser = "Administrator"
$AdminPass = "123456"

# 多少天前
$DaysToKeep = 40
$FolderName = "INBOX"

# ============================================
# 日志配置
# ============================================
$LogFile = "C:\hMailServerClean.log"

# 写入日志的函数(同时输出到屏幕和文件)
function Write-Log {
    param([string]$Message)
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $logLine = "[$timestamp] $Message"
    Write-Host $logLine
    Add-Content -Path $LogFile -Value $logLine
}

# ============================================
# 开始清理
# ============================================
Write-Log "==========>>>> 开始清理 $($DaysToKeep) 天前的邮件 <<<<=========="

try {
    $hms = New-Object -ComObject "hMailServer.Application"
    $hms.Authenticate($AdminUser, $AdminPass)
    Write-Log "连接 hMailServer 成功,域数量: $($hms.Domains.Count)"
} catch {
    Write-Log "连接 hMailServer 失败: $_"
    exit
}

$TotalDeleted = 0

for ($d = 0; $d -lt $hms.Domains.Count; $d = $d + 1) {
    $domain = $hms.Domains.Item($d)
    Write-Log "处理域: $($domain.Name)"
    
    for ($a = 0; $a -lt $domain.Accounts.Count; $a = $a + 1) {
        $account = $domain.Accounts.Item($a)
        
        try {
            $messages = $account.IMAPFolders.ItemByName($FolderName).Messages
            $deleted = 0
            
            for ($i = $messages.Count - 1; $i -ge 0; $i = $i - 1) {
                $msg = $messages.Item($i)
                $daysOld = (Get-Date).Subtract($msg.InternalDate).Days
                
                if ($daysOld -gt $DaysToKeep) {
                    $messages.DeleteByDBID($msg.ID)
                    $deleted = $deleted + 1
                }
            }
            
            if ($deleted -gt 0) {
                Write-Log "  [$($account.Address)] 已删除 $deleted 封过期邮件"
                $TotalDeleted = $TotalDeleted + $deleted
            }
        }
        catch {
            Write-Log "  [$($account.Address)] 跳过 (可能无 INBOX 或权限问题)"
        }
    }
}

Write-Log "========================================"
Write-Log "全部完成!共删除 $TotalDeleted 封过期邮件。"
Write-Log "日志已保存至: $LogFile"


deletemail.rar


本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2026 labisart.com 版权所有 | 联系:labartwork@163.com