Переименовать папки в PST-файле Outlook

уже несколько дней я пытаюсь переименовать папку отправленной почты, удаленные элементы и папку «Входящие» через С#.

Я пробовал что-то вроде этого:

 List<Outlook.MailItem> mailItems = new List<Outlook.MailItem>();
            Outlook.Application app = new Outlook.Application();
            Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
            // Add PST file (Outlook Data File) to Default Profile
            outlookNs.AddStore(pstFilePath);
            Outlook.MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();

           Outlook.Folders subFolders = rootFolder.Folders;

  foreach (Outlook.Folder folder in subFolders)
            {

              folder.Name =  (folder.Name == "deleted Elements"?"deleted":folder.Name);
}

Но безуспешно. Я всегда получаю исключение, что у меня нет прав на изменение имени. Другие созданные пользователем папки я могу переименовать без проблем.

Что-то сделать, чтобы разблокировать папку? Или есть другая возможность доступа к папкам?

Большое спасибо

Изменить: Expetion: у вас нет разрешений.


person HW90    schedule 07.03.2012    source источник
comment
Предоставьте документацию по рассматриваемому исключению. Ваше логическое назначенное выражение имеет очень мало смысла.   -  person Security Hound    schedule 07.03.2012
comment
Я ищу те же параметры в Outlook 2010, но безуспешно. По-видимому, для этого нет возможности. Насколько я понял, более старая версия Outlook поддерживала такое переименование папок по умолчанию. Буду рад любым идеям.   -  person Omar Abdirahman    schedule 15.04.2014


Ответы (1)


public string RenameFolder(string name, string folderid)
    {
        Outlook.Application app = new Outlook.Application();
        Outlook.NameSpace ns = null;
        Outlook.Folder folder = null;
        string n= null;

        try
        {
            ns = app.GetNamespace("MAPI");
            folder = ns.GetFolderFromID(folderid) as Outlook.Folder;
            n=folder.Name;
            folder.Name = (folder.Name = name) ;
            return n + " has been successfully changed to " + folder.Name;
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (app != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app);
            }

            if (folder != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(folder);
            }

            if (ns != null)
            {
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ns);
            }
        }
    }

этот код работает для меня.. когда я запускаю визуальную студию в режиме администратора..

person Hussnain Hashmi    schedule 01.05.2016
comment
Не могли бы вы объяснить необходимость двойного переименования папок? folder.Name = (folder.Name = name) ; - person Kot Matroskin; 15.01.2018