2016-07-18 83 views
0

我爲了業務目的製作了一個Outlook加載項(Outlook 2013和2016 VSTO加載項),以將電子郵件詳細信息保存到我們的數據庫。當一個新的電子郵件被組成時,加載項被啓動,但當電子郵件被髮送時關閉。c#Outlook加載項獲取發送郵件後的發送日期發送郵箱

電子郵件的發送日期只有在電子郵件被移動到發送郵箱後纔會添加。有沒有方法可以使用我當前的加載項(或另一個加載項)在關閉之後獲取該發送日期,而不讓用戶等待它移至發送的郵箱?

我知道它可以很容易地在VBA中完成,但我希望最好使用加載項,以便它可以輕鬆加載到所有使用交換服務器的用戶。

回答

0

那不會是今天的日期/時間(現在)還是其他的東西?

您可以在VBA中執行的所有操作都可以在COM插件中執行 - 訂閱已發送郵件文件夾中的Items.ItemAdd事件並檢索事件觸發時的日期。

0

謝謝德米特里的回覆。它使我走上了正確的道路。將新項目添加到發送郵箱時,我使用現有的VSTO插件觸發。我不知道在「ThisAddIn_Startup」方法中插入這個方法時,重新激活加載項,現在這是有道理的。我跟着this的例子。

這裏是我的代碼:

Outlook.NameSpace outlookNameSpace; 
Outlook.MAPIFolder Sent_items; 
Outlook.Items items; 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    outlookNameSpace = this.Application.GetNamespace("MAPI"); 
    Sent_items = outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail); 

    items = Sent_items.Items; 
    items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd); 
} 

void items_ItemAdd(object Item) 
{ 
    Outlook.MailItem mail = (Outlook.MailItem)Item;  

    string strMailItemNumber_filter = mail.UserProperties["MailItemNumber"].Value; 

    if ((Item != null) && (!string.IsNullOrWhiteSpace(strMailItemNumber_filter))) 
    { 
     if (mail.MessageClass == "IPM.Note" && 
        mail.UserProperties["MailItemNumber"].Value.ToUpper().Contains(strMailItemNumber_filter.ToUpper())) //Instead of subject use other mail property 
     { 
      //Write 'Sent date' to DB 
      System.Windows.Forms.MessageBox.Show("Sent date is: "+ mail.SentOn.ToString()+ " MailNr = "+strMailItemNumber_filter); 

     } 
    } 

} 

我必須創建新的郵件用戶定義的屬性相匹配我派人找到的郵箱發送了正確的電子郵件的電子郵件:

 private void AddUserProperty(Outlook.MailItem mail) 
    { 
     Outlook.UserProperties mailUserProperties = null; 
     Outlook.UserProperty mailUserProperty = null; 
     try 
     { 
      mailUserProperties = mail.UserProperties; 
      mailUserProperty = mailUserProperties.Add("MailItemNrProperty", Outlook.OlUserPropertyType.olText, false, 1); 
      // Where 1 is OlFormatText (introduced in Outlook 2007) 
      mail.UserProperties["MailItemNumber"].Value = "Any value as string..."; 
      mail.Save(); 
     } 
     catch (Exception ex) 
     { 
      System.Windows.Forms.MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (mailUserProperty != null) Marshal.ReleaseComObject(mailUserProperty); 
      if (mailUserProperties != null) Marshal.ReleaseComObject(mailUserProperties); 
     } 
    } 
相關問題