Exemple #1
0
        bool SpanFunc(DelegateFunc func, Mail orgMail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
        {
            var  max    = _maxGet;
            var  s      = mlParamSpan.Start;
            var  e      = mlParamSpan.Start + max - 1;
            bool finish = false;

            while (!finish)
            {
                if (e >= mlParamSpan.End)
                {
                    e      = mlParamSpan.End;
                    finish = true;
                }
                var mail = func(s, e);
                mail.AddHeader("from", _mlAddr.Admin.ToString());
                mail.AddHeader("to", ReturnTo(orgMail, mlEnvelope));          //送信者をそのまま受信者にする
                mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now)); //日付
                if (!_mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail))
                {
                    return(false);
                }
                s = e + 1;
                e = s + max - 1;
            }
            return(true);
        }
Exemple #2
0
        //「制御アドレス」宛の処理
        void JobCtrl(MlEnvelope mlEnvelope, Mail mail, MlOneUser mlOneUser)
        {
            var adminLogin = false;//管理者としての認証が済んでいるかどうかのフラグ
            var log = new StringBuilder();//コマンドLog

            var mlCmd = new MlCmd(_logger, mail, mlOneUser);//コマンド解釈

            //var envelopeAdmin = mlEnvelope.ChangeFrom(mlAddr.Admin);
            var envelopeReturn = mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin);

            //コマンドの処理
            foreach (OneMlCmd oneCmd in mlCmd) {

                //ログ出力
                var memberStr = (oneCmd.MlOneUser == null) ? "not member" : oneCmd.MlOneUser.MailAddress.ToString();
                var prompt = adminLogin ? "#" : "$";
                var logStr = string.Format("{0}>{1} {2} [{3}]", prompt, oneCmd.CmdKind.ToString().ToLower(), oneCmd.ParamStr, memberStr);
                log.Append(logStr + "\r\n");
                _logger.Set(LogKind.Detail, null, 41, logStr);

                //メンバーでない場合
                if (mlOneUser == null) {
                    //subscribe/confirm の場合
                    if (oneCmd.CmdKind == MlCmdKind.Subscribe || oneCmd.CmdKind == MlCmdKind.Confirm){
                        if (_autoRegistration) {//自動登録が有効の場合、処理対象になる
                            goto ok;
                        }
                    }
                    //メンバー外からのリクエストの場合、Guide以外は受け付けない
                    if (oneCmd.CmdKind != MlCmdKind.Guide) {
                        //投稿者にDenyメールを送信
                        _mlDevivery.Deny(mail, mlEnvelope);
                        break;
                    }
                }
            ok:

                //権限確認 return "" エラーなし
                var errStr = "";
                switch (oneCmd.CmdKind) {
                    case MlCmdKind.Guide:
                        break;
                    case MlCmdKind.Exit:
                    case MlCmdKind.Quit:
                    case MlCmdKind.Members:
                    case MlCmdKind.Member:
                    case MlCmdKind.Summary:
                    case MlCmdKind.Subject:
                        break;
                    case MlCmdKind.Bye:
                    case MlCmdKind.Unsubscribe:
                        if (oneCmd.MlOneUser.IsManager) {
                            errStr = _kernel.IsJp() ? "管理者は、このコマンドを使用できません" : "cannot use a manager";
                        }
                        break;
                    case MlCmdKind.Subscribe:
                    case MlCmdKind.Confirm:
                        if (mlOneUser != null){
                            errStr = _kernel.IsJp() ? "このコマンドはメンバー以外しか使用できません" : "cannot use a memeber";
                        }
                        break;
                    case MlCmdKind.Password:
                    case MlCmdKind.Add:
                    case MlCmdKind.Del:
                        if (!oneCmd.MlOneUser.IsManager) {//管理者しか使用できない
                            errStr = _kernel.IsJp() ? "このコマンドは管理者しか使用できません" : "net administrator";
                        }
                        break;
                }

                if (errStr != "") {//権限に問題あり
                    _logger.Set(LogKind.Error, null, 47, errStr);
                    log.Append(errStr + "\r\n");

                    goto end;
                }
                //管理者ログイン確認
                if (!adminLogin) {
                    switch (oneCmd.CmdKind) {
                        case MlCmdKind.Del:
                        case MlCmdKind.Add:
                            _logger.Set(LogKind.Error, null, 50, "The certification is not over");
                            log.Append(errStr + "\r\n");
                            goto end;
                    }
                }

                //パラメータの処理
                MlParamSpan mlParamSpan = null;
                switch (oneCmd.CmdKind) {
                    case MlCmdKind.Get:
                    case MlCmdKind.Summary:
                    case MlCmdKind.Subject:
                        mlParamSpan = new MlParamSpan(oneCmd.ParamStr, _mlMailDb.Count());
                        if (mlParamSpan.Start == -1) {
                            errStr = _kernel.IsJp() ? "パラメータに矛盾がありあます" : "Appointment includes contradiction";
                            _logger.Set(LogKind.Error, null, 51, errStr);
                            log.Append(errStr + "\r\n");

                            //ここエラーメールを返すようにする
                            _mlDevivery.Error(mlEnvelope, string.Format("ERROR \"{0} {1}\"", oneCmd.CmdKind.ToString().ToUpper(),oneCmd.ParamStr));
                            goto end;
                        }
                        break;
                }

                switch (oneCmd.CmdKind) {
                    case MlCmdKind.Bye:
                    case MlCmdKind.Unsubscribe:
                        //メンバーの削除
                        using (var dat = _mlUserList.Del(mlEnvelope.From)){
                            if (dat == null){
                                errStr = _kernel.IsJp() ? "メンバーの削除に失敗しました" : "Failed in delete of a member";
                            } else{
                                UpdateMemberList(dat);//memberListの更新
                            }
                        }
                        break;
                    case MlCmdKind.Password:
                        if (mlOneUser.Psssword == oneCmd.ParamStr) {
                            adminLogin = true;//管理者として認証
                        } else {
                            errStr = _kernel.IsJp() ? "パスワードが違います" : "A password is different";
                        }
                        break;
                    case MlCmdKind.Del:
                        var tmp = oneCmd.ParamStr.Split(new char[] { ' ' }, 2);
                        var mailAddress = new MailAddress(tmp[0]);

                        //メンバーの削除
                        using (var dat = _mlUserList.Del(mailAddress)){
                            if (dat == null){
                                errStr = _kernel.IsJp() ? "メンバーの削除に失敗しました" : "Failed in addition of a member";
                            } else{
                                UpdateMemberList(dat);//memberListの更新
                            }
                        }
                        break;
                    case MlCmdKind.Add:
                        //メンバーの追加
                        var tmp2 = oneCmd.ParamStr.Split(new char[] { ' ' }, 2);
                        var mailAddress2 = new MailAddress(tmp2[0]);
                        var name = "USER";//表示名が指定されていない場合
                        if (tmp2.Length >= 2){
                            name = tmp2[1];
                        }
                        if (null != _mlUserList.Search(mailAddress2)) {
                            errStr = _kernel.IsJp() ? "既にメンバーが登録されています" : "There is already a member";
                        } else {
                            using(var dat = _mlUserList.Add(mailAddress2, name)){
                                if (dat == null){
                                    errStr = _kernel.IsJp() ? "メンバーの追加に失敗しました" : "Failed in addition of a member";
                                } else{
                                    UpdateMemberList(dat);//memberListの更新
                                }
                            }
                        }
                        break;
                    case MlCmdKind.Subscribe: {
                            var oneSubscribe = _mlSubscribeDb.Search(mlEnvelope.From);
                            if (oneSubscribe == null) {
                                oneSubscribe = _mlSubscribeDb.Add(mlEnvelope.From, oneCmd.ParamStr);//subscribeDbへの追加
                            }
                            var confirmStr = string.Format("confirm {0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                            _mlSender.Send(envelopeReturn, _mlCreator2.Confirm(confirmStr));
                            log.Length = 0;//ログメールの送信抑制
                        }
                        break;
                    case MlCmdKind.Confirm: {
                            var success = false;
                            var oneSubscribe = _mlSubscribeDb.Search(mlEnvelope.From);
                            if (oneSubscribe != null) {
                                //Ver6.0.1
                                var paramStr = string.Format("{0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                                if (oneCmd.ParamStr == paramStr){
                                    success = true; //認証成功
                                    _mlSubscribeDb.Del(mlEnvelope.From); //subscribeDbの削除

                                    if (_autoRegistration){
                                    //自動登録の場合
                                        //メンバーの追加
                                        using (var dat = _mlUserList.Add(mlEnvelope.From, oneSubscribe.Name)){
                                            if (dat != null){

                                                UpdateMemberList(dat); //memberListの更新

                                                //Welcodeメールの送信
                                                _mlSender.Send(envelopeReturn, _mlCreator2.Welcome());
                                                _logger.Set(LogKind.Detail, null, 46, mlEnvelope.From.ToString());

                                            } else{
                                                _logger.Set(LogKind.Detail, null, 48, mlEnvelope.From.ToString());
                                            }
                                        }
                                    } else{
                                        //管理者による登録
                                        //管理者宛にconfirmが有ったことを連絡する
                                        var mlenv = mlEnvelope.ChangeFrom(_mlAddr.Admin).ChangeTo(_mlAddr.Admin);
                                        var appendStr = string.Format("{0} {1}", mlEnvelope.From, oneSubscribe.Name);
                                        _mlSender.Send(mlenv, _mlCreator2.Append(appendStr));
                                    }

                                }

                                //confirm行の検索
                                //var confirmStr = string.Format("confirm {0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                                //var lines = Inet.GetLines(mail.GetBody());
                                //foreach (var line in lines) {
                                //    var str = mail.GetEncoding().GetString(line);

                                 //   if (str.IndexOf(confirmStr) != -1) {
            //                                        success = true;//認証成功
            //
            //                                        _mlSubscribeDb.Del(mlEnvelope.From);//subscribeDbの削除
            //
            //                                        if (_autoRegistration) {//自動登録の場合
            //                                            //メンバーの追加
            //                                            using (var dat = _mlUserList.Add(mlEnvelope.From, oneSubscribe.Name)) {
            //                                                if (dat != null){
            //
            //                                                    UpdateMemberList(dat);//memberListの更新
            //
            //                                                    //Welcodeメールの送信
            //                                                    _mlSender.Send(envelopeReturn, _mlCreator2.Welcome());
            //                                                    _logger.Set(LogKind.Detail, null, 46, mlEnvelope.From.ToString());
            //
            //                                                }
            //                                                else{
            //                                                    _logger.Set(LogKind.Detail, null, 48, mlEnvelope.From.ToString());
            //                                                }
            //                                            }
            //                                        } else {
            //                                            //管理者による登録
            //                                            //管理者宛にconfirmが有ったことを連絡する
            //                                            var mlenv = mlEnvelope.ChangeFrom(_mlAddr.Admin).ChangeTo(_mlAddr.Admin);
            //                                            var appendStr = string.Format("{0} {1}", mlEnvelope.From, oneSubscribe.Name);
            //                                            _mlSender.Send(mlenv, _mlCreator2.Append(appendStr));
            //
            //                                        }
            //                                    }
            //                                }
                            }
                            if (!success) { //認証失敗
                                _mlSender.Send(envelopeReturn, _mlCreator2.Guide());
                            }
                        }
                        break;
                    case MlCmdKind.Members:
                    case MlCmdKind.Member:
                        var sb = new StringBuilder();
                        foreach (var o in from MlOneUser o in _mlUserList where !o.IsManager select o){
                            sb.Append(string.Format("{0} {1}\r\n", o.MailAddress,o.Name));
                        }
                        _mlSender.Send(envelopeReturn, _mlCreator2.Member(sb.ToString()));
                        break;
                    case MlCmdKind.Get:
                        _mlDevivery.Get(mail, mlEnvelope, mlParamSpan);
                        break;
                    case MlCmdKind.Summary:
                    case MlCmdKind.Subject:
                        _mlDevivery.Summary(mail, mlEnvelope, mlParamSpan);
                        break;
                    case MlCmdKind.Guide:
                        _mlDevivery.Doc(MlDocKind.Guide, mail, mlEnvelope);
                        break;
                    case MlCmdKind.Help:
                        _mlDevivery.Doc(mlOneUser.IsManager ? MlDocKind.Admin : MlDocKind.Help, mail, mlEnvelope);
                        break;
                    case MlCmdKind.Exit:
                    case MlCmdKind.Quit:
                        goto end;//コマンド終了
                }
                if (errStr != ""){
                    //コマンド実行にエラー発生
                    log.Append(string.Format("error! {0}\r\n", errStr));
                    _logger.Set(LogKind.Error, null, 49, errStr);
                    goto end;
                }
                log.Append("success!\r\n");
            }
            end:
            ;
            //ログが必要なコマンド時だけログを送信する
            //if (log.Length != 0) {
            //    mlSender2.Send(envelopeAdmin,mlCreator2.Log(log.ToString()));
            //}
        }
