internal static void HandleEmailEntry(Mobile m, string email)
        {
            if (_AuthList.ContainsKey(m.Serial))
            {
                m.SendMessage("You already have a transaction awaiting authentication, please check your email.");
                return;
            }

            string key = CreateKey();

            ChangeRequest      request = new ChangeRequest(m, RequestType.Email, key, email);
            ChangeRequestTimer timer   = new ChangeRequestTimer(m);

            _AuthList.Add(m.Serial, request);
            _Timers.Add(m.Serial, timer);

            timer.Start();

            MailMessage mail = CreateMailMessage(m, request.RequestType, key, email);

            SendMailMessage(mail, m);
            m.SendMessage("A email has been sent to the supplied address. Please read the email for further instructions.");
        }
        public static void OnCommand_Auth(CommandEventArgs e)
        {
            Mobile m = e.Mobile;

            if (m == null)
            {
                return;
            }

            if (e.ArgString == null || e.ArgString == "")
            {
                m.SendMessage("Usage: [auth <key>");
                return;
            }

            if (!_AuthList.ContainsKey(m.Serial))
            {
                m.SendMessage("You do not have any account requests that need authorization");
                return;
            }

            ChangeRequest req = _AuthList[m.Serial];

            bool Auth = req.Authenticate(e.ArgString);

            if (Auth)
            {
                switch (req.RequestType)
                {
                case RequestType.ChangeEmail:
                {
                    Account acc = (Account)m.Account;

                    if (acc != null)
                    {
                        acc.SetTag("EMAIL", req.RequestString);
                        m.SendMessage("Your registered email address has been changed.");
                    }

                    break;
                }

                case RequestType.Email:
                {
                    Account acc = (Account)m.Account;

                    if (acc != null)
                    {
                        acc.AddTag("EMAIL", req.RequestString);
                        m.SendMessage("Your email address has been registered with this account.");
                    }

                    break;
                }

                case RequestType.Password:
                {
                    Account acc = (Account)m.Account;

                    if (acc != null)
                    {
                        acc.SetPassword(req.RequestString);
                        m.SendMessage("Your account password has been changed.");
                    }

                    break;
                }
                }

                if (_Timers.ContainsKey(m.Serial))
                {
                    ChangeRequestTimer timer = _Timers[m.Serial];
                    timer.Stop();

                    _Timers.Remove(m.Serial);
                    _AuthList.Remove(m.Serial);
                }
            }
            else
            {
                m.SendMessage("That key was invalid");
            }
        }