2017-10-20 343 views
0

我试图将文件附加到将在Outlook中以C#发送的电子邮件。
我有一个伟大的工程如下:C#:将资源作为附件添加到Outlook邮件项目

using OutlookApp = Microsoft.Office.Interop.Outlook.Application; 
[...] 
public class Foo 
{ 
    private void SendMail() 
    { 
     OutlookApp outlookApp = new OutlookApp(); 
     MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
     [...] 
     var rootDirectory = System.Windows.Forms.Application.StartupPath; 
     Attachment myAttachment = mailItem.Attachments.Add(Path.Combine(rootDirectory, @"../../Assets/image.png")); 
     [...] 
     mailItem.Display(false); 
    } 
} 

它的工作原理,但它吮吸了一下,因为现在我的文件是一个静态的文件夹中,将不会出现该项目时。
所以我把我的图片放在项目的资源中:图片现在可以通过Properties.Resources.image获得。
天真,我已经做了以下内容:

using OutlookApp = Microsoft.Office.Interop.Outlook.Application; 
[...] 
public class Foo 
{ 
    private void SendMail() 
    { 
     OutlookApp outlookApp = new OutlookApp(); 
     MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
     [...] 
     var rootDirectory = System.Windows.Forms.Application.StartupPath; 
     Attachment myAttachment = mailItem.Attachments.Add(Properties.Resources.image); 
     [...] 
     mailItem.Display(false); 
    } 
} 

但它不工作:

System.Runtime.InteropServices.COMException:“找不到成员。 (从HRESULT异常:0x80020003(DISP_E_MEMBERNOTFOUND))”

MSDN,我读为Attachments.Add方法的第一个参数是:

类型:System.Object
附接的源极。这可以是一个文件(由具有文件名的完整文件系统路径表示)或构成附件的Outlook项目。

问题,据我所知,我只能提供一个文件名,以便将附件添加到Outlook邮件。另一种选择是创建一个Outlook附件,但如果我明白这是不可能的。做到这一点的唯一方法是...将文件添加到mailItem的附件中。
所以我的问题有以下几点:

  1. 是我的方法正确的添加附件?如果是这样,我该怎么做才能获得资源文件的路径?
  2. 如果这种方法是一个好的方法,有没有办法在projet中引用文件Resources.resx以外的其他文件?含义:文件路径将在我的应用程序中可用,并且在构建项目时文件将被“导出”;
  3. 如果我的方法不正确,我该如何从资源文件中正确添加附件到MailItem

谢谢。

回答

0

OK,我到底适合我的方法。 在为我所需要的所有图像生成操作,我做了以下(这是该文件的属性选项卡提供):

  • 生成操作:内容。
  • 复制到输出目录:复制如果更新。 build options

这样一来,在构建,包含我的图片(我的图片)文件夹复制到构建目录。然后我可以使用他们的相对URL:

Attachment myAttachment = mailItem.Attachments.Add(Path.GetFullPath("Assets/image.png")); 

我不知道它是否做到这一点的唯一方法,但它的作品,似乎丑不,我仍然可以使用图像的XAML。当图像放置在resx文件中时,显然它是PITA。

0

我的猜测是该资源不可用作为要附加的项目。有没有办法将资源作为图像保存到某处的计算机上,然后附上您创建的文件?

这样的事情可能会奏效。

var bmp = new Bitmap(Properties.Resources.myimage); 

Attachment myAttachment = mailItem.Attachments.Add(bmp); 
+0

基于一个已经存在的对象来实例化一个新对象似乎并不好。 “成本”可能并不昂贵,但原则上我不喜欢那样。不过,你的解决方案促使我从另一个角度看待我的问题,并最终找到了解决方案。 – benichka

相关问题