Пример #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);
        }
Пример #2
0
        public bool Send(MlEnvelope mlEnvelope, Mail orgMail)
        {
            var mail = orgMail.CreateClone();//ヘッダを変更するためにテンポラリを作成する

            //MlCreatorで追加されない FromとToをここでセットする
            //var from = mail.GetHeader("from");
            //if (from==null || from.IndexOf(mlEnvelope.From.ToString()) == -1) {
            //    mail.ConvertHeader("from", mlEnvelope.From.ToString());
            //}
            //mail.ConvertHeader("from",mlEnvelope.From.ToString());
            //var to = mail.GetHeader("to");
            //if (to == null) {
            //    mail.AddHeader("to", mlEnvelope.To.ToString());
            //}

            if (mailSave.Save(mlEnvelope.From, mlEnvelope.To, mail, mlEnvelope.Host, mlEnvelope.Addr))
            {
                logger.Set(LogKind.Detail, null, 38, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
                return(true);
            }
            else
            {
                logger.Set(LogKind.Error, null, 39, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
                return(true);
            }
        }
Пример #3
0
        //元メールを添付して管理者へ送る
        public bool AttachToAmdin(Mail orgMail, string subject, MlEnvelope mlEnvelope)
        {
            //メール生成
            var mail = new Mail();

            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了)
            mail.AddHeader("subject", subject);
            mail.AppendLine(Encoding.ASCII.GetBytes(subject + "\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("Original mail as follows:\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));
            //オリジナルメールの添付
            var body = Inet.GetLines(orgMail.GetBytes());

            foreach (var buf in body)
            {
                mail.AppendLine(Encoding.ASCII.GetBytes("  "));//行頭に空白を追加
                mail.AppendLine(buf);
            }

            //宛先設定 from<->To from = mailDaemon
            mail.ConvertHeader("from", _mlAddr.Admin.ToString());
            //配送
            return(SendAllAdmin(mlEnvelope.ChangeFrom(_mlAddr.Admin), mail));
        }
Пример #4
0
        //エラーメールを返信する
        public bool Error(MlEnvelope mlEnvelope, string subject)
        {
            var mail = Create(ContentTyep.Ascii, subject, "");

            mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now));//日付
            return(_mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail));
        }
Пример #5
0
        //折り返しメールのためのToヘッダの作成
        string ReturnTo(Mail mail, MlEnvelope mlEnvelope)
        {
            //元メールのFromヘッダを取得する
            //無い場合は、mlEmvelope.Fromからセットする
            var to = mail.GetHeader("from") ?? mlEnvelope.From.ToString();

            return(to);
        }
Пример #6
0
        //各種のドキュメントをname-admin@domainから送信者へ送る
        public bool Doc(MlDocKind mlDocKind, Mail orgMail, MlEnvelope mlEnvelope)
        {
            var mail = Fixed(mlDocKind);

            mail.ConvertHeader("from", _mlAddr.Admin.ToString());
            mail.ConvertHeader("to", ReturnTo(orgMail, mlEnvelope));      //送信者をそのまま受信者にする
            mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now)); //日付
            return(_mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail));
        }
Пример #7
0
 //当該メーリングリストに処理を分岐する
 public bool Job(MlEnvelope mlEnvelope,Mail mail)
 {
     foreach(var ml in _ar) {
         if (ml.IsUser(mlEnvelope.To)) {
             return ml.Job(mlEnvelope,mail);
         }
     }
     return false;
 }
Пример #8
0
 //当該メーリングリストに処理を分岐する
 public bool Job(MlEnvelope mlEnvelope, Mail mail)
 {
     foreach (var ml in _ar)
     {
         if (ml.IsUser(mlEnvelope.To))
         {
             return(ml.Job(mlEnvelope, mail));
         }
     }
     return(false);
 }
