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

如何在PowerShell脚本中获取Outlook邮件的附件状态

用PowerShell判断Outlook邮件是否包含附件

问题背景

现有PowerShell脚本可获取邮箱内邮件列表及相关元数据,但无法判断邮件是否带有附件:

  • 直接添加HasAttachment属性,返回值全为空;
  • 使用Attachments属性,返回System.__ComObject,无法直接读取附件信息;
  • 尝试Attachments.DisplayName、Attachments[1].DisplayName、Attachments[1].FileName等写法,均无法成功获取附件相关内容。

曾通过$items += $item | Select-Object -Property "*", @{Label="Folder";Expression={$_.Parent.Name}}获取邮件所有可用属性,发现仅Attachments与附件相关,但该COM对象无法直接解析使用。

解决方案:读取MAPI属性PR_HASATTACH

通过Outlook对象的PropertyAccessor.GetProperty方法读取MAPI原生属性PR_HASATTACH(标识符为http://schemas.microsoft.com/mapi/proptag/0x0E1B000B),可准确判断邮件是否带有附件。同时完善脚本的参数传递和子文件夹递归逻辑,完整脚本如下:

function Get-MailFromOutlookFolder {
    param(
        [Parameter(Mandatory=$true)]
        $ParentFolder
    )

    # 存储结果的数组
    $items = @()

    # 处理当前文件夹的邮件
    foreach ($item in $ParentFolder.Items) { 
        if ($item.Class -eq 43) { # Class=43表示邮件项
            # 获取PR_HASATTACH属性,判断是否有附件
            $hasAttach = $item.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x0E1B000B")
        
            # 收集邮件元数据
            $items += $item | Select-Object -Property `
                ConversationTopic, ReceivedTime, Body, SenderName, SenderEmailAddress,
                @{Label="Folder"; Expression={$_.Parent.Name}},
                @{Label="HasAttachment"; Expression={$hasAttach}}
        }
    }

    # 递归处理子文件夹
    foreach ($subFolder in $ParentFolder.Folders) {
        $items += Get-MailFromOutlookFolder -ParentFolder $subFolder
    }

    return $items
 }

# 初始化Outlook对象
$outlook     = New-Object -Com "Outlook.Application"
$mapi        = $outlook.GetNamespace("MAPI")
# 获取邮箱根目录(包含收件箱、发件箱等所有文件夹)
$mailboxRoot = $mapi.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox).Parent

# 执行获取邮件操作
$results = Get-MailFromOutlookFolder -ParentFolder $mailboxRoot
# 导出为CSV文件(避免中文乱码和多余类型信息)
$results | Export-Csv -Path "C:\Bleh\email.csv" -Encoding UTF8 -NoTypeInformation

关键说明

  1. PR_HASATTACH是MAPI原生属性,返回布尔值$true或$false,直接对应邮件是否带有附件;
  2. 脚本添加了子文件夹递归处理逻辑,可捕获邮箱根目录下所有层级子文件夹的邮件;
  3. 导出CSV时增加-Encoding UTF8 -NoTypeInformation参数,解决中文乱码和文件头部冗余类型信息问题。

内容的提问来源于stack exchange,提问作者oymonk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:06:00