2015-06-27 47 views
0

我是新來的office插件。我是一名MVC程序員,但這個項目已被拋棄,因爲沒有人願意這樣做。我需要創建一個outlook插件,將所有電子郵件數據轉發到可以通過招聘系統跟蹤通信的服務。
我使用從outlook插件發送所有電子郵件數據到服務

,我再投郵件到Outlook.MailItem。問題是我看不到從電子郵件地址和電子郵件地址。它給我的只是人的名字。我錯過了什麼嗎?

到目前爲止,我能想到的最佳解決方案是將msg保存爲.msg文件。轉發到我的服務,然後用戶發現一個解析器將其轉換爲HTML。

有什麼建議嗎?

回答

1

要訪問收件人,請循環訪問MailItem.Recipients集合並訪問Recipient.Name和Recipient.Address屬性。

與發件人相關的屬性尚未設置時間ItemSend事件觸發 - 您可以訪問發件人屬性的最早時間是Items.ItemAdd事件在已發送郵件文件夾上觸發(使用Namespace.GetDefaultFolder檢索它)。

您可以閱讀MailItem.SendUsingAccount。如果它爲null,則使用Namespace.Acounts集合中的第一個Account。然後您可以使用Account.Recipient對象。

請記住,您不應盲目地將傳出項目轉換爲MailItem對象 - 您也可以具有MeetingItem和TaskRequestItem對象。

+0

謝謝,它適用於收件人,但不幸的是,似乎電子郵件並不總是移動到Outlook中的發送郵件文件夾,所以ItemAdd事件對我沒有任何幫助。當我回來工作時,我將不得不再次檢查這一點,因爲我認爲使用交換服務器時存在差異。 –

0

確定使用由Dmitry Streblechenko給我的信息和其他一些信息,我只是在這裏查找是我的解決方案。

在ItemSend事件中,我首先確保發送的電子郵件已移至默認的已發送郵件文件夾。我正在測試使用Gmail的Outlook,所以通常這些會去別處。 sentMailItems是作爲一個類字段,顯然它會得到垃圾回收,如果它只是在啓動函數內部聲明的(對我來說MVC程序員:)是很奇怪的)。

當我回到辦公室時,我會在交易所進行測試,希望一切順利。

public partial class ThisAddIn 
{ 

    public Outlook.Items sentMailItems; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(ItemSend); 
     sentMailItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items; 
     sentMailItems.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 
    } 

    void Items_ItemAdd(object item) 
    { 
     MessageBox.Show(((Outlook.MailItem)item).Subject); 

     var msg = Item as Outlook.MailItem; 


     string from = msg.SenderEmailAddress; 

     string allRecip = ""; 
     foreach (Outlook.Recipient recip in msg.Recipients) 
     { 
      allRecip += "," + recip.Address; 
     } 
    } 


    private void ItemSend(object Item, ref bool Cancel) 
    { 
     if (!(Item is Outlook.MailItem)) 
      return; 

     var msg = Item as Outlook.MailItem; 

     msg.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options) 
     Outlook.Folder sentFolder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) as Outlook.Folder; 
     if (sentFolder != null) 
      msg.SaveSentMessageFolder = sentFolder; // override the default sent items location 
     msg.Save();    

    } 
    //Other auto gen code here.... 
} 
相關問題