2012-07-13 4 views
2

사용자의 선택에 따라 두 가지 방법 중 하나로 작동 할 수있는 Outlook 추가 기능에서 작업하고 있습니다. 선택한 전자 메일을 처리하거나 다른 방법으로 모든 전자 메일을 처리 할 수 ​​있습니다. 선택된 폴더. 첫 번째 부분은 제대로 작동했지만 두 번째 부분은 문제가되고 있습니다. 아마도 첫 번째 부분의 코드를 잘못 적용했기 때문일 수 있습니다. 문제가 C# Outlook 추가 기능에서 현재 선택된 폴더를 적절하게 잡아낼 수 있다고 생각합니다. 나는 .NET 3.5와 Outlook 2007을 사용하고 있습니다.Outlook 추가 기능에서 현재 선택된 폴더 가져 오기

먼저 전자 메일 코드 -받은 편지함에서 하나 이상의 전자 메일을 선택하고 "선택한 전자 메일"옵션으로 내 추가 기능을 실행하면 다음 코드가 실행되고 정상적으로 작동합니다.

public static void processSelectedEmails(Outlook.Explorer explorer) 
{ 
    //Run through every selected email 
    for (int i = 1; i <= explorer.Selection.Count; i++) 
    //alternatively, foreach (Object selectedObject in explorer.Selection) 
    { 
     Object selectedObject = explorer.Selection[i]; 
    if (!(selectedObject is Outlook.Folder)) 
     { 
       string errorMessage = "At least one of the items you have selected is not an email."; 
       //Code for displaying the error 
       return; 
     } 
     else 
     Outlook.MailItem email = (selectedObject as Outlook.MailItem); 
     //Do something with current email 
    } 
} 

사용자가 Outlook의 탐색 창 (기본적으로 왼쪽)으로 이동하여 폴더 나 하위 폴더 (예 :받은 편지함, 보낸 편지함 또는 다른 폴더)를 선택하면이 코드를 수정하려고했습니다. 그들은 만들었습니다.) 그런 다음 사용자는 위의 코드와 기본적으로 동일한 작업을 수행 할 추가 기능에서 "선택한 폴더 처리"옵션을 선택할 수 있지만 선택한 폴더 내부의 모든 전자 메일을 처리합니다. 사용자가 단일 폴더를 선택한 경우에만 작동하도록 설정했습니다.

public static void processFolder(Outlook.Explorer explorer) 
{ 
    //Assuming they have selected only one item 
    if (explorer.Selection.Count == 1) 
    { 
     //Make sure that that selected item is a folder 
     Object selectedObject = explorer.Selection[1]; 
     if (!(selectedObject is Outlook.Folder)) 
     { 
      string errorMessage = "The item you have selected is not a folder."; 
      //Code for displaying the error 
      return; 
     } 

     //Code for running through every email in that folder 
    } 
} 

내 코드 결코 if (!(selectedObject is Outlook.Folder)) 과거 얻을 수 없기 때문에 나는 아직 실제로 선택한 폴더에있는 모든 이메일을 통해 실행하는 코드를 작성하지 않았습니다. 가장 최근에 선택한 항목이받은 편지함 인 경우에도 해당 시점에 프로그래밍 한 오류가 표시됩니다. 아마도 나는 탐험가를 오용하고있을거야. 선택? 어떤 도움이라도 대단히 감사 할 것입니다.

내 질문에 대답하는 것이 중요 할 수도 있습니다. 추가 기능에는 시작시 생성되는 'explorer'이라는 필드가 있습니다 : explorer = this.Application.ActiveExplorer. 이것은 내 기능에 전달되어 '무엇이 선택되었는지'알 수있는 '탐색기'입니다. 나가 말한대로, 이것은 선정한 전자 우편을 위해 잘 작동하고, 그러나 선정 된 폴더를 위해 작동하지 않는다. 어떤 통찰력이라도 대단히 감사하겠습니다!

편집 1 :이 질문은 기본적으로 Get all mails in outlook from a specific folder과 중복되는 것으로 보이지만 답변이 없습니다.

편집 2 : 내가 더 연구를 해 봤는데, 내가 거의 동일한 기능을 얻을 수 표시 (하지만 불행히도 추가 단계) 팝업을 생성하여 Application.Session.PickFolder() 방법을 사용하여 폴더를 선택합니다. 사용자가 새 폴더를 선택하도록 강요하는 대신 현재 선택된 폴더를 기반으로이를 수행 할 수있는 방법이 있습니까?

편집 3 : 나는 코드가 여기 수정 한 : 더 무엇을 나를 위해 제대로 작동하지 않습니다 보여 http://msdn.microsoft.com/en-us/library/ms268994(v=vs.80).aspx을 :

public static void processFolder(Outlook.Explorer explorer) 
    { 
     string message; 
     if (explorer.Selection.Count > 0) 
     { 
      Object selObject = explorer.Selection[1]; 
      if (selObject is Outlook.MailItem) 
      { 
       message = "The item is an e-mail"; 
      } 
      else if (selObject is Outlook.Folder) 
      { 
       message = "The item is a folder"; 
      } 
      else 
      { 
       message = "No idea what the item is!"; 
      } 

      Console.WriteLine(Message); 
      return; 
     } 
    } 

내가 메시지를 선택하든, 또는 탐색 창으로 이동하여 선택 폴더에 "이 항목은 전자 메일입니다."라는 메시지가 나타납니다. 하지 Folders -

답변

4

Explorer.SelectionItems 만 (는 MailItem, AppointmentItem 등)입니다. 현재 선택된 Folder에 액세스하려면 Explorer.CurrentFolder이 필요합니다.

Folder.Items은 (는) Folder에있는 Items에 액세스 할 수 있습니다.

+0

흥미 롭습니다. 내 코드를 수정할 때이 방법으로 두 가지 방법을 사용하는 데 약간의 문제가 있음을 발견했습니다. 내가 게시 한 편집 3의 코드와 유사하게 사용자가 최근에 선택한 항목을 보는 방법은 무엇입니까? 본질적으로 제가 말하고자하는 것은 전자 메일을 선택하면 해당 전자 메일이 폴더에 있고'Explorer.CurrentFolder'는 해당 폴더를 반환한다는 것입니다. 폴더 만 선택하면 'Explorer.CurrentFolder'는 또한 해당 폴더를 반환하십시오. 사용자가 마지막으로 선택한 것이 폴더인지 또는 해당 폴더의 전자 메일인지 여부를 판단하는 방법은 무엇입니까? – Jake

+0

'Folder'를 선택하면'Folder'에서 첫 번째'Item'이 자동으로 선택되므로 (2) 다른 버튼이 필요할 것입니다. 항목 및 폴더에서 컨텍스트 메뉴를 사용할 수도 있습니다. – SliverNinja

+1

저는 현재 실제로 추가 기능 (http://www.techhit.com/messagesave/)을 사용하고 있습니다.이 기능은 추가 버튼을 사용하지 않고 마지막으로 선택한 항목이 폴더인지 전자 메일인지를 정확하게 식별합니다. 가장 최근에 선택된 항목이 무엇인지에 따라 맨 위에 "선택한 메시지 저장"또는 "폴더 이름이 'FolderName'인 모든 메시지가 표시됩니다. 사용자가 명시 적으로 말해야 할 필요없이 복제하려고하는 기능입니다. – Jake

관련 문제