Пример #9
0
        public bool Send(MlEnvelope mlEnvelope, Mail orgMail)
        {
            var mail = orgMail.CreateClone();//�w�b�_��ύX���邽�߂Ƀe���|������쐬����

            if (_mailSave.Save(mlEnvelope.From, mlEnvelope.To, mail, mlEnvelope.Host, mlEnvelope.Addr)) {
                _logger.Set(LogKind.Detail, null, 38, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
                return true;
            }
            _logger.Set(LogKind.Error, null, 39, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
            return true;
        }
Пример #10
0
        public bool Send(MlEnvelope mlEnvelope, Mail orgMail)
        {
            var mail = orgMail.CreateClone();//�w�b�_��ύX���邽�߂Ƀe���|������쐬����

            if (_mailSave.Save(mlEnvelope.From, mlEnvelope.To, mail, mlEnvelope.Host, mlEnvelope.Addr))
            {
                _logger.Set(LogKind.Detail, null, 38, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
                return(true);
            }
            _logger.Set(LogKind.Error, null, 39, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
            return(true);
        }
Пример #11
0
        public TsMail(string from, string to, string bodyStr)
        {
            Mail = new Mail();
            Mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了)
            var body = Encoding.ASCII.GetBytes(bodyStr);
            Mail.AppendLine(body);
            Mail.AddHeader("from", from);
            Mail.AddHeader("to", to);

            const string host = "TEST";
            var addr = new Ip("10.0.0.1");
            MlEnvelope = new MlEnvelope(CreateMailAddress(from), CreateMailAddress(to), host, addr);
        }
Пример #12
0
        public TestMail(string from, string to, string bodyStr)
        {
            this.Mail = new Mail(null);
            Mail.Init(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了)
            var body = Encoding.ASCII.GetBytes(bodyStr);
            Mail.Init(body);
            Mail.AddHeader("from", from);
            Mail.AddHeader("to", to);

            var host = "TEST";
            var addr = new Ip("10.0.0.1");
            MlEnvelope = new MlEnvelope(CreateMailAddress(from), CreateMailAddress(to), host, addr);
        }
Пример #13
0
        //メンバー以外は投稿できません
        public bool Deny(Mail orgMail, MlEnvelope mlEnvelope)
        {
            //メール生成
            var subject = string.Format("You are not member ({0} ML)", _mlAddr.Name);
            var bodyStr = _mlAddr.Conv(_docs[(int)MlDocKind.Deny]);
            var mail = Create(ContentTyep.Sjis, subject, bodyStr);

            //宛先設定 from<->To from = mailDaemon
            mail.ConvertHeader("from", _mlAddr.Admin.ToString());
            mail.ConvertHeader("to", ReturnTo(orgMail, mlEnvelope));//送信者をそのまま受信者にする
            mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now));//日付
            //配送
            return _mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail);
        }
Пример #14
0
        //メンバー以外は投稿できません
        public bool Deny(Mail orgMail, MlEnvelope mlEnvelope)
        {
            //メール生成
            var subject = string.Format("You are not member ({0} ML)", _mlAddr.Name);
            var bodyStr = _mlAddr.Conv(_docs[(int)MlDocKind.Deny]);
            var mail    = Create(ContentTyep.Sjis, subject, bodyStr);

            //宛先設定 from<->To from = mailDaemon
            mail.ConvertHeader("from", _mlAddr.Admin.ToString());
            mail.ConvertHeader("to", ReturnTo(orgMail, mlEnvelope));      //送信者をそのまま受信者にする
            mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now)); //日付
            //配送
            return(_mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail));
        }
Пример #15
0
        //メール保存(MLとそれ以外を振り分ける)
        public bool MailSave2(MailAddress from, MailAddress to, Mail mail, string host, Ip addr)
        {
//#if ML_SERVER
            if (_mlList.IsUser(to))
            {
                var mlEnvelope = new MlEnvelope(from, to, host, addr);
                return(_mlList.Job(mlEnvelope, mail));
            }
            else
            {
//#endif
                return(_mailSave.Save(from, to, mail, host, addr));
//#if ML_SERVER
            }
//#endif
        }
