首页 > 解决方案 > 互操作 Outlook - 如何将位图添加到邮件正文/附件中

问题描述

我的应用程序中有一个按钮,可以截取当前窗口的屏幕截图,然后我尝试将位图结果添加到 Outlook 邮件中。

我已经创建了我的应用程序的位图:

    FrameworkElement element = (FrameworkElement)o;
    double width = element.ActualWidth;
    double height = element.ActualHeight;
    RenderTargetBitmap bmpCopied = new RenderTargetBitmap((int)Math.Round(width), (int)Math.Round(height), 96, 96, PixelFormats.Default);
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext dc = dv.RenderOpen())
    {
        VisualBrush vb = new VisualBrush(element);
        dc.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height)));
    }
    bmpCopied.Render(dv);
    Clipboard.SetImage(bmpCopied);

为了创建邮件,我使用了管理新邮件的 dll Interop.Outlook:

    Microsoft.Office.Interop.Outlook.Application outlookApp = new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook._MailItem mailItem = (Microsoft.Office.Interop.Outlook._MailItem)outlookApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
    mailItem.Attachments.Add(Clipboard.GetImage());

    mailItem.Display(true);

但是,Attachements.Add() 不适用于位图,并且命令在没有任何解释的情况下崩溃......

有没有办法做到这一点,而不在计算机上创建一个临时文件将其附加到邮件中?

标签: c#bitmapoffice-interop

解决方案


文档Source中,对于添加附件时的参数:

附件的来源。这可以是一个文件(由带有文件名的完整文件系统路径表示)或构成附件的 Outlook 项目。

如果不将图像保存为文件,这似乎是不可能的。

有一个类似的问题(将图片嵌入到 Outlook 电子邮件正文),它提供了一种从文件中内联附加图像的方法,如果可以选择将图像保存到磁盘,这应该对您有所帮助。


推荐阅读