C#:将资源作为附件添加到 Outlook 邮件项
C#: add a resource as an attachment to an Outlook mail item
我正在尝试将文件附加到将在 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: 'Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))'
从 MSDN 开始,我阅读了 Attachments.Add
方法的第一个参数:
Type: System.Object
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.
据我了解,问题是我只能提供文件名才能将附件添加到 Outlook 邮件中。另一种选择是创建 Outlook 附件,但据我所知这是不可能的。这样做的唯一方法是...在 mailItem
.
的附件中添加一个文件
所以我的问题如下:
- 我添加附件的方法是否正确?如果可以,如何获取资源文件的路径?
- 如果这种方法不错,有没有办法在 projet 中引用
Resources.resx
文件以外的文件?含义:文件路径将在我的应用程序中可用,并且当我构建项目时文件将是 "exported";
- 如果我的方法不正确,我怎样才能正确地从资源文件向
MailItem
添加附件?
谢谢。
我的猜测是该资源无法作为要附加的项目使用。有没有办法将资源作为图像保存到计算机的某个地方,然后附加您创建的文件?
这样的事情可能会奏效。
var bmp = new Bitmap(Properties.Resources.myimage);
Attachment myAttachment = mailItem.Attachments.Add(bmp);
好的,最后我采用了我的方法。
在我需要的所有图像的构建操作中,我执行了以下操作(这在文件的 属性 选项卡中可用):
- 生成操作:内容。
- 复制到输出目录:如果较新则复制。
这样,在构建时,包含我的图像(和我的图像)的文件夹将被复制到构建目录。然后我可以使用他们的亲戚 URL:
Attachment myAttachment = mailItem.Attachments.Add(Path.GetFullPath("Assets/image.png"));
我不知道这是否是唯一的方法,但它有效,看起来并不难看,我仍然可以使用 XAML 中的图像。当图像放在 resx
文件中时,显然是 PITA。
我正在尝试将文件附加到将在 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: 'Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))'
从 MSDN 开始,我阅读了 Attachments.Add
方法的第一个参数:
Type: System.Object
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.
据我了解,问题是我只能提供文件名才能将附件添加到 Outlook 邮件中。另一种选择是创建 Outlook 附件,但据我所知这是不可能的。这样做的唯一方法是...在 mailItem
.
的附件中添加一个文件
所以我的问题如下:
- 我添加附件的方法是否正确?如果可以,如何获取资源文件的路径?
- 如果这种方法不错,有没有办法在 projet 中引用
Resources.resx
文件以外的文件?含义:文件路径将在我的应用程序中可用,并且当我构建项目时文件将是 "exported"; - 如果我的方法不正确,我怎样才能正确地从资源文件向
MailItem
添加附件?
谢谢。
我的猜测是该资源无法作为要附加的项目使用。有没有办法将资源作为图像保存到计算机的某个地方,然后附加您创建的文件?
这样的事情可能会奏效。
var bmp = new Bitmap(Properties.Resources.myimage);
Attachment myAttachment = mailItem.Attachments.Add(bmp);
好的,最后我采用了我的方法。 在我需要的所有图像的构建操作中,我执行了以下操作(这在文件的 属性 选项卡中可用):
- 生成操作:内容。
- 复制到输出目录:如果较新则复制。
这样,在构建时,包含我的图像(和我的图像)的文件夹将被复制到构建目录。然后我可以使用他们的亲戚 URL:
Attachment myAttachment = mailItem.Attachments.Add(Path.GetFullPath("Assets/image.png"));
我不知道这是否是唯一的方法,但它有效,看起来并不难看,我仍然可以使用 XAML 中的图像。当图像放在 resx
文件中时,显然是 PITA。