Пример #16
0
 //管理者すべてに送信する
 public bool SendAllAdmin(MlEnvelope mlEnvelope, Mail mail)
 {
     foreach (MlOneUser to in _mlUserList)
     {
         if (!to.Enable || !to.IsManager)
         {
             continue;                                      //管理者アドレス
         }
         var mlenv   = mlEnvelope.ChangeTo(to.MailAddress); //受信者を管理者に変更する
         var tmpMail = mail.CreateClone();
         tmpMail.ConvertHeader("to", to.MailAddress.ToString());
         if (!_mlSender.Send(mlenv, tmpMail))
         {
             return(false);//失敗した場合は、全宛先に送信されない
         }
     }
     return(true);
 }
Пример #17
0
        //「投稿アドレス」宛の処理
        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));
        }
Пример #18
0
        //MLメイン処理(投稿者の有効無効・管理者アドレス・制御アドレス宛の処理も、この中で分岐して行う)
        public bool Job(MlEnvelope mlEnvelope, Mail mail)
        {
            //メンバーの検索
            var mlOneUser = _mlUserList.Search(mlEnvelope.From);

            switch (_mlAddr.GetKind(mlEnvelope.To))
            {
            case MlAddrKind.Post:    //「投稿アドレス」宛の処理
                return(JobMain(mlEnvelope, mail, mlOneUser));

            case MlAddrKind.Ctrl:                                   //「制御アドレス」宛の処理
                JobCtrl(mlEnvelope, mail, mlOneUser);
                return(true);                                       //MailBoxの処置としては成功

            case MlAddrKind.Admin:                                  //「管理者アドレス」宛の処理
                return(_mlDevivery.SendAllAdmin(mlEnvelope, mail)); //全管理者への送信
            }
            return(false);                                          //無効アドレス
        }
Пример #19
0
        //投稿
        public bool Post(Mail mail, MlEnvelope mlEnvelope)
        {
            //var no = mlDb.IncNo(mlAddr.Name);//インクリメントした記事番号の取得
            var incNo = _mlDb.Count() + 1;//インクリメントした記事番号の取得

            //記事メールの編集
            //Subject:の変更
            mail.ConvertHeader("subject", _mlSubject.Get(mail.GetHeader("subject"), incNo));
            //Reply-To:の追加 
            mail.ConvertHeader("Reply-To", string.Format("\"{0}\"<{1}>", _mlAddr.Name, _mlAddr.Post));
            //List-Id:の追加 
            mail.ConvertHeader("List-Id", string.Format("{0}.{1}", _mlAddr.Name, _mlAddr.DomainList[0]));
            //List-Software:の追加 
            mail.ConvertHeader("List-Software", string.Format("{0}", Define.ApplicationName()));
            //List-Post:の追加 
            mail.ConvertHeader("List-Post", string.Format("<mailto:{0}>", _mlAddr.Post));
            //List-Owner:の追加 
            mail.ConvertHeader("List-Owner", string.Format("<mailto:{0}>", _mlAddr.Admin));
            //List-Help:の追加 
            mail.ConvertHeader("List-Help", string.Format("<mailto:{0}?body=help>", _mlAddr.Ctrl));
            //List-Unsubscribe:の追加 
            mail.ConvertHeader("List-Unsubscribe", string.Format("<mailto:{0}?body=unsubscribe>", _mlAddr.Ctrl));

            //ライブラリへの保存
            _mlDb.Save(mail);

            //各メンバーへの配信
            foreach (MlOneUser to in _mlUserList)
            {
                if (to.Enable && to.IsReader)  //「配信する」のみが対象となる
                {
                    if (!_mlSender.Send(mlEnvelope.ChangeTo(to.MailAddress), mail))
                    {
                        //配信に失敗したメールを管理者に転送する
                        var subject = string.Format("DELIVERY ERROR article to {0} ({1} ML)", to, _mlAddr.Name);
                        return(AttachToAmdin(mail, subject, mlEnvelope));
                    }
                }
            }
            return(true);
        }
