2014-12-09 5 views
0

Outlook Add in에서 작업 중이며 사용자가 읽고있는 메일의 HTML에서 특정 태그를 찾고 싶습니다. 그 문제에 대해서는 ActiveExplorer의 선택 변경 이벤트를 사용하고 있습니다. 그런 다음C# Outlook mailItem.HTMLBody가 비어 있습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
<HTML> 
<HEAD> 
<META NAME="Generator" CONTENT="MS Exchange Server version 08.01.0240.003"> 
<TITLE></TITLE> 
</HEAD> 
<BODY> 
<!-- Converted from text/plain format --> 

</BODY> 
</HTML> 

두 번째 :

currentExplorer.SelectionChange += new Outlook 
       .ExplorerEvents_10_SelectionChangeEventHandler 
       (CurrentExplorer_Event); 


private void CurrentExplorer_Event() 
     { 
       if (this.Application.ActiveExplorer().Selection.Count == 1) 
       { 
        Object selObject = this.Application.ActiveExplorer().Selection[1]; 
        if (selObject is Outlook.MailItem) 
        { 

         Outlook.MailItem mailItem = (selObject as Outlook.MailItem); 
         lookForTags(mailItem.HTMLBody); 
        } 
       } 
     } 

문제는 사용자가 작동하려면 처음, 메일이 여전히로드 및 및 mailItem.HTMLBody 반환이 있기 때문에 두 번 메일 항목을 클릭하는 것입니다 mailItem.HTMLBody가 실제 본문을 반환하므로 모든 것이 올바르게 작동합니다. 메일로드가 완료되면 코드 실행을 시작할 수있는 다른 이벤트가 있습니까? 빈 HTMLBody를 피하기위한 더 좋은 해결책이 있습니까?

+0

입니다 Open 이벤트 사용할 수 있습니까? –

답변

0

캐시 된 Exchange 모드를 사용합니까?

일반적으로 항목은 이미 SelectionChange 이벤트 처리기에서 사용할 수 있습니다. 기다릴 필요가 없습니다. PC에 어떤 Outlook 버전을 설치 했습니까?

또한 기본 COM 개체를 즉시 릴리스하는 것이 좋습니다. Outlook 개체를 사용한 후에는 System.Runtime.InteropServices.Marshal.ReleaseComObject를 사용하여 Outlook 개체를 해제합니다. 다음 변수를 Visual Basic의 Nothing (C#의 null)으로 설정하여 개체에 대한 참조를 해제합니다. 자세한 내용은 MSDN의 Systematically Releasing Objects 문서를 참조하십시오.

+0

Outlook 2010을 사용하고 있습니다. – user2976625

+0

코드를 검토하고 릴리스 문을 추가하려고 했습니까? –

0

이 메시지 저장소의 어떤 종류의

Inspectors allInspectors; 

     private void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 

      allInspectors = Globals.ThisAddIn.Application.Inspectors; 
      allInspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector); 

     } 


     void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) 
     { 
      if (Inspector.CurrentItem is Outlook.MailItem) 
      { 
       mailItem.Open += new ItemEvents_10_OpenEventHandler(MailItemOpen); 

      } 
     } 

     public void MailItemOpen(ref bool Cancel) 
     { 
      var mailItem = Globals.ThisAddIn.Application.ActiveInspector().CurrentItem as Outlook.MailItem; 
      string text = mailItem.HTMLBody; 
     } 
관련 문제