我正在尝试将文件附加到将在Outlook中以C#发送的电子邮件中 我有以下非常有效的方法:
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
的附件
所以我的问题如下:
Resources.resx
文件以外的文件?含义:文件路径将在我的应用程序中可用,并且在构建项目时文件将被“导出”; MailItem
添加附件?感谢。
答案 0 :(得分:1)
好的,最后我调整了我的方法。 在我需要的所有图像的构建操作中,我执行了以下操作(可在文件的属性选项卡中找到):
这样,在构建时,包含我的图像(和我的图像)的文件夹被复制到构建目录。然后我可以使用他们的相对URL:
Attachment myAttachment = mailItem.Attachments.Add(Path.GetFullPath("Assets/image.png"));
我不知道它是否是唯一的方法,但它有效,它看起来并不难看,我仍然可以使用XAML中的图像。当图像放在resx
文件中时,显然它就是PITA。
答案 1 :(得分:0)
我的猜测是资源不能作为附加项目使用。有没有办法将资源作为图像保存到计算机某处,然后附加您创建的文件?
这样的事情可能有用。
var bmp = new Bitmap(Properties.Resources.myimage);
Attachment myAttachment = mailItem.Attachments.Add(bmp);