Пример #20
0
        //元メールを添付して管理者へ送る
        public bool AttachToAmdin(Mail orgMail, string subject, MlEnvelope mlEnvelope)
        {
            //メール生成
            var mail = new Mail();
            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了)
            mail.AddHeader("subject", subject);
            mail.AppendLine(Encoding.ASCII.GetBytes(subject + "\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("Original mail as follows:\r\n"));
            mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));
            //オリジナルメールの添付
            var body = Inet.GetLines(orgMail.GetBytes());
            foreach (var buf in body) {
                mail.AppendLine(Encoding.ASCII.GetBytes("  "));//行頭に空白を追加
                mail.AppendLine(buf);
            }

            //宛先設定 from<->To from = mailDaemon
            mail.ConvertHeader("from", _mlAddr.Admin.ToString());
            //配送
            return SendAllAdmin(mlEnvelope.ChangeFrom(_mlAddr.Admin), mail);
        }
Пример #21
0
        public bool Send(MlEnvelope mlEnvelope,Mail orgMail)
        {
            var mail = orgMail.CreateClone();//ヘッダを変更するためにテンポラリを作成する

            //MlCreatorで追加されない FromとToをここでセットする
            //var from = mail.GetHeader("from");
            //if (from==null || from.IndexOf(mlEnvelope.From.ToString()) == -1) {
            //    mail.ConvertHeader("from", mlEnvelope.From.ToString());
            //}
            //mail.ConvertHeader("from",mlEnvelope.From.ToString());
            //var to = mail.GetHeader("to");
            //if (to == null) {
            //    mail.AddHeader("to", mlEnvelope.To.ToString());
            //}

            if (mailSave.Save(mlEnvelope.From, mlEnvelope.To, mail, mlEnvelope.Host, mlEnvelope.Addr)) {
                logger.Set(LogKind.Detail, null, 38, string.Format("From:{0} To:{1}",mlEnvelope.From,mlEnvelope.To));
                return true;
            } else {
                logger.Set(LogKind.Error, null, 39, string.Format("From:{0} To:{1}", mlEnvelope.From, mlEnvelope.To));
                return true;
            }
        }
Пример #22
0
 public bool Get(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return SpanFunc(Get1, mail, mlEnvelope, mlParamSpan);
 }
Пример #23
0
        //MLメイン処理(投稿者の有効無効・管理者アドレス・制御アドレス宛の処理も、この中で分岐して行う)
        public bool Job(MlEnvelope mlEnvelope, Mail mail)
        {
            //メンバーの検索
            var mlOneUser = _mlUserList.Search(mlEnvelope.From);

            switch (_mlAddr.GetKind(mlEnvelope.To)) {
                case MlAddrKind.Post://「投稿アドレス」宛の処理
                    return JobMain(mlEnvelope, mail, mlOneUser);
                case MlAddrKind.Ctrl://「制御アドレス」宛の処理
                    JobCtrl(mlEnvelope, mail, mlOneUser);
                    return true;//MailBoxの処置としては成功
                case MlAddrKind.Admin://「管理者アドレス」宛の処理
                    return _mlDevivery.SendAllAdmin(mlEnvelope, mail);//全管理者への送信
            }
            return false;//無効アドレス
        }
Пример #24
0
        //「投稿アドレス」宛の処理
        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);
        }
Пример #25
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()));
            //}
        }
Пример #26
0
        //投稿
        public bool Post(Mail mail, MlEnvelope mlEnvelope)
        {
            //var no = mlDb.IncNo(mlAddr.Name);//インクリメントした記事番号の取得
            var incNo = _mlDb.Count() + 1;//インクリメントした記事番号の取得

            //記事メールの編集
            //Subject:の変更
            mail.ConvertHeader("subject", _mlSubject.Get(mail.GetHeader("subject"), incNo));
            //Reply-To:の追加
            mail.ConvertHeader("Reply-To", string.Format("\"{0}\"<{1}>", _mlAddr.Name, _mlAddr.Post));
            //List-Id:の追加
            mail.ConvertHeader("List-Id", string.Format("{0}.{1}", _mlAddr.Name, _mlAddr.DomainList[0]));
            //List-Software:の追加
            mail.ConvertHeader("List-Software", string.Format("{0}", Define.ApplicationName()));
            //List-Post:の追加
            mail.ConvertHeader("List-Post", string.Format("<mailto:{0}>", _mlAddr.Post));
            //List-Owner:の追加
            mail.ConvertHeader("List-Owner", string.Format("<mailto:{0}>", _mlAddr.Admin));
            //List-Help:の追加
            mail.ConvertHeader("List-Help", string.Format("<mailto:{0}?body=help>", _mlAddr.Ctrl));
            //List-Unsubscribe:の追加
            mail.ConvertHeader("List-Unsubscribe", string.Format("<mailto:{0}?body=unsubscribe>", _mlAddr.Ctrl));

            //ライブラリへの保存
            _mlDb.Save(mail);

            //各メンバーへの配信
            foreach (MlOneUser to in _mlUserList) {
                if (to.Enable && to.IsReader) {//「配信する」のみが対象となる
                    if (!_mlSender.Send(mlEnvelope.ChangeTo(to.MailAddress), mail)) {
                        //配信に失敗したメールを管理者に転送する
                        var subject = string.Format("DELIVERY ERROR article to {0} ({1} ML)", to, _mlAddr.Name);
                        return AttachToAmdin(mail, subject, mlEnvelope);
                    }
                }
            }
            return true;
        }
