You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell从Outlook第二个邮箱账户的收件箱保存附件

解决非默认Outlook邮箱的附件保存问题

修改后的PowerShell脚本

$td = Get-Date -Format "yyyy-MM-dd"
$targetEmailAddress = "jdoe@company2.com"
$AttachFile = "File Name.xlsx"
$FileSavePath = "C:\Temp\Attached_File_$td.xlsx"

$outlook = New-Object -ComObject Outlook.Application
$mapi = $outlook.GetNamespace("MAPI")

# 定位目标邮箱账户(通过SMTP地址匹配,避免显示名称重复问题)
$targetMailbox = $mapi.Folders | Where-Object { 
    $_.Store.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001F") -eq $targetEmailAddress 
}

if (-not $targetMailbox) {
    Write-Error "未找到指定邮箱账户: $targetEmailAddress"
    exit 1
}

# 获取目标邮箱的收件箱(6代表Outlook的收件箱常量olFolderInbox)
$inbox = $targetMailbox.GetDefaultFolder(6)
$emails = $inbox.Items

# 筛选今日邮件并保存指定附件
foreach ($email in $emails) {
    # 直接比较日期部分,避免字符串转换的潜在误差
    if ($email.ReceivedTime.Date.ToString("yyyy-MM-dd") -eq $td) {
        $email.Attachments | Where-Object { $_.FileName -eq $AttachFile } | ForEach-Object {
            $_.SaveAsFile($FileSavePath)
            Write-Host "已成功保存附件至: $FileSavePath"
        }
    }
}

# 释放COM对象,避免Outlook后台进程残留
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

关键修改说明

  1. 定位目标邮箱
    原脚本使用$mapi.GetDefaultFolder(6)只能获取默认账户的收件箱,现在通过遍历$mapi.Folders,利用MAPI属性标签0x39FE001F获取邮箱的SMTP地址,精准匹配目标账户。

  2. 获取目标邮箱的收件箱
    找到目标邮箱对象后,调用该对象的GetDefaultFolder(6)方法,即可获取对应邮箱的收件箱,而非默认账户的。

  3. 优化细节

    • 添加了邮箱不存在的错误判断,避免脚本无提示崩溃
    • 优化日期比较逻辑,直接取邮件接收时间的日期部分进行匹配
    • 添加COM对象释放代码,防止Outlook进程在后台残留

注意事项

  • 确保Outlook已成功配置目标邮箱,且能正常访问
  • 运行脚本时PowerShell需具备访问Outlook对象模型的权限
  • 如果同一天可能收到多个同名附件,可修改$FileSavePath添加时间戳(如C:\Temp\Attached_File_$($email.ReceivedTime.ToString('yyyy-MM-dd-HHmmss'))_$($_.FileName))避免覆盖

内容的提问来源于stack exchange,提问作者Mr. Majestyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:02