사용자의 선택에 따라 두 가지 방법 중 하나로 작동 할 수있는 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
-
흥미 롭습니다. 내 코드를 수정할 때이 방법으로 두 가지 방법을 사용하는 데 약간의 문제가 있음을 발견했습니다. 내가 게시 한 편집 3의 코드와 유사하게 사용자가 최근에 선택한 항목을 보는 방법은 무엇입니까? 본질적으로 제가 말하고자하는 것은 전자 메일을 선택하면 해당 전자 메일이 폴더에 있고'Explorer.CurrentFolder'는 해당 폴더를 반환한다는 것입니다. 폴더 만 선택하면 'Explorer.CurrentFolder'는 또한 해당 폴더를 반환하십시오. 사용자가 마지막으로 선택한 것이 폴더인지 또는 해당 폴더의 전자 메일인지 여부를 판단하는 방법은 무엇입니까? – Jake
'Folder'를 선택하면'Folder'에서 첫 번째'Item'이 자동으로 선택되므로 (2) 다른 버튼이 필요할 것입니다. 항목 및 폴더에서 컨텍스트 메뉴를 사용할 수도 있습니다. – SliverNinja
저는 현재 실제로 추가 기능 (http://www.techhit.com/messagesave/)을 사용하고 있습니다.이 기능은 추가 버튼을 사용하지 않고 마지막으로 선택한 항목이 폴더인지 전자 메일인지를 정확하게 식별합니다. 가장 최근에 선택된 항목이 무엇인지에 따라 맨 위에 "선택한 메시지 저장"또는 "폴더 이름이 'FolderName'인 모든 메시지가 표시됩니다. 사용자가 명시 적으로 말해야 할 필요없이 복제하려고하는 기능입니다. – Jake