Пример #27
0
 //各種のドキュメントをname-admin@domainから送信者へ送る
 public bool Doc(MlDocKind mlDocKind, Mail orgMail, MlEnvelope mlEnvelope)
 {
     var mail = Fixed(mlDocKind);
     mail.ConvertHeader("from", _mlAddr.Admin.ToString());
     mail.ConvertHeader("to", ReturnTo(orgMail, mlEnvelope));//送信者をそのまま受信者にする
     mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now));//日付
     return _mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail);
 }
Пример #28
0
 public bool Summary(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return(SpanFunc(Summary1, mail, mlEnvelope, mlParamSpan));
 }
Пример #29
0
 public bool Get(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return(SpanFunc(Get1, mail, mlEnvelope, mlParamSpan));
 }
Пример #30
0
 public bool Summary(Mail mail, MlEnvelope mlEnvelope, MlParamSpan mlParamSpan)
 {
     return SpanFunc(Summary1, mail, mlEnvelope, mlParamSpan);
 }
Пример #31
0
 //折り返しメールのためのToヘッダの作成
 string ReturnTo(Mail mail, MlEnvelope mlEnvelope)
 {
     //元メールのFromヘッダを取得する
     //無い場合は、mlEmvelope.Fromからセットする
     var to = mail.GetHeader("from") ?? mlEnvelope.From.ToString();
     return to;
 }
Пример #32
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;
 }
Пример #33
0
 //エラーメールを返信する
 public bool Error(MlEnvelope mlEnvelope,string subject)
 {
     var mail = Create(ContentTyep.Ascii, subject,"");
     mail.ConvertHeader("date", Util.LocalTime2Str(DateTime.Now));//日付
     return _mlSender.Send(mlEnvelope.Swap().ChangeFrom(_mlAddr.Admin), mail);
 }
Пример #34
0
 //管理者すべてに送信する
 public bool SendAllAdmin(MlEnvelope mlEnvelope, Mail mail)
 {
     foreach (MlOneUser to in _mlUserList) {
         if (!to.Enable || !to.IsManager)
             continue; //管理者アドレス
         var mlenv = mlEnvelope.ChangeTo(to.MailAddress);//受信者を管理者に変更する
         var tmpMail = mail.CreateClone();
         tmpMail.ConvertHeader("to", to.MailAddress.ToString());
         if (!_mlSender.Send(mlenv, tmpMail)) {
             return false;//失敗した場合は、全宛先に送信されない
         }
     }
     return true;
 }
Пример #35
0
 //メール保存(MLとそれ以外を振り分ける)
 public bool MailSave2(MailAddress from, MailAddress to, Mail mail, string host, Ip addr)
 {
     //#if ML_SERVER
     if (_mlList.IsUser(to)) {
         var mlEnvelope = new MlEnvelope(from, to, host, addr);
         return _mlList.Job(mlEnvelope,mail);
     } else {
     //#endif
     return _mailSave.Save(from, to, mail, host, addr);
     //#if ML_SERVER
     }
     //#endif
 }
Пример #36
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()));
            //}
        }