public override List <ApplicationItemProperty> GetApplicationFields(string filePath)
        {
            List <ApplicationItemProperty> returnApplicationItemProperties = new List <ApplicationItemProperty>();
            List <ApplicationItemProperty> applicationItemProperties       = ConfigurationManager.GetInstance().GetApplicationItemProperties(ApplicationTypes.Outlook);

            Microsoft.Office.Interop.Outlook.Application outlook  = new Microsoft.Office.Interop.Outlook.Application();
            Microsoft.Office.Interop.Outlook.MailItem    mailItem = null;
            if (filePath == null)
            {
                mailItem = (Microsoft.Office.Interop.Outlook.MailItem)outlook.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
            }
            else
            {
                mailItem = (Microsoft.Office.Interop.Outlook.MailItem)outlook.CreateItemFromTemplate(filePath);
            }
            Microsoft.Office.Interop.Outlook.ItemProperties properties = mailItem.ItemProperties;

            for (int i = 0; i < properties.Count; i++)
            {
                Microsoft.Office.Interop.Outlook.ItemProperty property = properties[i];
                ApplicationItemProperty applicationItemProperty        = applicationItemProperties.FirstOrDefault(item => item.Name == property.Name);
                if (applicationItemProperty != null)
                {
                    ApplicationItemProperty returnApplicationItemProperty = new ApplicationItemProperty(
                        applicationItemProperty.Name,
                        applicationItemProperty.DisplayName,
                        applicationItemProperty.Type);
                    returnApplicationItemProperty.Value = Convert.ChangeType(property.Value, applicationItemProperty.Type);
                    returnApplicationItemProperties.Add(returnApplicationItemProperty);
                }
            }
            #region Writing the xml for field definitions

            /*
             *  System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter("c:\\fields.xml", Encoding.UTF8);
             *  // start writing!
             *  writer.WriteStartDocument();
             *  writer.WriteStartElement("Outlook");
             *  writer.WriteStartElement("MailItem");
             *  writer.WriteStartElement("ItemProperties");
             *  System.Xml.XmlDocument document = new System.Xml.XmlDocument();
             *  System.Xml.XmlNode mainNode = document.CreateNode(System.Xml.XmlNodeType.Element, "MailItem", "Outlook");
             *  for (int i = 0; i < properties.Count; i++)
             *  {
             *      writer.WriteStartElement("Property");
             *      writer.WriteAttributeString("Name", properties[i].Name);
             *      writer.WriteAttributeString("DisplayName", properties[i].Name);
             *      writer.WriteAttributeString("Type", properties[i].Type.ToString());
             *      writer.WriteEndElement();
             *  }
             *  writer.WriteEndElement();
             *  writer.WriteEndElement();
             *  writer.WriteEndElement();
             *  writer.WriteEndDocument();
             *  writer.Close();
             */
            #endregion

            return(returnApplicationItemProperties);
        }
        protected override List <UploadItem> SetUploadItemFilePath(string sourceFolder, string filePath, UploadItem uploadItem)
        {
            if (ConfigurationManager.GetInstance().Configuration.OutlookConfigurations.SaveAsWord&& Path.GetExtension(filePath) == ".msg")
            {
                List <UploadItem> additionalItems = new List <UploadItem>();
                Microsoft.Office.Interop.Outlook.Application outlook  = new Microsoft.Office.Interop.Outlook.Application();
                Microsoft.Office.Interop.Outlook.MailItem    mailItem = (Microsoft.Office.Interop.Outlook.MailItem)outlook.CreateItemFromTemplate(filePath);
                string newFileName = filePath.Substring(0, filePath.LastIndexOf('.')) + ".doc";
                mailItem.SaveAs(newFileName, Microsoft.Office.Interop.Outlook.OlSaveAsType.olDoc);
                foreach (Microsoft.Office.Interop.Outlook.Attachment attachment in mailItem.Attachments)
                {
                    string extensionName            = String.Empty;
                    string filenameWithoutExtension = String.Empty;
                    string fileName = String.Empty;
                    GetFileNameAndExtension(attachment.FileName, out filenameWithoutExtension, out extensionName);
                    filePath = GetUnuqieFileName(sourceFolder, filenameWithoutExtension, extensionName, out fileName);//keep original name

                    attachment.SaveAsFile(filePath);
                    UploadItem attachmentItem = new UploadItem();
                    attachmentItem.Folder            = uploadItem.Folder;
                    attachmentItem.ContentType       = uploadItem.ContentType;
                    attachmentItem.FieldInformations = uploadItem.FieldInformations;
                    attachmentItem.FilePath          = filePath;

                    additionalItems.Add(attachmentItem);
                }
                uploadItem.FilePath = newFileName;
                return(additionalItems);
            }
            else
            {
                base.SetUploadItemFilePath(sourceFolder, filePath, uploadItem);
                return(null);
            }
        }