C# 从Outlook中删除内联图像

C# 从Outlook中删除内联图像,c#,outlook,outlook-addin,C#,Outlook,Outlook Addin,要求从Outlook电子邮件中删除附件。代码如下: internal void ClearAttachments() { Outlook.MailItem mailItem = Globals.ThisAddin.Application.ActiveInspector().CurrentItem as MailItem; try { if (mailItem != null && mailItem.A

要求从Outlook电子邮件中删除附件。代码如下:

internal void ClearAttachments()
    {
        Outlook.MailItem mailItem = Globals.ThisAddin.Application.ActiveInspector().CurrentItem as MailItem;
        try
        {
            if (mailItem != null && mailItem.Attachments.Count >= 1 )
            {
                for (int i = mailItem.Attachments.Count; i >= 1; i--)
                {
                    mailItem.Attachments[i].Delete();
                    mailItem.Attachments.Remove(i);
                }
            }
        }
        catch (Exception e)
        {
            //log this if needed.
        }

它适用于除“内联图像”之外的大多数常用文件。如果我的内联图像少于3个,它不会将它们标识为附件(奇怪!),但是如果我有内联图像和其他文件(例如txt),它就可以正常工作。在这种情况下,当被删除时Outlook仍然显示一个矩形块(类似于容器)删除图像时。

矩形块由HTML正文显示,该正文现在引用的是不再存在的图像。您还需要适当地更新MailItem.HTMLBody属性

矩形块由HTML主体显示,该主体现在引用一个不再存在的图像。您还需要适当地更新MailItem.HTMLBody属性

感谢您的快速回复,但当有在线图像时,mailItem.Attachments不会反映它们。如果我有3个内联图像,则mailItem.Attachments.Count仍然为0。如果图像由远程url而不是cid属性引用,则“附件”集合当然不会有这些图像-它们仅存在于远程服务器上。您将需要处理HTMLBody属性并删除不需要的img标记。感谢您的快速回复,但是当有在线图像时,mailItem。附件不会反映它们。如果我有3个内联图像,则mailItem.Attachments.Count仍然为0。如果图像由远程url而不是cid属性引用,则“附件”集合当然不会有这些图像-它们仅存在于远程服务器上。您需要处理HTMLBody属性并删除不需要的img标记。HTML标记中如何表示附件?它们是使用
cid:
attribute还是64位编码来引用的?mailItem.HTMLBody属性建议如下:您需要使用
PR\u ATTACH\u CONTENT\u ID
(“”)获取相应的编码附加图像文件设置为image001。png@01D0EAE4.A98A98A0如HTML标记所示。HTML标记中的附件是如何表示的?它们是使用
cid:
attribit或64位编码来引用的?mailItem.HTMLBody属性建议如下:您需要使用
PR\u ATTACH\u content获取相应的附加图像文件NT_ID
(“”)设置为image001。png@01D0EAE4.A98A98A0如HTML标记所示。