Exemple #3
0
 public bool Get(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return(SpanFunc(Get1, mail, mlEnvelope, mlParamSpan));
 }
Exemple #4
0
 public bool Summary(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return(SpanFunc(Summary1, mail, mlEnvelope, mlParamSpan));
 }
Exemple #5
0
 public void CtorTest(string paramStr, int current, int start, int end)
 {
     var mlParamSpan = new MlParamSpan(paramStr,current);
     Assert.AreEqual(mlParamSpan.Start, start);
     Assert.AreEqual(mlParamSpan.End, end);
 }
Exemple #6
0
 bool SpanFunc(DelegateFunc func, Mail orgMail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     var max = _maxGet;
     var s = mlParamSpan.Start;
     var e = mlParamSpan.Start + max - 1;
     bool finish = false;
     while (!finish) {
         if (e >= mlParamSpan.End) {
             e = mlParamSpan.End;
             finish = true;
         }
         var mail = func(s, e);
         mail.AddHeader("from", _mlAddr.Admin.ToString());
         mail.AddHeader("to", ReturnTo(orgMail, mlEnvelope));//送信者をそのまま受信者にする
         mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now));//日付
         if (!_mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail)) {
             return false;
         }
         s = e + 1;
         e = s + max - 1;
     }
     return true;
 }
