2017-10-20 202 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

相關問題