2014-12-04 3 views
0

Мое приложение должно отправить некоторые письма в какой-либо пункт назначения. После этой операции я хотел бы автоматически перемещать отправленные письма в определенную папку (на основе типа документа, который находится в приложении электронной почты). Если папка не существует, программа должна ее создать, а затем переместить почту во вновь созданную папку. Проблема в том, что после того, как я создаю новую папку и успешно перенесирую почту в нее в первый раз, тогда, когда я отправил anothe mails, которые должны быть перемещены в указанную папку, программа не видит эту папку. На самом деле метод Folders не возвращает никаких папок вообще. откровенно, им из идей, что не так.C# Outlook; После создания папки не удается переместить электронные письма

при проверке в отладчике он говорит, что parentFolder.Folders «Перечисление не дало никаких результатов»

Я не уверен, что я должен сделать что-нибудь еще после создания папки в методе CreateFolder (то есть. Что-то подобное, обновление список папок ...)

вот мой код:

public void moveEmails(string itemType, Boolean itemSent, Outlook.MailItem objMail) 
    { 
     Outlook.MAPIFolder folderParent = objMail.Parent as Outlook.MAPIFolder; 
     Outlook.Folders folders; 
     Boolean notMoved = true; 

     objMail.UserProperties.Add("TransferredBy", Outlook.OlUserPropertyType.olText, true, Outlook.OlUserPropertyType.olText); 
     objMail.UserProperties["TransferredBy"].Value = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
     objMail.Save(); 


     if (folderParent.Name != "Inbox") 
      folderParent = digForInbox(folderParent); 

     folders = folderParent.Folders; 

     if (!itemSent) 
      itemType = "NOT DELIVERED"; 

     foreach (Outlook.MAPIFolder folder in folders) 
     { 
      if (folder.Name == itemType) 
      { 
       objMail.Move(folder); 
       notMoved = false; 
      } 
     } 
     if (notMoved) 
      createFolder(itemType,objMail, folderParent); 
    } 

    public void createFolder(string itemType, Outlook.MailItem objMail, Outlook.MAPIFolder folderParent) 
    { 
     Outlook.MAPIFolder folderNew; 
     folderNew = folderParent.Folders.Add(itemType, Outlook.OlDefaultFolders.olFolderInbox) as Outlook.MAPIFolder; 
     objMail.Move(folderNew); 
    } 
    private Outlook.MAPIFolder digForInbox(Outlook.MAPIFolder folder) 
    { 
     Boolean isNotInbox = true; 
     while(isNotInbox) 
     { 
      if(folder.Name != "Inbox") 
      { 
       folder = folder.Parent as Outlook.MAPIFolder; 
      } 
      else 
      { 
       isNotInbox = false; 
      } 
     } 
     return folder; 
    } 
+1

Вы можете очистить ваш код немного с 'использованием Microsoft.Office.Interop;' –

+0

[Горячий для перемещения элементов в OutLook] (http://msdn.microsoft.com/en-us/library/ms268996.aspx) – MethodMan

+0

На какой строке выбрано исключение? – Quackmatic

ответ

1

Я нашел ответ на мой вопрос:

https://social.msdn.microsoft.com/forums/windows/en-us/180c000c-524a-45dd-88fe-88b470be3597/accessing-subfolders-within-shared-mailbox?forum=outlookdev

проблема была аналогична той, что указана в ссылке. Я не предположить, что, поскольку мои почтовые ящики в основном разделяют те, которые будут влиять на него каким-либо иным способом, чем производительность (за счет подключения к серверу обменом)

Проводка это как ответ

0

Я предлагаю использовать SaveSentMessageFolder свойство класса MailItem. Он позволяет установить объект Folder, который представляет папку, в которой после отправки будет сохранена копия сообщения электронной почты. Кроме того, вы можете найти следующие статьи полезны:

Смежные вопросы