/// <summary>
		/// Deletes specified mail list.
		/// </summary>
		/// <param name="listName">Mail list name.</param>
		public void DeleteList(string listName)
		{
			try
			{
				svcMailListAdmin svcLists = new svcMailListAdmin();
				PrepareProxy(svcLists);

				string account = GetAccountName(listName);
				string domain = GetDomainName(listName);

				GenericResult Result = svcLists.DeleteList(
					AdminUsername,
					AdminPassword,
					domain,
					listName
				);

				if (!Result.Result)
					throw new Exception(Result.Message);
			}
			catch (Exception ex)
			{
				throw new Exception("Couldn't delete a mail list.", ex);
			}
		}
		public void UpdateList(MailList list)
		{
			try
			{
				string domain = GetDomainName(list.Name);
				string account = GetAccountName(list.Name);

				svcMailListAdmin lists = new svcMailListAdmin();
				PrepareProxy(lists);

				List<string> settings = new List<string>();
				settings.Add(string.Concat("description=", list.Description));
				settings.Add(string.Concat("disabled=", !list.Enabled));
				settings.Add(string.Concat("moderator=", list.ModeratorAddress));
				settings.Add(string.Concat("password="******"requirepassword="******"whocanpost=anyone");
						break;
					case PostingMode.MembersCanPost:
						settings.Add("whocanpost=subscribersonly");
						break;
					case PostingMode.ModeratorCanPost:
						settings.Add("whocanpost=moderator");
						break;
				}

				settings.Add(string.Concat("prependsubject=", list.EnableSubjectPrefix));
				settings.Add(string.Concat("maxmessagesize=", list.MaxMessageSize));
				settings.Add(string.Concat("maxrecipients=", list.MaxRecipientsPerMessage));
				settings.Add(string.Concat("subject=", list.SubjectPrefix));

				switch (list.ReplyToMode)
				{
					case ReplyTo.RepliesToList:
						settings.Add("replytolist=true");
						break;
					case ReplyTo.RepliesToSender:
						settings.Add("replytolist=false");
						break;
				}

				settings.Add(string.Concat("listtoaddress=", list.ListToAddress));
				settings.Add(string.Concat("listfromaddress=", list.ListFromAddress));
				settings.Add(string.Concat("listreplytoaddress=", list.ListReplyToAddress));
				settings.Add(string.Concat("digestmode=", list.DigestMode));
				settings.Add(string.Concat("sendsubscribe=", list.SendSubscribe));
				settings.Add(string.Concat("sendunsubscribe=", list.SendUnsubscribe));
				settings.Add(string.Concat("allowunsubscribe=", list.AllowUnsubscribe));
				settings.Add(string.Concat("disablelistcommand=", list.DisableListcommand));
				settings.Add(string.Concat("disablesubscribecommand=", list.DisableSubscribecommand));

				GenericResult result = lists.SetRequestedListSettings(AdminUsername, AdminPassword,
																	  domain,
																	  account,
																	  settings.ToArray()
					);

				if (!result.Result)
					throw new Exception(result.Message);

				SubscriberListResult subsribersResult = lists.GetSubscriberList(AdminUsername, AdminPassword, domain, account);

				foreach (string member in subsribersResult.Subscribers)
				{
					GenericResult memberResult = lists.RemoveSubscriber(AdminUsername, AdminPassword, domain, account, member);
					if (!memberResult.Result)
					{
						throw new Exception(memberResult.Message);
					}

				}


				//if (list.Members.Length > 0)
				//{
				result = lists.SetSubscriberList(AdminUsername, AdminPassword,
												 domain,
												 account,
												 list.Members
					);

				if (!result.Result)
					throw new Exception(result.Message);
				//}
			}
			catch (Exception ex)
			{
				throw new Exception("Couldn't update mail list.", ex);
			}

		}
		public MailList[] GetLists(string domainName)
		{
			try
			{
				svcMailListAdmin svcLists = new svcMailListAdmin();
				PrepareProxy(svcLists);

				MailingListResult mResult = svcLists.GetMailingListsByDomain(
					AdminUsername,
					AdminPassword,
					domainName
				);

				if (!mResult.Result)
					throw new Exception(mResult.Message);

				List<MailList> mailLists = new List<MailList>();
				foreach (string listName in mResult.listNames)
				{
					SettingsRequestResult sResult = svcLists.GetRequestedListSettings(
						AdminUsername,
						AdminPassword,
						domainName,
						listName,
						smListSettings
					);

					if (!sResult.Result)
						throw new Exception(sResult.Message);

					SubscriberListResult rResult = svcLists.GetSubscriberList(
						AdminUsername,
						AdminPassword,
						domainName,
						listName
					);

					if (!rResult.Result)
						throw new Exception(rResult.Message);

					MailList list = new MailList();
					list.Name = string.Concat(listName, "@", domainName);
					SetMailListSettings(list, sResult.settingValues);
					SetMailListMembers(list, rResult.Subscribers);
					mailLists.Add(list);
				}

				return mailLists.ToArray();
			}
			catch (Exception ex)
			{
				throw new Exception("Couldn't obtain domain mail lists.", ex);
			}
		}
		public MailList GetList(string listName)
		{
			try
			{
				string domain = GetDomainName(listName);
				string account = GetAccountName(listName);

				svcMailListAdmin svcLists = new svcMailListAdmin();
				PrepareProxy(svcLists);

				SettingsRequestResult sResult = svcLists.GetRequestedListSettings(
					AdminUsername,
					AdminPassword,
					domain,
					account,
					smListSettings
				);

				if (!sResult.Result)
					throw new Exception(sResult.Message);

				SubscriberListResult mResult = svcLists.GetSubscriberList(
					AdminUsername,
					AdminPassword,
					domain,
					account
				);

				if (!mResult.Result)
					throw new Exception(mResult.Message);

				MailList list = new MailList();
				list.Name = listName;

				SetMailListSettings(list, sResult.settingValues);
				SetMailListMembers(list, mResult.Subscribers);

				return list;
			}
			catch (Exception ex)
			{
				throw new Exception("Couldn't obtain mail list.", ex);
			}
		}
		public bool ListExists(string listName)
		{
			bool exists = false;

			try
			{
				string domain = GetDomainName(listName);
				string account = GetAccountName(listName);

				svcMailListAdmin lists = new svcMailListAdmin();
				PrepareProxy(lists);

				MailingListResult result = lists.GetMailingListsByDomain(AdminUsername, AdminPassword, domain);

				if (result.Result)
				{
					foreach (string member in result.listNames)
					{
						if (string.Compare(member, listName, true) == 0)
						{
							exists = true;
							break;
						}
					}
				}
			}
			catch (Exception ex)
			{
				throw new Exception("Couldn't obtain mail list.", ex);
			}

			return exists;
		}