2011-12-22 98 views
1

我希望有人能幫助我。讓我先說我是一個非常業餘的程序員。C#SyncObject與Outlook Interop

我在Outlook中有一個IMAP電子郵件帳戶。我希望在該帳戶中使用一個電子郵件文件夾,並確保Outlook中該文件夾中的所有郵件都與編程的IMAP電子郵件服務器上的郵件同步。我創建了下面的代碼,但我有以下問題/問題:

  1. SyncObject是我應該用來同步此outlook文件夾與imap服務器的正確機制?
  2. 如果我運行它10次,它將運行沒有錯誤2或3次,但然後它會在此行錯誤:
    sync = app.Session.SyncObjects [folder];
    ,出現以下錯誤:

    "System.Runtime.InteropServices.COMException (0x80020005): Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))\r\n at Microsoft.Office.Interop.Outlook.SyncObjects.get_Item(Object Index)\r\n at WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\DKS\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 38"

    關於此錯誤的任何想法?

  3. 當我運行它時,無論它是否成功運行,它都會讓outlook.exe進程在我的機器上運行。如何正確關閉interop?

    private void button1_Click(object sender, EventArgs e) 
    { 
        Microsoft.Office.Interop.Outlook.Application app = null; 
        Microsoft.Office.Interop.Outlook._NameSpace ns = null; 
        Microsoft.Office.Interop.Outlook.MAPIFolder folder = null; 
        Microsoft.Office.Interop.Outlook.SyncObject sync = null; 
    
        try 
        { 
         app = new Microsoft.Office.Interop.Outlook.Application(); 
         ns = app.GetNamespace("MAPI"); 
         folder = ns.Folders["yahoo_imap_mail"].Folders["Trash"]; 
    
         sync = app.Session.SyncObjects[folder]; 
         sync.Start(); 
        } 
        catch (System.Runtime.InteropServices.COMException ex) 
        { 
         MessageBox.Show(ex.ToString()); 
         Console.WriteLine(ex.ToString()); 
        } 
        finally 
        { 
         ns = null; 
         app = null; 
         folder = null; 
         sync = null; 
        } 
    
        MessageBox.Show("Complete"); 
    } 
    

回答

3

優於從來不遲到 - 不過。看看你的代碼,它不匹配代碼我見過的app.Session.SyncObjects [x]的參數,其中x是INTEGER而不是文件夾。我發現的工作代碼類似於

for (Int32 i = 0; i < app.Session.SyncObjects.Count; i++) 
{ 
    _syncObj = app.Session.SyncObjects[1]; 
    _syncObj.SyncEnd +=_syncObj_SyncEnd; 
} 

_syncObj.Start(); 

最重要的是,您的應用程序不告訴Outlook關閉。那爲什麼呢?你讓它打開它。你也沒有錯誤陷阱 - 所以無論什麼原因,如果找不到文件夾?出於某種原因無法連接到Outlook會怎麼樣?如果你希望展望結束,你應該告訴它。

With app.Quit();

+0

我看到_syncObj.Start()將同步到文件夾,但有沒有辦法確定同步作業是否完成? – ajivani 2016-02-29 22:20:00

+1

是的,你看到在同步代碼分配..該函數運行完成 – BugFinder 2016-02-29 22:21:03