Exemple #7
0
 public bool Summary(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return SpanFunc(Summary1, mail, mlEnvelope, mlParamSpan);
 }
Exemple #8
0
 public bool Get(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return SpanFunc(Get1, mail, mlEnvelope, mlParamSpan);
 }
Exemple #9
0
        //「制御アドレス」宛の処理
        void JobCtrl(MlEnvelope mlEnvelope, Mail mail, MlOneUser mlOneUser)
        {
            var adminLogin = false;               //管理者としての認証が済んでいるかどうかのフラグ
            var log        = new StringBuilder(); //コマンドLog


            var mlCmd = new MlCmd(_logger, mail, mlOneUser);//コマンド解釈

            //var envelopeAdmin = mlEnvelope.ChangeFrom(mlAddr.Admin);
            var envelopeReturn = mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin);

            //コマンドの処理
            foreach (OneMlCmd oneCmd in mlCmd)
            {
                //ログ出力
                var memberStr = (oneCmd.MlOneUser == null) ? "not member" : oneCmd.MlOneUser.MailAddress.ToString();
                var prompt    = adminLogin ? "#" : "$";
                var logStr    = string.Format("{0}>{1} {2} [{3}]", prompt, oneCmd.CmdKind.ToString().ToLower(), oneCmd.ParamStr, memberStr);
                log.Append(logStr + "\r\n");
                _logger.Set(LogKind.Detail, null, 41, logStr);

                //メンバーでない場合
                if (mlOneUser == null)
                {
                    //subscribe/confirm の場合
                    if (oneCmd.CmdKind == MlCmdKind.Subscribe || oneCmd.CmdKind == MlCmdKind.Confirm)
                    {
                        if (_autoRegistration)  //自動登録が有効の場合、処理対象になる
                        {
                            goto ok;
                        }
                    }
                    //メンバー外からのリクエストの場合、Guide以外は受け付けない
                    if (oneCmd.CmdKind != MlCmdKind.Guide)
                    {
                        //投稿者にDenyメールを送信
                        _mlDevivery.Deny(mail, mlEnvelope);
                        break;
                    }
                }
ok:

                //権限確認 return "" エラーなし
                var errStr = "";
                switch (oneCmd.CmdKind)
                {
                case MlCmdKind.Guide:
                    break;

                case MlCmdKind.Exit:
                case MlCmdKind.Quit:
                case MlCmdKind.Members:
                case MlCmdKind.Member:
                case MlCmdKind.Summary:
                case MlCmdKind.Subject:
                    break;

                case MlCmdKind.Bye:
                case MlCmdKind.Unsubscribe:
                    if (oneCmd.MlOneUser.IsManager)
                    {
                        errStr = _kernel.IsJp() ? "管理者は、このコマンドを使用できません" : "cannot use a manager";
                    }
                    break;

                case MlCmdKind.Subscribe:
                case MlCmdKind.Confirm:
                    if (mlOneUser != null)
                    {
                        errStr = _kernel.IsJp() ? "このコマンドはメンバー以外しか使用できません" : "cannot use a memeber";
                    }
                    break;

                case MlCmdKind.Password:
                case MlCmdKind.Add:
                case MlCmdKind.Del:
                    if (!oneCmd.MlOneUser.IsManager)      //管理者しか使用できない
                    {
                        errStr = _kernel.IsJp() ? "このコマンドは管理者しか使用できません" : "net administrator";
                    }
                    break;
                }

                if (errStr != "")  //権限に問題あり
                {
                    _logger.Set(LogKind.Error, null, 47, errStr);
                    log.Append(errStr + "\r\n");


                    goto end;
                }
                //管理者ログイン確認
                if (!adminLogin)
                {
                    switch (oneCmd.CmdKind)
                    {
                    case MlCmdKind.Del:
                    case MlCmdKind.Add:
                        _logger.Set(LogKind.Error, null, 50, "The certification is not over");
                        log.Append(errStr + "\r\n");
                        goto end;
                    }
                }

                //パラメータの処理
                MlParamSpan mlParamSpan = null;
                switch (oneCmd.CmdKind)
                {
                case MlCmdKind.Get:
                case MlCmdKind.Summary:
                case MlCmdKind.Subject:
                    mlParamSpan = new MlParamSpan(oneCmd.ParamStr, _mlMailDb.Count());
                    if (mlParamSpan.Start == -1)
                    {
                        errStr = _kernel.IsJp() ? "パラメータに矛盾がありあます" : "Appointment includes contradiction";
                        _logger.Set(LogKind.Error, null, 51, errStr);
                        log.Append(errStr + "\r\n");

                        //ここエラーメールを返すようにする
                        _mlDevivery.Error(mlEnvelope, string.Format("ERROR \"{0} {1}\"", oneCmd.CmdKind.ToString().ToUpper(), oneCmd.ParamStr));
                        goto end;
                    }
                    break;
                }


                switch (oneCmd.CmdKind)
                {
                case MlCmdKind.Bye:
                case MlCmdKind.Unsubscribe:
                    //メンバーの削除
                    using (var dat = _mlUserList.Del(mlEnvelope.From)){
                        if (dat == null)
                        {
                            errStr = _kernel.IsJp() ? "メンバーの削除に失敗しました" : "Failed in delete of a member";
                        }
                        else
                        {
                            UpdateMemberList(dat);    //memberListの更新
                        }
                    }
                    break;

                case MlCmdKind.Password:
                    if (mlOneUser.Psssword == oneCmd.ParamStr)
                    {
                        adminLogin = true;    //管理者として認証
                    }
                    else
                    {
                        errStr = _kernel.IsJp() ? "パスワードが違います" : "A password is different";
                    }
                    break;

                case MlCmdKind.Del:
                    var tmp         = oneCmd.ParamStr.Split(new char[] { ' ' }, 2);
                    var mailAddress = new MailAddress(tmp[0]);

                    //メンバーの削除
                    using (var dat = _mlUserList.Del(mailAddress)){
                        if (dat == null)
                        {
                            errStr = _kernel.IsJp() ? "メンバーの削除に失敗しました" : "Failed in addition of a member";
                        }
                        else
                        {
                            UpdateMemberList(dat);    //memberListの更新
                        }
                    }
                    break;

                case MlCmdKind.Add:
                    //メンバーの追加
                    var tmp2         = oneCmd.ParamStr.Split(new char[] { ' ' }, 2);
                    var mailAddress2 = new MailAddress(tmp2[0]);
                    var name         = "USER";//表示名が指定されていない場合
                    if (tmp2.Length >= 2)
                    {
                        name = tmp2[1];
                    }
                    if (null != _mlUserList.Search(mailAddress2))
                    {
                        errStr = _kernel.IsJp() ? "既にメンバーが登録されています" : "There is already a member";
                    }
                    else
                    {
                        using (var dat = _mlUserList.Add(mailAddress2, name)){
                            if (dat == null)
                            {
                                errStr = _kernel.IsJp() ? "メンバーの追加に失敗しました" : "Failed in addition of a member";
                            }
                            else
                            {
                                UpdateMemberList(dat);    //memberListの更新
                            }
                        }
                    }
                    break;

                case MlCmdKind.Subscribe: {
                    var oneSubscribe = _mlSubscribeDb.Search(mlEnvelope.From);
                    if (oneSubscribe == null)
                    {
                        oneSubscribe = _mlSubscribeDb.Add(mlEnvelope.From, oneCmd.ParamStr);        //subscribeDbへの追加
                    }
                    var confirmStr = string.Format("confirm {0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                    _mlSender.Send(envelopeReturn, _mlCreator2.Confirm(confirmStr));
                    log.Length = 0;        //ログメールの送信抑制
                }
                break;

                case MlCmdKind.Confirm: {
                    var success      = false;
                    var oneSubscribe = _mlSubscribeDb.Search(mlEnvelope.From);
                    if (oneSubscribe != null)
                    {
                        //Ver6.0.1
                        var paramStr = string.Format("{0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                        if (oneCmd.ParamStr == paramStr)
                        {
                            success = true;                      //認証成功
                            _mlSubscribeDb.Del(mlEnvelope.From); //subscribeDbの削除

                            if (_autoRegistration)
                            {
                                //自動登録の場合
                                //メンバーの追加
                                using (var dat = _mlUserList.Add(mlEnvelope.From, oneSubscribe.Name)){
                                    if (dat != null)
                                    {
                                        UpdateMemberList(dat);         //memberListの更新

                                        //Welcodeメールの送信
                                        _mlSender.Send(envelopeReturn, _mlCreator2.Welcome());
                                        _logger.Set(LogKind.Detail, null, 46, mlEnvelope.From.ToString());
                                    }
                                    else
                                    {
                                        _logger.Set(LogKind.Detail, null, 48, mlEnvelope.From.ToString());
                                    }
                                }
                            }
                            else
                            {
                                //管理者による登録
                                //管理者宛にconfirmが有ったことを連絡する
                                var mlenv     = mlEnvelope.ChangeFrom(_mlAddr.Admin).ChangeTo(_mlAddr.Admin);
                                var appendStr = string.Format("{0} {1}", mlEnvelope.From, oneSubscribe.Name);
                                _mlSender.Send(mlenv, _mlCreator2.Append(appendStr));
                            }
                        }


                        //confirm行の検索
                        //var confirmStr = string.Format("confirm {0} {1}", oneSubscribe.ConfirmStr, oneSubscribe.Name);
                        //var lines = Inet.GetLines(mail.GetBody());
                        //foreach (var line in lines) {
                        //    var str = mail.GetEncoding().GetString(line);

                        //   if (str.IndexOf(confirmStr) != -1) {
//                                        success = true;//認証成功
//
//                                        _mlSubscribeDb.Del(mlEnvelope.From);//subscribeDbの削除
//
//                                        if (_autoRegistration) {//自動登録の場合
//                                            //メンバーの追加
//                                            using (var dat = _mlUserList.Add(mlEnvelope.From, oneSubscribe.Name)) {
//                                                if (dat != null){
//
//                                                    UpdateMemberList(dat);//memberListの更新
//
//                                                    //Welcodeメールの送信
//                                                    _mlSender.Send(envelopeReturn, _mlCreator2.Welcome());
//                                                    _logger.Set(LogKind.Detail, null, 46, mlEnvelope.From.ToString());
//
//                                                }
//                                                else{
//                                                    _logger.Set(LogKind.Detail, null, 48, mlEnvelope.From.ToString());
//                                                }
//                                            }
//                                        } else {
//                                            //管理者による登録
//                                            //管理者宛にconfirmが有ったことを連絡する
//                                            var mlenv = mlEnvelope.ChangeFrom(_mlAddr.Admin).ChangeTo(_mlAddr.Admin);
//                                            var appendStr = string.Format("{0} {1}", mlEnvelope.From, oneSubscribe.Name);
//                                            _mlSender.Send(mlenv, _mlCreator2.Append(appendStr));
//
//                                        }
//                                    }
//                                }
                    }
                    if (!success)           //認証失敗
                    {
                        _mlSender.Send(envelopeReturn, _mlCreator2.Guide());
                    }
                }
                break;

                case MlCmdKind.Members:
                case MlCmdKind.Member:
                    var sb = new StringBuilder();
                    foreach (var o in from MlOneUser o in _mlUserList where !o.IsManager select o)
                    {
                        sb.Append(string.Format("{0} {1}\r\n", o.MailAddress, o.Name));
                    }
                    _mlSender.Send(envelopeReturn, _mlCreator2.Member(sb.ToString()));
                    break;

                case MlCmdKind.Get:
                    _mlDevivery.Get(mail, mlEnvelope, mlParamSpan);
                    break;

                case MlCmdKind.Summary:
                case MlCmdKind.Subject:
                    _mlDevivery.Summary(mail, mlEnvelope, mlParamSpan);
                    break;

                case MlCmdKind.Guide:
                    _mlDevivery.Doc(MlDocKind.Guide, mail, mlEnvelope);
                    break;

                case MlCmdKind.Help:
                    _mlDevivery.Doc(mlOneUser.IsManager ? MlDocKind.Admin : MlDocKind.Help, mail, mlEnvelope);
                    break;

                case MlCmdKind.Exit:
                case MlCmdKind.Quit:
                    goto end;    //コマンド終了
                }
                if (errStr != "")
                {
                    //コマンド実行にエラー発生
                    log.Append(string.Format("error! {0}\r\n", errStr));
                    _logger.Set(LogKind.Error, null, 49, errStr);
                    goto end;
                }
                log.Append("success!\r\n");
            }
end:
            ;
            //ログが必要なコマンド時だけログを送信する
            //if (log.Length != 0) {
            //    mlSender2.Send(envelopeAdmin,mlCreator2.Log(log.ToString()));
            //}
        }