public static MasterCategoryList Bind(ExchangeService service, string smtpAddress)
        {
            try
            {
                FolderId TargetFolder = new FolderId(WellKnownFolderName.Calendar, smtpAddress);
                var      item         = UserConfiguration.Bind(service, "CategoryList", TargetFolder, UserConfigurationProperties.XmlData);

                var reader     = new StreamReader(new MemoryStream(item.XmlData), Encoding.UTF8, true);
                var serializer = new XmlSerializer(typeof(MasterCategoryList));
                var result     = (MasterCategoryList)serializer.Deserialize(reader);
                result._UserConfigurationItem = item;
                return(result);
            }
            catch (System.ArgumentNullException)
            {
                // There is a folder but it didn't have any categories
                // Create an empty list and return it
                FolderId TargetFolder = new FolderId(WellKnownFolderName.Calendar, smtpAddress);
                var      item         = UserConfiguration.Bind(service, "CategoryList", TargetFolder,
                                                               UserConfigurationProperties.XmlData);
                var result = new MasterCategoryList();
                result.Categories             = new List <Category>();
                result._UserConfigurationItem = item;
                return(result);
            }
            catch (InvalidOperationException ioe)
            {
                // The master category list is corrupted
                // Create an empty list and repopulate it
                log.WriteErrorLog(ioe.Message);
                FolderId TargetFolder = new FolderId(WellKnownFolderName.Calendar, smtpAddress);
                var      item         = UserConfiguration.Bind(service, "CategoryList", TargetFolder,
                                                               UserConfigurationProperties.XmlData);
                var result = new MasterCategoryList();
                result.Categories             = new List <Category>();
                result._UserConfigurationItem = item;
                return(result);
            }
            catch (Exception ex)
            {
                // Seems there is no MasterCategoryList, we will try to create a new one
                log.WriteErrorLog(ex.ToString());
                log.WriteErrorLog(ex.Message);
                return(CreateNewMasterCartegories(service));
            }
        }
 public static MasterCategoryList CreateNewMasterCartegories(ExchangeService service)
 {
     try
     {
         log.WriteDebugLog("No Master category list found. Try to create a new one.");
         var result = new MasterCategoryList();
         result.Categories             = new List <Category>();
         result._UserConfigurationItem = new UserConfiguration(service);
         result._UserConfigurationItem.Save("CategoryList", WellKnownFolderName.Calendar);
         log.WriteDebugLog("Master category list created successfully.");
         return(result);
     }
     catch (Exception ex)
     {
         log.WriteErrorLog("No Master category list found. Creation failed. It's not possible to Ex- or Import categories for this mailbox");
         log.WriteErrorLog(ex.ToString());
         log.WriteErrorLog(ex.Message);
         return(null);
     }
 }