コード例 #1
0
ファイル: MlCmd.cs プロジェクト: jsakamoto/bjd5
 public MlCmd(Logger logger, Mail mail, MlOneUser mlOneUser)
 {
     //this.logger = logger;
     var lines = Inet.GetLines(mail.GetBody());
     foreach (var line in lines) {
         var str = mail.GetEncoding().GetString(line);
         str = Inet.TrimCrlf(str);
         //Ver5.6.4 前後の空白を除去する
         str = str.Trim();
         if (str == "")//空白行は無視する
             continue;
         if (!SetCmd(str, mlOneUser)) {
             logger.Set(LogKind.Error, null, 40, str);//解釈失敗
         }
     }
 }
コード例 #2
0
ファイル: MlCmd.cs プロジェクト: jsakamoto/bjd5
 bool SetCmd(string str, MlOneUser mlOneUser)
 {
     foreach (MlCmdKind cmdKind in Enum.GetValues(typeof(MlCmdKind))) {
         //Ver6.0.1 コマンドは行頭から始まっているもの以外は受け付けない
         var cmdStr = str.ToUpper().Trim();
     //                if (str.ToUpper().IndexOf(cmdKind.ToString().ToUpper()) >= 0) {
         if (cmdStr.IndexOf(cmdKind.ToString().ToUpper()) == 0) {
             var param = "";
             var tmp = str.Split(new[] { ' ' }, 2);
             if (tmp.Length == 2)
                 param = tmp[1];
             _ar.Add(new OneMlCmd(cmdKind, param, mlOneUser));
             return true;
         }
     }
     return false;
 }
コード例 #3
0
ファイル: Ml.cs プロジェクト: schifflee/bjd5
        //「投稿アドレス」宛の処理
        bool JobMain(MlEnvelope mlEnvelope, Mail mail, MlOneUser mlOneUser)
        {
            //投稿者がメンバー以外若しくは投稿が許可されていない場合
            if (mlOneUser == null || !mlOneUser.IsContributor)
            {
                _logger.Set(LogKind.Detail, null, 34, string.Format("from:{0}", mlEnvelope.From));

                //投稿者にDenyメールを送信
                _mlDevivery.Deny(mail, mlEnvelope);

                //メールを添付して管理者へ
                var subject = string.Format("NOT MEMBER article from {0} ({1} ML)", mlEnvelope.From, _mlAddr.Name);
                return(_mlDevivery.AttachToAmdin(mail, subject, mlEnvelope));
            }
            //投稿者が有効な場合
            _logger.Set(LogKind.Detail, null, 33, string.Format("from:{0}", mlEnvelope.From));
            //各メンバーへの配信
            return(_mlDevivery.Post(mail, mlEnvelope));
        }
コード例 #4
0
        bool SetCmd(string str, MlOneUser mlOneUser)
        {
            foreach (MlCmdKind cmdKind in Enum.GetValues(typeof(MlCmdKind)))
            {
                //Ver6.0.1 コマンドは行頭から始まっているもの以外は受け付けない
                var cmdStr = str.ToUpper().Trim();
//                if (str.ToUpper().IndexOf(cmdKind.ToString().ToUpper()) >= 0) {
                if (cmdStr.IndexOf(cmdKind.ToString().ToUpper()) == 0)
                {
                    var param = "";
                    var tmp   = str.Split(new[] { ' ' }, 2);
                    if (tmp.Length == 2)
                    {
                        param = tmp[1];
                    }
                    _ar.Add(new OneMlCmd(cmdKind, param, mlOneUser));
                    return(true);
                }
            }
            return(false);
        }
コード例 #5
0
        public MlCmd(Logger logger, Mail mail, MlOneUser mlOneUser)
        {
            //this.logger = logger;
            var lines = Inet.GetLines(mail.GetBody());

            foreach (var line in lines)
            {
                var str = mail.GetEncoding().GetString(line);
                str = Inet.TrimCrlf(str);
                //Ver5.6.4 前後の空白を除去する
                str = str.Trim();
                if (str == "")//空白行は無視する
                {
                    continue;
                }
                if (!SetCmd(str, mlOneUser))
                {
                    logger.Set(LogKind.Error, null, 40, str);//解釈失敗
                }
            }
        }
コード例 #6
0
ファイル: Ml.cs プロジェクト: jsakamoto/bjd5
        //「投稿アドレス」宛の処理
        bool JobMain(MlEnvelope mlEnvelope, Mail mail, MlOneUser mlOneUser)
        {
            //投稿者がメンバー以外若しくは投稿が許可されていない場合
            if (mlOneUser == null || !mlOneUser.IsContributor) {
                _logger.Set(LogKind.Detail, null, 34, string.Format("from:{0}", mlEnvelope.From));

                //投稿者にDenyメールを送信
                _mlDevivery.Deny(mail, mlEnvelope);

                //メールを添付して管理者へ
                var subject = string.Format("NOT MEMBER article from {0} ({1} ML)", mlEnvelope.From, _mlAddr.Name);
                return _mlDevivery.AttachToAmdin(mail, subject, mlEnvelope);
            }
            //投稿者が有効な場合
            _logger.Set(LogKind.Detail, null, 33, string.Format("from:{0}", mlEnvelope.From));
            //各メンバーへの配信
            return _mlDevivery.Post(mail, mlEnvelope);
        }
コード例 #7
0
ファイル: Ml.cs プロジェクト: jsakamoto/bjd5
        //「制御アドレス」宛の処理
        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()));
            //}
        }
コード例 #8
0
ファイル: MlCmdTest.cs プロジェクト: jsakamoto/bjd5
 public void SetUp()
 {
     _user1 = new MlOneUser(true, "USER1", new MailAddress("*****@*****.**"), false, true, true, "password");
 }
コード例 #9
0
ファイル: Ml.cs プロジェクト: schifflee/bjd5
        //「制御アドレス」宛の処理
        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()));
            //}
        }