以 GIF 格式保存 Outlook 中的嵌入图像

Posted

技术标签:

【中文标题】以 GIF 格式保存 Outlook 中的嵌入图像【英文标题】:Save embedded images from outlook in GIF format 【发布时间】:2017-05-26 10:34:49 【问题描述】:

我正在尝试使用 Windows 服务中的 Outlook 对象从收件箱中读取邮件,然后提取嵌入的图像。但是邮件中可以嵌入任何类型的图像。 Outlook API中有什么简单的方法可以保存所有嵌入的GIF格式吗?

 if (newEmail.Attachments.Count > 0)
            
                for (int i = 1; i <= newEmail
                   .Attachments.Count; i++)
                
                    string value = newEmail.Attachments[i].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E");

                    if (!String.IsNullOrEmpty(value))
                    
                    newEmail.Attachments[i].SaveAsFile
                        (@"C:\TestFileSave\" +
                        newEmail.Attachments[i].FileName);
                    
                
             

【问题讨论】:

不,您必须对地雷类型使用二进制检测来确认附件是图像,然后将其保存为 gif。想要的功能是什么?只有图片? @JeremyThompson 是的,我想保存所有嵌入的文件。我认为在大多数情况下,用户会嵌入屏幕截图等图像。一般来说,还有哪些其他文件可以嵌入到邮件中(除了图像)? 在 RTF 模式下,您可以放置​​文件,afaik 虽然它们将是附件(抱歉,我记不起上次检查的时间),我也没有看到嵌入的视频或音频剪辑。 请问使用模式的 GetProperty 实现了什么?只是检查嵌入的图像?顺便说一句,这是 Mime 类型检查器代码:***.com/q/15300567/495455 是的。该 GetProperty 用于检查附件是嵌入的还是附加的。 【参考方案1】:

您不能在服务中使用 Outlook 对象模型。为什么不创建一个 COM 插件。

您还在检查 PR_ATTACH_CONTENT_ID 属性是否存在。请记住,可以在任何附件上设置 Content-ID MIME 标头,它不一定是图像,您需要检查 html 正文。

【讨论】:

所以我无法将 Microsoft.Office.Interop.Outlook.dll 与 Windows 服务一起使用?如果不可能,那么解决方案是什么? 您的选项是扩展 MAPI(C++ 或 Delphi)、赎回(它包装了扩展 MAPI 并可从任何语言使用)或 EWS(如果是 Exchange 邮箱)。 interop Outlook 也不起作用,或者只是出于安全考虑,不应在 Windows 服务中使用它。我尝试在我的一台机器上的 Windows 服务中使用它并且它有效!但是在另一台服务器上,当我尝试获取 mailitem.SenderEmailAddress 时,远程过程调用失败。在这两种情况下,Windows 服务都将登录用户设置为具有 Outlook 连接的用户。那么这两种情况背后的原因是什么? 它不起作用 - 它只是被设计为可以显示提示的最终用户应用程序。 但它在我的机器上作为 Windows 服务工作。它能够获取邮件属性和附件。

以上是关于以 GIF 格式保存 Outlook 中的嵌入图像的主要内容,如果未能解决你的问题,请参考以下文章

在 html 中嵌入图像以自动发送 Outlook365 电子邮件

如何使用 Outlook 2010(无 smtp)和 python 发送带有嵌入图像(不是附件)的 HTML 格式电子邮件

将 GIF 图像转换为 nsdata

在 html 电子邮件中嵌入图像

仅保存 Outlook MailItem 的真实附件

是否可以像 Outlook RTF/TNEF 那样在 html 电子邮件中嵌入非图像附件?