2014-10-06 27 views
0

我想添加一個附件用作電子郵件中的標題圖像。但是,當我嘗試附加文件時,路徑從窗口讀取而不是從我的解決方案目錄位置讀取。我怎麼做?c#MailMessage附件位置

var msg = new MailMessage(fromMailAdress, toEmail) { Subject = subject, Body = emailBody }; 
      msg.Attachments.Add(new Attachment("../images/logo.jpg")); 

從C讀取:\ WINDOWS \ SYSTEM32 \影像\ logo.jpg」

我想從解決方案層面的項目/圖像/ logo.jpg

+0

你可能認爲這是你想要的,但它可能不是。想想你在部署應用程序時會發生什麼。 – Icemanind 2014-10-06 21:21:41

+0

你可以不使用資源文件位置嗎?這裏是關於MailMessage附件頭的MSDN文檔http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.headers(v=vs.110).aspx – MethodMan 2014-10-06 21:24:53

回答

1

這裏就是你想要什麼要做:

  1. 在解決方案中創建一個文件夾(說attachment)來存儲您的附件文件。
  2. 使用~/attachment/filename來訪問該文件。

由於~/attachment/filename是一個虛擬的路徑,你必須把它轉換爲使用Control.ResolveUrl()或一個更合適的方式物理路徑。檢查瞭解更多關於它:ResolveUrl without an ASP.NET Page

0

我不認爲你提到了你是從什麼類型的解決方案。

在傳統的Windows應用程序中,您有幾個選項。您可以通過在項目資源管理器中右鍵單擊徽標文件,選擇「屬性」並將「複製到輸出目錄」功能設置爲「複製如果更新」來確保將徽標文件複製到您的輸出目錄。然後,您需要修改上面的代碼以從正在執行的程序集路徑加載圖像...... Visual Studio將創建「圖像」項目文件夾是我的經驗。

string logopath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images/logo.jpg"); 

如DJ KRAZE所述,更好的選擇是將您的徽標添加爲資源。如果將其作爲資源添加到項目中,則可以在不存在臨時文件時將其寫入臨時文件。然後,使用您爲臨時文件創建的路徑附加它。然後,您可以在完成後刪除它,或者將其保留並僅在不存在時重新創建。

第三種方法是將徽標上傳到網站,然後通過URL在您的電子郵件中引用它,而不是將其作爲附件包含在內。如果你正在創建一個HTML郵件消息,這可能是最好的解決方案。