Мое приложение должно отправить некоторые письма в какой-либо пункт назначения. После этой операции я хотел бы автоматически перемещать отправленные письма в определенную папку (на основе типа документа, который находится в приложении электронной почты). Если папка не существует, программа должна ее создать, а затем переместить почту во вновь созданную папку. Проблема в том, что после того, как я создаю новую папку и успешно перенесирую почту в нее в первый раз, тогда, когда я отправил 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;
}
Вы можете очистить ваш код немного с 'использованием Microsoft.Office.Interop;' –
[Горячий для перемещения элементов в OutLook] (http://msdn.microsoft.com/en-us/library/ms268996.aspx) – MethodMan
На какой строке выбрано исключение? – Quackmatic