我正在Outlook 2010上开发一个带有C#和VS2010的Outlook AddIn
我试图遍历MailItem
的附件集合,并获取名称。我只对嵌入式(内联)图像感兴趣。
我知道Outlook会存储所有"常规"附件和嵌入(内联)图像在同一集合中。
到目前为止,我一直在做的方法是解析HTMLbody
的{{1}}并查找mailItem
HTML标记。我可以从那里开始工作,从<img>
获取名称,该名称遵循此模式&#34; imageXXX.ext&#34; &#34; XXX&#34;是3位数字,ext是扩展名。一旦我从HTMLbody获得了名称,我就可以遍历mailItem.Attchments并将之前检索到的名称与mailItem.Attchments [index] .FileName匹配。这就是HTML的样子:
src=""
我的问题:当从web office client发送内嵌图片时,他们没有相同的命名模式。为他们分配了<img border=0 width=413 height=319
id="Picture_x0020_1" src="cid:image003.png@01D0EE58.60C76F40">
,他们在附件集合中的名称是不同的。
这就是它的样子:
Guid
这样做的结果是我无法将HTMLbody中的附件名称与附件集合中的附件名称相匹配,这使我无法知道附件是否内联。
我尝试了什么:
循环遍历<img size="103705" contenttype="image/png" id="img976028"
sizeoption="best" contextid="img985496"
tabindex="0" style="max-width: 99.9%;
-webkit-user-select: none;" src="cid:3119ab46-1503-48df-b6bb-738a9926618a">
属性的Shapes
集合。除了实际的形状之外,这实际上并不会返回任何内联附件。
获取属性Class,Parent,PathName,Position,Attachments的类型拼命寻找内联附件和非内联附件之间的差异。特别是Type属性,据我所知,它应该告知附件类型。
获取WordEditor
到Guid
并将其与HTML中的mailItem.Attachments[i].GetType().GUID.ToString();
进行比较,但没有成功,上面的行会返回Guid
个零。
我想做什么:找到获取内嵌图片名称的方法,以便我可以将其与附件集合中的名称相匹配和/或找到一种方法来查找内嵌图像内联图像和附加图像之间的差异。
感谢任何帮助。
答案 0 :(得分:0)
不要假设cid属性以任何方式匹配文件名。整个cid属性的值将存储在PR_ATTACH_CONTENT_ID属性(DASL名称http://schemas.microsoft.com/mapi/proptag/0x3712001F
)中。可以使用Attachment.PropertyAccessor.GetProperty
访问该媒体资源。
另请注意,如果PR_ATTACH_CONTEMT_LOCATION属性与图像网址匹配,Outlook将从附件(而不是远程Web服务器)检索图像。
您可以在OutlookSpy中的属性中看到 - 选择消息,单击IMessage按钮,转到GetAttachmentTable选项卡,双击附件。