我試圖將文件附加到將在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