vsto + 区分附件

Posted

技术标签:

【中文标题】vsto + 区分附件【英文标题】:vsto + differentiate attachments 【发布时间】:2012-08-28 16:02:23 【问题描述】:

我需要从邮件项目中获取并保存附件,但使用下面的代码会返回所有附件 - 这意味着它还会返回嵌入的图像,例如带有徽标的发件人签名,这是一个图像。如何区分真实附件与嵌入图像?我在论坛上看到了很多,但我仍然不清楚。

public static void SaveData(MailItem currentMailItem)

    if (currentMailItem != null)
           
        if (currentMailItem.Attachments.Count > 0)
        
            for (int i = 1; i <= currentMailItem.Attachments.Count; i++)
            
                currentMailItem.Attachments[i].SaveAsFile(@"C:\TestFileSave\" + currentMailItem.Attachments[i].FileName);
            
        
       

【问题讨论】:

【参考方案1】:

您可以使用以下pseudo-code from MS Technet Forums 来检查附件是否内联。

if body format is plain text then
   no attachment is inline
else if body format is RTF then
   if PR_ATTACH_METHOD value is 6 (ATTACH_OLE) then
     attachment is inline
   else
     attachment is normal
else if body format is html then
   if PR_ATTACH_FLAGS value has the 4 bit set (ATT_MHTML_REF) then
     attachment is inline
   else
     attachment is normal

您可以使用MailItem.BodyFormat 访问消息正文格式,使用Attachment.PropertyAccessor 访问MIME 附件属性

string PR_ATTACH_METHOD = 'http://schemas.microsoft.com/mapi/proptag/0x37050003';
var attachMethod = attachment.PropertyAccessor.Get(PR_ATTACH_METHOD);

string PR_ATTACH_FLAGS = 'http://schemas.microsoft.com/mapi/proptag/0x37140003';
var attachFlags = attachment.PropertyAccessor.Get(PR_ATTACH_FLAGS);

【讨论】:

以上是关于vsto + 区分附件的主要内容,如果未能解决你的问题,请参考以下文章

Outlook VSTO附件在邮件主题中选择了文本和上下文菜单

如何在一个表单中使用相同的上传处理来区分两个上传?

如何解析带有附件和内联图像的 EML 文件并转换为 HTML

为啥 mysql 区分大小写

unicode排序规则,汉字怎么区分大小写,区分重音,区分假名,区分宽度

怎样修改sqlserver2005系统数据库排序规则