我试图将文件附加到将在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
的附件中。
所以我的问题有以下几点:
- 是我的方法正确的添加附件?如果是这样,我该怎么做才能获得资源文件的路径?
- 如果这种方法是一个好的方法,有没有办法在projet中引用文件
Resources.resx
以外的其他文件?含义:文件路径将在我的应用程序中可用,并且在构建项目时文件将被“导出”; - 如果我的方法不正确,我该如何从资源文件中正确添加附件到
MailItem
?
谢谢。
基于一个已经存在的对象来实例化一个新对象似乎并不好。 “成本”可能并不昂贵,但原则上我不喜欢那样。不过,你的解决方案促使我从另一个角度看待我的问题,并最终找到了解决方案。 – benichka