Interop Outlook - 如何将位图添加到邮件中 body/attachment

Interop Outlook - How to add bitmap into mail body/attachment

我的应用程序中有一个按钮可以截取当前 window 的屏幕截图,我尝试将位图结果添加到 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() 不适用于位图,并且命令在没有任何解释的情况下崩溃了...

有没有办法不在计算机上创建临时文件将其附加到邮件中?

来自documentation,对于添加附件时的参数Source

The source of the attachment. This can be a file (represented by the full file system path with a file name) or an Outlook item that constitutes the attachment.

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

有一个类似的问题 (Embedding picture to outlook email body),它提供了一种从文件中内联附加图像的方法,如果可以选择将图像保存到磁盘,这应该对您有所帮助。