public XmlDocument ExportConfigurationToXml()
        {
            string xemailNS = "http://www.siprod.net/namespaces/XEMail/ClientConfig";
            string emptyNS  = string.Empty;

            XmlDocument doc  = new XmlDocument();
            XmlNode     root = doc.CreateNode(XmlNodeType.Element, "XEMailClientConfig", xemailNS);

            doc.AppendChild(root);

            XmlNode clientNode = doc.CreateNode(XmlNodeType.Element, "ClientConfig", xemailNS);

            root.AppendChild(clientNode);
            GenerateChildNode(clientNode, xemailNS, "AutoCheckEnabled", AutoCheckEnabled.ToString(), ref doc);
            GenerateChildNode(clientNode, xemailNS, "CheckInterval", CheckInterval.ToString(), ref doc);
            GenerateChildNode(clientNode, xemailNS, "WebserviceUrl", WebserviceUrl, ref doc);

            XmlNode netProxyNode = doc.CreateNode(XmlNodeType.Element, "NetworkProxy", xemailNS);

            clientNode.AppendChild(netProxyNode);
            GenerateChildNode(netProxyNode, xemailNS, "Enabled", networkProxy.Enabled.ToString(), ref doc);
            GenerateChildNode(netProxyNode, xemailNS, "Url", networkProxy.Url, ref doc);
            GenerateChildNode(netProxyNode, xemailNS, "Port", networkProxy.Port.ToString(), ref doc);
            GenerateChildNode(netProxyNode, xemailNS, "User", networkProxy.User, ref doc);
            GenerateChildNode(netProxyNode, xemailNS, "Password", EncryptedDataHelper.ConvertToNumbersString(MachineBasedRijndaelEncryptor.Encrypt(networkProxy.Password)), ref doc);
            GenerateChildNode(netProxyNode, xemailNS, "Domain", networkProxy.Domain, ref doc);

            XmlNode accountsNode = doc.CreateNode(XmlNodeType.Element, "Accounts", xemailNS);

            clientNode.AppendChild(accountsNode);
            XmlNode accountNode;

            foreach (string key in accounts.Keys)
            {
                XEMailAccount account = accounts[key];
                accountNode = doc.CreateNode(XmlNodeType.Element, "Account", xemailNS);

                GenerateChildNode(accountNode, xemailNS, "AccountName", account.AccountName, ref doc);
                GenerateChildNode(accountNode, xemailNS, "UseSameCredentials", account.UseSameCredentialsToSend.ToString(), ref doc);

                XmlNode incomingServerNode = doc.CreateNode(XmlNodeType.Element, "IncomingServer", xemailNS);
                accountNode.AppendChild(incomingServerNode);
                GenerateChildNode(incomingServerNode, xemailNS, "ServerEnabled", account.IncomingServer.ServerEnabled.ToString(), ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "ServerProtocol", account.IncomingServer.ServerProtocol.ToString(), ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "ServerName", account.IncomingServer.ServerName, ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "ServerPort", account.IncomingServer.ServerPort.ToString(), ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "UserName", account.IncomingServer.Username, ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "UserPassword", EncryptedDataHelper.ConvertToNumbersString(MachineBasedRijndaelEncryptor.Encrypt(account.IncomingServer.UserPassword)), ref doc);
                GenerateChildNode(incomingServerNode, xemailNS, "SslEnabled", account.IncomingServer.SslEnabled.ToString(), ref doc);

                XmlNode outgoingServerNode = doc.CreateNode(XmlNodeType.Element, "OutgoingServer", xemailNS);
                accountNode.AppendChild(outgoingServerNode);
                GenerateChildNode(outgoingServerNode, xemailNS, "ServerEnabled", account.OutgoingServer.ServerEnabled.ToString(), ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "ServerProtocol", account.OutgoingServer.ServerProtocol.ToString(), ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "ServerName", account.OutgoingServer.ServerName, ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "ServerPort", account.OutgoingServer.ServerPort.ToString(), ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "UserName", account.OutgoingServer.Username, ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "UserPassword", EncryptedDataHelper.ConvertToNumbersString(MachineBasedRijndaelEncryptor.Encrypt(account.OutgoingServer.UserPassword)), ref doc);
                GenerateChildNode(outgoingServerNode, xemailNS, "SslEnabled", account.OutgoingServer.SslEnabled.ToString(), ref doc);

                accountsNode.AppendChild(accountNode);
            }

            clientNode.AppendChild(accountsNode);

            return(doc);
        }
        public bool ImportConfigurationFromXml(XmlDocument XmlConfigurationDoc)
        {
            XmlElement root = XmlConfigurationDoc["XEMailClientConfig"]["ClientConfig"];

            autoCheckEnabled = bool.Parse(GetNodeValue(root["AutoCheckEnabled"]).ToString());
            checkInterval    = int.Parse(GetNodeValue(root["CheckInterval"]).ToString());
            webserviceUrl    = GetNodeValue(root["WebserviceUrl"]).ToString();

            XmlNode proxyNode = root["NetworkProxy"];

            try
            {
                networkProxy.Enabled = bool.Parse(GetNodeValue(proxyNode["Enabled"]).ToString());
            }
            catch
            {
                networkProxy.Enabled = false;
            }
            networkProxy.Url = GetNodeValue(proxyNode["Url"]).ToString();
            try
            {
                networkProxy.Port = int.Parse(GetNodeValue(proxyNode["Port"]).ToString());
            }
            catch
            {
                networkProxy.Port = 0;
            }
            networkProxy.User     = GetNodeValue(proxyNode["User"]).ToString();
            networkProxy.Domain   = GetNodeValue(proxyNode["Domain"]).ToString();
            networkProxy.Password = MachineBasedRijndaelEncryptor.Decrypt(EncryptedDataHelper.ConvertFromNumbersString(GetNodeValue(proxyNode["Password"]).ToString()));

            foreach (XmlNode accountNode in root["Accounts"].ChildNodes)
            {
                string        AccountName = GetNodeValue(accountNode["AccountName"]).ToString();
                XEMailAccount account     = new XEMailAccount();
                account.AccountName = AccountName;

                try
                {
                    account.UseSameCredentialsToSend = bool.Parse(GetNodeValue(accountNode["UseSameCredentials"]).ToString());
                }
                catch
                {
                    account.UseSameCredentialsToSend = false;
                }

                XmlNode             incSrvrNode = accountNode["IncomingServer"];
                ServerConfiguration incSrvc     = new ServerConfiguration();
                try
                {
                    incSrvc.ServerEnabled = bool.Parse(GetNodeValue(incSrvrNode["ServerEnabled"]).ToString());
                }
                catch
                {
                    incSrvc.ServerEnabled = false;
                }
                try
                {
                    incSrvc.ServerProtocol = (ServerProtocol)int.Parse(GetNodeValue(incSrvrNode["ServerProtocol"]).ToString());
                }
                catch
                {
                    incSrvc.ServerProtocol = ServerProtocol.POP3;
                }
                incSrvc.ServerName = GetNodeValue(incSrvrNode["ServerName"]).ToString();
                incSrvc.ServerPort = int.Parse(GetNodeValue(incSrvrNode["ServerPort"]).ToString());
                incSrvc.Username   = GetNodeValue(incSrvrNode["UserName"]).ToString();
                try
                {
                    incSrvc.UserPassword = MachineBasedRijndaelEncryptor.Decrypt(EncryptedDataHelper.ConvertFromNumbersString(GetNodeValue(incSrvrNode["UserPassword"]).ToString()));
                }
                catch
                {
                    incSrvc.UserPassword = string.Empty;
                }

                try
                {
                    incSrvc.SslEnabled = bool.Parse(GetNodeValue(incSrvrNode["SslEnabled"]).ToString());
                }
                catch
                {
                    incSrvc.SslEnabled = false;
                }

                account.IncomingServer = incSrvc;

                XmlNode             outSrvrNode = accountNode["OutgoingServer"];
                ServerConfiguration outSrvc     = new ServerConfiguration();
                try
                {
                    outSrvc.ServerEnabled = bool.Parse(GetNodeValue(outSrvrNode["ServerEnabled"]).ToString());
                }
                catch
                {
                    outSrvc.ServerEnabled = false;
                }
                try
                {
                    outSrvc.ServerProtocol = (ServerProtocol)int.Parse(GetNodeValue(outSrvrNode["ServerProtocol"]).ToString());
                }
                catch
                {
                    outSrvc.ServerProtocol = ServerProtocol.SMTP;
                }
                outSrvc.ServerName = GetNodeValue(outSrvrNode["ServerName"]).ToString();
                outSrvc.ServerPort = int.Parse(GetNodeValue(outSrvrNode["ServerPort"]).ToString());
                outSrvc.Username   = GetNodeValue(outSrvrNode["UserName"]).ToString();

                try
                {
                    outSrvc.UserPassword = MachineBasedRijndaelEncryptor.Decrypt(EncryptedDataHelper.ConvertFromNumbersString(GetNodeValue(outSrvrNode["UserPassword"]).ToString()));
                }
                catch
                {
                    outSrvc.UserPassword = string.Empty;
                }

                try
                {
                    outSrvc.SslEnabled = bool.Parse(GetNodeValue(outSrvrNode["SslEnabled"]).ToString());
                }
                catch
                {
                    outSrvc.SslEnabled = false;
                }

                account.OutgoingServer = outSrvc;

                accounts.Add(AccountName, account);
            }
            this.NotifyConfigChange();
            return(true);
        }