2011-07-27 29 views
2

你好我想創建一個Outlook.MailItem(我相信)從現有的位於磁盤上。我將路徑存儲在一個字符串中,並且想訪問以從中保存正文和附件。創建/打開現有msg從路徑到新的Outlook.MailItem在c#

我似乎無法弄清楚如何在c#中打開它並訪問它。

目前我有沿

其中F1計算出類似的東西線 「C:\用戶\封郵件\ email.msg」

感謝您的時間

Outlook.Application app = new Outlook.Application(); 

     try 
     { 

      foreach (String fl in Directory.GetFiles(docInfo.LocalPath + _preprocessorDirectory)) 
      { 
       if (Regex.IsMatch(fl.Trim(), _regex, RegexOptions.IgnoreCase)) 
       { 

        Outlook.MailItem email = new Outlook.MailItem(fl); 
        SaveAttachments(email); 
        SaveBody(email); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      logger.Error("Error in Process for document " + docInfo.OriginalPath, ex); 
      callback.Invoke(docInfo, false); 
     } 
     return false; 
+1

爲什麼要使用'Regex'?它是要弄清楚它是否是一個msg文件?你可以使用'Path'類。嘗試'if(Path.GetExtension(fl)==「.msg」)' –

回答

7

要在Outlook中打開項目,請嘗試:

var email = (Outlook.MailItem)app.Session.OpenSharedItem(fl)

從那裏,您可以訪問Attachments屬性和Body屬性。

此外,正如我在我的評論中提到,如果Regex.IsMatch是determing文件擴展名,使用Path.GetExtension()代替

+0

正是我在找什麼,但不知道如何到達那裏。從Java新手到C#,謝謝。使用app.session ...並不是我想象的那樣,並且會研究它實際上做了什麼。謝謝。 使用正則表達式保持系統靈活性,因爲對不同的文件使用不同的檢查。即。圖片,文檔,pdfs ...只是存儲在一個app.config中在一個地方改變。謝謝。 – extraordin

0

我用這個NuGet包:https://www.nuget.org/packages/MSGReader/

看起來工作得很好。我更喜歡MS OutlookApi庫,因爲它不需要安裝Outlook。

我明白,它不會產生的MailItem的情況下,如你要求爲你的問題 - 但它將使你能夠提取保存單個附件和車身...