Interop 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,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);

但是,Attachments.Add()无法与位图一起使用,并且命令崩溃而没有任何解释...

有没有一种方法可以在计算机上不创建将其附加到邮件的临时文件?

解决方法

在添加附件时,从documentation中获取参数Source

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...