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

在C#的Outlook VSTO项目中如何区分邮件附件与嵌入式图片?

如何在Outlook VSTO中区分邮件的实际附件与嵌入式图片?

我正在开发一个Outlook VSTO项目,需要将邮件的所有附件保存到指定文件夹。但在遍历附件时发现,无论是实际附件还是正文中的嵌入式/粘贴图片,Attachment.Type始终返回olByValue,无法直接区分:

Outlook.Inspector currentInspector = outlookApp.ActiveInspector();
var selectedMail = currentInspector.CurrentItem as Outlook.MailItem;

foreach (Outlook.Attachment attachment in selectedMail.Attachments)
{
    var attachmentType = attachment.Type; // 嵌入式图片和实际附件都返回olByValue
}

目前我用的过滤方法是判断文件小于20KB且为图片类型就排除,但这种方法有缺陷——如果用户实际附加了小于20KB的图片,会被误排除。请问有没有更准确的区分方法?


可行的区分方法

1. 检查PR_ATTACHMENT_HIDDEN属性

嵌入式图片通常会被标记为隐藏,可通过PropertyAccessor读取MAPI属性http://schemas.microsoft.com/mapi/proptag/0x7FFE000B(对应PR_ATTACHMENT_HIDDEN)判断:

foreach (Outlook.Attachment attachment in selectedMail.Attachments)
{
    bool isHidden = (bool)attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7FFE000B");
    if (!isHidden)
    {
        // 实际附件,执行保存操作
        attachment.SaveAsFile(@"指定文件夹路径\" + attachment.FileName);
    }
}

2. 检查Attachment.Position属性

嵌入式图片的Position值通常大于0(对应正文中的插入位置),普通附件的Position为0:

foreach (Outlook.Attachment attachment in selectedMail.Attachments)
{
    if (attachment.Position == 0)
    {
        // 普通附件,执行保存
        attachment.SaveAsFile(@"指定文件夹路径\" + attachment.FileName);
    }
}

3. 组合判断(提升严谨性)

如果需要更精准,可以结合文件扩展名验证是否为图片,再配合上述方法过滤:

var imageExtensions = new HashSet<string> { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
foreach (Outlook.Attachment attachment in selectedMail.Attachments)
{
    bool isHidden = (bool)attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x7FFE000B");
    string ext = Path.GetExtension(attachment.FileName).ToLower();
    // 隐藏属性为false,或非图片且Position为0的,判定为实际附件
    if (!isHidden || (!imageExtensions.Contains(ext) && attachment.Position == 0))
    {
        attachment.SaveAsFile(@"指定文件夹路径\" + attachment.FileName);
    }
}

注意:使用PropertyAccessor时需确保引用正确命名空间,同时处理可能的异常(部分特殊附件可能无该属性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:12:46