コード例 #1
0
        /// <summary>
        /// 构造验证邮件链接
        /// </summary>
        /// <param name="step"></param>
        /// <returns></returns>
        private string buldValidateEmail(MessageStep step, string email, string code, out int expiredTime)
        {
            string url = LoadSettingsByKeys(Settings.ValidateEmailLink).Value;
            //var user = DataOperateBasic<Base_User>.Get().GetModel(receiveId);
            string sourceData = step.ToString() + "#" + email + "#" + code;
            //处理时解密校验
            string encryptData = DesTool.DesEncrypt(sourceData);

            expiredTime = 0;
            //构造链接
            switch (step)
            {
            case MessageStep.RegisterActive:
                expiredTime = LoadSettingsByKeys(Settings.RegisterActiveUrlValidity).Value.ToInt32Req() * 60;
                break;

            case MessageStep.CertificationValid:
                expiredTime = LoadSettingsByKeys(Settings.CertificationValidTime).Value.ToInt32Req();
                break;

            case MessageStep.FindPwd:
                expiredTime = LoadSettingsByKeys(Settings.FindPwdUrlValidity).Value.ToInt32Req();
                break;

            default:
                throw new Exception("该消息类型不支持生成Email链接类邮件");
            }
            string strLink = string.Format("{0}?code={1}", url, encryptData);

            return(strLink);
        }
コード例 #2
0
        /// <summary>
        /// 新增站内信
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Result <int> AddMessage(long sendId, long sendCompanyId, long receiveId, long receiveCompanyId, MessageStep step, string businessUrl, Dictionary <string, string> parameters, string linkURL = "")
        {
            Result <int> result = new Result <int>();

            try
            {
                using (MsgDataContext db = new MsgDataContext())
                {
                    //查找模板
                    var templete = db.Msg_MessageTemplete.FirstOrDefault(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);
                    if (templete != null)
                    {
                        Msg_Message model = new Msg_Message();
                        string      con   = templete.TemplateCon;
                        string      title = templete.TitleCon;
                        if (parameters != null && parameters.Any())
                        {
                            //替换标题和内容参数
                            foreach (var item in parameters)
                            {
                                con   = con.Replace("{" + item.Key + "}", item.Value);
                                title = title.Replace("{" + item.Key + "}", item.Value);
                            }
                        }
                        model.Contents         = con;
                        model.LinkURL          = string.IsNullOrEmpty(linkURL) ? templete.LinkURL : linkURL;
                        model.ReadTime         = null;
                        model.ReceiveId        = receiveId;
                        model.SenderId         = sendId;
                        model.SendeCompanyId   = sendCompanyId;
                        model.ReceiveCompanyId = receiveCompanyId;
                        model.State            = false;
                        model.Step             = step.ToString();
                        model.TemplateId       = templete.Id;
                        model.Title            = title;
                        model.SendTime         = DateTime.Now;
                        model.BusinessUrl      = businessUrl;
                        db.Msg_Message.Add(model);
                        var rows = db.SaveChanges();
                        result.Data = rows;
                        result.Flag = EResultFlag.Success;

                        //WriteLog(AdminModule.MessageHistory.GetText(), SystemRight.Add.GetText(), "新增站内信:" + model.Id + ":" + model.Title);
                    }
                    else
                    {
                        throw new Exception("未查找到对应站内信模板");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddMessage");
            }
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// 验证码校验
        /// 如果是邮件链接,步骤/接收人/邮箱无须传入
        /// 如果是验证码,则接收人和邮箱二者必须传入一个
        /// </summary>
        /// <param name="code"></param>
        /// <param name="receiveId"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        private Result <Msg_EmailValidate> ValidateEmailCode(string code, MessageStep step, long receiveId = 0, string email = "")
        {
            Result <Msg_EmailValidate> result = new Result <Msg_EmailValidate>();

            try
            {
                string strStep = step.ToString();
                //链接里的验证码校验
                if (receiveId == 0 && string.IsNullOrEmpty(email))
                {
                    //解密校验
                    string         sourceData  = DesTool.DesDecrypt(code);
                    IList <string> decryptData = sourceData.SplitString("#");
                    strStep = decryptData[0];
                    email   = decryptData[1];
                    code    = decryptData[2];
                }
                var model = DataOperateMsg <Msg_EmailValidate> .Get().Single(i => (i.ReceiveId == receiveId || i.ReceiveEmail == email) && i.Code == code && i.ValidateType == strStep);

                if (model == null)
                {
                    throw new Exception("验证码错误");
                }
                else
                {
                    if (model.State == ValCodeState.Used.ToString())
                    {
                        throw new Exception("验证码已经使用过");
                    }
                    if (model.ExpiredTime < DateTime.Now)
                    {
                        throw new Exception("验证码已过期");
                    }
                    //更新验证码
                    model.State = ValCodeState.Used.ToString();
                    DataOperateMsg <Msg_EmailValidate> .Get().Update(model);

                    result.Data = model;
                    result.Flag = EResultFlag.Success;
                }
            }
            catch (Exception ex)
            {
                result.Data      = null;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "ValidateEmailCode");
            }
            return(result);
        }
コード例 #4
0
ファイル: SMSService.cs プロジェクト: wwkkww1983/ShanxiEPM
        /// <summary>
        /// 验证码校验,接收人和电话二者需要传入一个
        /// </summary>
        /// <param name="code"></param>
        /// <param name="receiveId"></param>
        /// <param name="phone"></param>
        /// <returns></returns>
        public Result <Msg_SMSValidate> ValidateSMSCode(string code, MessageStep step, string phone, long receiveId = -1)
        {
            Result <Msg_SMSValidate> result = new Result <Msg_SMSValidate>();

            try
            {
                string strStep = step.ToString();
                var    model   = DataOperateMsg <Msg_SMSValidate> .Get().Single(i => (i.ReceiveId == receiveId || i.ReceivePhone == phone) && i.Code == code && i.ValidateType == strStep);

                if (model == null)
                {
                    throw new Exception("验证码错误");
                }
                else
                {
                    if (model.State == ValCodeState.Used.ToString())
                    {
                        throw new Exception("验证码已经使用过");
                    }
                    if (model.ExpiredTime < DateTime.Now)
                    {
                        throw new Exception("验证码已过期");
                    }
                    //更新验证码
                    model.State = ValCodeState.Used.ToString();
                    DataOperateMsg <Msg_SMSValidate> .Get().Update(model);

                    result.Data = model;
                    result.Flag = EResultFlag.Success;
                }
            }
            catch (Exception ex)
            {
                result.Data      = null;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "ValidateSMSCode");
            }
            return(result);
        }
コード例 #5
0
        /// <summary>
        /// 消息发送通用方法
        /// </summary>
        /// <param name="sendId"></param>
        /// <param name="receiveId"></param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <param name="linkURL"></param>
        /// <returns></returns>
        public async void SendMsg(long sendId, long sendCompanyId, long receiveId, long receiveCompanyId, MessageStep step, Dictionary <string, string> parameters, string linkURL = "")
        {
            await Task.Run(() =>
            {
                Result <int> result = new Result <int>();
                int rows            = 0;
                //try
                //{
                using (MsgDataContext db = new MsgDataContext())
                {
                    //parameters.Add("Phone", LoadSettingsByKeys(Settings.WebPhone).Value);
                    //parameters.Add("WebURL", LoadSettingsByKeys(Settings.WebUrl).Value);
                    //查询消息环节配置
                    var section = db.Msg_MessageSection.FirstOrDefault(i => i.IsConfirm && i.IsEnable && i.Name == step.ToString());
                    if (section != null)
                    {
                        var types = section.MsgTypes.SplitString(",");
                        foreach (var item in types)
                        {
                            var type = item.ToEnumReq <MessageType>();
                            switch (type)
                            {
                            case MessageType.Message:
                                rows += AddMessage(sendId, sendCompanyId, receiveId, receiveCompanyId, step, string.Empty, parameters, linkURL).Data;
                                break;

                            //case MessageType.Email:
                            //    rows += AddEmail(sendId, sendCompanyId, receiveId, receiveCompanyId, step, parameters).Data;
                            //    break;
                            //case MessageType.SMS:
                            //    rows += AddSMS(sendId, sendCompanyId, receiveId, receiveCompanyId, step, parameters).Data;
                            //    break;
                            default:
                                break;
                            }
                        }
                        result.Data = rows;
                        result.Flag = EResultFlag.Success;
                    }
                }
                //        else
                //        {
                //            throw new Exception("未查询到消息环节配置");
                //        }
                //    }
                //}
                //catch (Exception ex)
                //{
                //    result.Data = -1;
                //    result.Flag = EResultFlag.Failure;
                //    result.Exception = new ExceptionEx(ex, "SendMsg");
                //}
            });
        }
コード例 #6
0
        /// <summary>
        /// 新增站内信
        /// </summary>
        /// <param name="sendId"></param>
        /// <param name="sendCompanyId"></param>
        /// <param name="recDic">接收信息字典类型 key:接收人Id;value:接收人单位Id</param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <param name="linkURL"></param>
        /// <returns></returns>
        public Result <int> AddMessageBatch(long sendId, long sendCompanyId, Dictionary <long, long> recDic, MessageStep step, Dictionary <string, string> parameters, string linkURL = "")
        {
            Result <int> result = new Result <int>();

            try
            {
                using (MsgDataContext db = new MsgDataContext())
                {
                    //查找模板
                    var templete = db.Msg_MessageTemplete.FirstOrDefault(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);
                    if (templete != null)
                    {
                        if (recDic != null && recDic.Any())
                        {
                            List <Msg_Message> list  = new List <Msg_Message>();
                            Msg_Message        model = null;
                            foreach (var dic in recDic)
                            {
                                model = new Msg_Message();

                                string con   = templete.TemplateCon;
                                string title = templete.TitleCon;
                                if (parameters != null && parameters.Any())
                                {
                                    foreach (var item in parameters)
                                    {
                                        con   = con.Replace("{" + item.Key + "}", item.Value);
                                        title = title.Replace("{" + item.Key + "}", item.Value);
                                    }
                                }
                                model.Contents         = con;
                                model.LinkURL          = string.IsNullOrEmpty(linkURL) ? templete.LinkURL : linkURL;
                                model.ReadTime         = null;
                                model.ReceiveId        = dic.Key;
                                model.SenderId         = sendId;
                                model.SendeCompanyId   = sendCompanyId;
                                model.ReceiveCompanyId = dic.Value;
                                model.State            = false;
                                model.Step             = step.ToString();
                                model.TemplateId       = templete.Id;
                                model.Title            = title;
                                model.SendTime         = DateTime.Now;
                                list.Add(model);
                            }
                            db.Msg_Message.AddRange(list);
                            var rows = db.SaveChanges();
                            result.Data = rows;
                            result.Flag = EResultFlag.Success;
                        }
                        else
                        {
                            throw new Exception("未找到接收人");
                        }
                    }
                    else
                    {
                        throw new Exception("未查找到对应站内信模板");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddMessage");
            }
            return(result);
        }
コード例 #7
0
ファイル: SMSService.cs プロジェクト: wwkkww1983/ShanxiEPM
        /// <summary>
        /// 短信验证码
        /// </summary>
        /// <param name="receiveId"></param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Result <int> AddSMSValCode(string phone, MessageStep step, Dictionary <string, string> parameters)
        {
            //生成验证码
            string code = ConstString.CreateRandomNum(ConstString.RANDOMNUMCOUNT);

            parameters.Add("Code", code);

            Result <int> result = new Result <int>();

            try
            {
                //查找模板
                var templete = DataOperateMsg <Msg_SMSTemplete> .Get().Single(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);

                if (templete != null)
                {
                    Msg_SMS model = new Msg_SMS();
                    string  con   = templete.TemplateCon;
                    if (parameters != null && parameters.Any())
                    {
                        //替换内容参数
                        foreach (var item in parameters)
                        {
                            con = con.Replace("{" + item.Key + "}", item.Value);
                        }
                    }
                    var receive = DataOperateBasic <Base_User> .Get().Single(i => i.Phone == phone);

                    long receiveId = 0;
                    if (receive != null && receive.Id > 0)
                    {
                        receiveId = receive.Id;
                    }
                    model.ReceivePhone     = phone;
                    model.ReceiveId        = receiveId;
                    model.SendeCompanyId   = 0;
                    model.ReceiveCompanyId = 0;
                    model.SenderId         = 0;
                    model.SenderPhone      = "";
                    model.SenderTime       = null;
                    model.SmsCon           = con;
                    model.State            = false;
                    model.SubmissionTime   = DateTime.Now;
                    model.Step             = step.ToString();
                    model.TemplateId       = templete.Id;
                    model.ServerNo         = templete.ServerNo;
                    model.Params           = UtilitySendMessage.CreateSmsParam(parameters).Data;
                    model.SignName         = templete.SignName;
                    var splitTime = (LoadSettingsByKeys(Settings.SendRegisterCodeTime));
                    //验证是否频繁发送
                    var last = DataOperateMsg <Msg_SMSValidate> .Get().GetList(i => i.ReceivePhone == phone).OrderByDescending(i => i.Id).FirstOrDefault();

                    if (last != null && (DateTime.Now - last.RecordTime).TotalSeconds < splitTime.Value.ToInt32Req())
                    {
                        throw new Exception("不能频繁发送验证码");
                    }
                    var rows = DataOperateMsg <Msg_SMS> .Get().Add(model);

                    //添加验证码数据
                    Msg_SMSValidate valModel = new Msg_SMSValidate();
                    valModel.Code         = code;
                    valModel.SMSId        = model.Id;
                    valModel.ReceivePhone = model.ReceivePhone;
                    valModel.ReceiveId    = model.ReceiveId;
                    valModel.SendId       = model.SenderId;
                    valModel.SendTime     = model.SubmissionTime;
                    valModel.State        = ValCodeState.UNUse.ToString();
                    valModel.ValidateType = step.ToString();
                    var seconds = LoadSettingsByKeys(Settings.SMSCodeDuration).Value.ToInt32Req();
                    valModel.ExpiredTime = DateTime.Now.AddSeconds(seconds);
                    rows = DataOperateMsg <Msg_SMSValidate> .Get().Add(valModel);


                    result.Data = rows;
                    result.Flag = EResultFlag.Success;

                    WriteLog(AdminModule.SMSHistory.GetText(), SystemRight.Add.GetText(), "新增短信验证码:" + model.Id + ":" + model.SmsCon);
                }
                else
                {
                    throw new Exception("未查找到对应短信模板");
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddSMSValCode");
            }
            return(result);
        }
コード例 #8
0
ファイル: SMSService.cs プロジェクト: wwkkww1983/ShanxiEPM
        /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="receiveId"></param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Result <int> AddSMS(long sendId, long sendCompanyId, long receiveId, long receiveCompanyId, MessageStep step, Dictionary <string, string> parameters)
        {
            Result <int> result = new Result <int>();

            try
            {
                using (MsgDataContext db = new MsgDataContext())
                {
                    //查找模板
                    var templete = db.Msg_SMSTemplete.FirstOrDefault(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);
                    if (templete != null)
                    {
                        Msg_SMS model = new Msg_SMS();
                        string  con   = templete.TemplateCon;
                        if (parameters != null && parameters.Any())
                        {
                            //替换内容参数
                            foreach (var item in parameters)
                            {
                                con = con.Replace("{" + item.Key + "}", item.Value);
                            }
                        }
                        BasicDataContext basicData = new BasicDataContext();
                        var receive = basicData.Base_User.FirstOrDefault(i => i.Id == receiveId);
                        model.ReceivePhone     = receive.Phone;
                        model.ReceiveId        = receiveId;
                        model.SenderId         = sendId;
                        model.SendeCompanyId   = sendCompanyId;
                        model.ReceiveCompanyId = receiveCompanyId;
                        model.SenderPhone      = "";
                        model.SenderTime       = null;
                        model.SmsCon           = con;
                        model.State            = false;
                        model.SubmissionTime   = DateTime.Now;
                        model.Step             = step.ToString();
                        model.TemplateId       = templete.Id;
                        model.ServerNo         = templete.ServerNo;
                        model.Params           = UtilitySendMessage.CreateSmsParam(parameters).Data;
                        model.SignName         = templete.SignName;


                        db.Msg_SMS.Add(model);
                        var rows = db.SaveChanges();
                        result.Data = rows;
                        result.Flag = EResultFlag.Success;

                        //WriteLog(AdminModule.SMSHistory.GetText(), SystemRight.Add.GetText(), "新增短信:" + model.Id + ":" + model.SmsCon);
                    }
                    else
                    {
                        throw new Exception("未查找到短信模板");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddSMS");
            }
            return(result);
        }
コード例 #9
0
        /// <summary>
        /// 邮件验证码
        /// </summary>
        /// <param name="receiveId"></param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Result <int> AddEmailValCode(string email, MessageStep step, Dictionary <string, string> parameters)
        {
            //生成验证码
            string code = ConstString.CreateRandomNum(ConstString.RANDOMNUMCOUNT);

            parameters.Add("Code", code);

            Result <int> result = new Result <int>();

            try
            {
                //查找模板
                var templete = DataOperateMsg <Msg_EmailTemplete> .Get().Single(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);

                if (templete != null)
                {
                    Msg_Email model = new Msg_Email();
                    string    con   = templete.TemplateCon;
                    string    title = templete.TitleCon;
                    if (parameters != null && parameters.Any())
                    {
                        //替换标题和内容参数
                        foreach (var item in parameters)
                        {
                            con   = con.Replace("{" + item.Key + "}", item.Value);
                            title = title.Replace("{" + item.Key + "}", item.Value);
                        }
                    }
                    var receive = DataOperateBasic <Base_User> .Get().Single(i => i.Email == email);

                    long receiveId = 0;
                    if (receive != null && receive.Id > 0)
                    {
                        receiveId = receive.Id;
                    }

                    model.EmailCon         = con;
                    model.ReceiveId        = receiveId;
                    model.SendeCompanyId   = 0;
                    model.ReceiveCompanyId = 0;
                    model.ReceiveEmaile    = email;
                    model.SenderId         = 0;//管理员
                    model.SenderEmail      = DataOperateMsg <Msg_EmailSetting> .Get().Single(i => i.IsConfirm && i.IsEnable).UserName;

                    model.State          = false;
                    model.Step           = step.ToString();
                    model.TemplateId     = templete.Id;
                    model.Title          = title;
                    model.SenderTime     = null;
                    model.SubmissionTime = DateTime.Now;

                    var rows = DataOperateMsg <Msg_Email> .Get().Add(model);

                    //添加验证码数据
                    Msg_EmailValidate valModel = new Msg_EmailValidate();
                    valModel.Code         = code;
                    valModel.EmailId      = model.Id;
                    valModel.ReceiveEmail = model.ReceiveEmaile;
                    valModel.ReceiveId    = model.ReceiveId;
                    valModel.SendId       = model.SenderId;
                    valModel.SendTime     = model.SubmissionTime;
                    valModel.State        = ValCodeState.UNUse.ToString();
                    valModel.ValidateType = step.ToString();
                    var seconds = LoadSettingsByKeys(Settings.EmailCodeDuration).Value.ToInt32Req();
                    valModel.ExpiredTime = DateTime.Now.AddSeconds(seconds);
                    rows = DataOperateMsg <Msg_EmailValidate> .Get().Add(valModel);


                    result.Data = rows;
                    result.Flag = EResultFlag.Success;

                    WriteLog(AdminModule.EmailHistory.GetText(), SystemRight.Add.GetText(), "新增邮件验证码:" + model.Id + ":" + model.Title);
                }
                else
                {
                    throw new Exception("未查找到对应邮件模板");
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddEmailValCode");
            }
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// 发送邮件,TODO:扩展附件方法
        /// </summary>
        /// <param name="receiveId"></param>
        /// <param name="step"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public Result <int> AddEmail(long sendId, long sendCompanyId, long receiveId, long receiveCompanyId, MessageStep step, Dictionary <string, string> parameters)
        {
            Result <int> result = new Result <int>();

            try
            {
                using (MsgDataContext db = new MsgDataContext())
                {
                    //查找模板
                    var templete = db.Msg_EmailTemplete.FirstOrDefault(i => i.Step == step.ToString() && i.IsConfirm && i.IsEnable);
                    if (templete != null)
                    {
                        Msg_Email model = new Msg_Email();
                        string    con   = templete.TemplateCon;
                        string    title = templete.TitleCon;
                        if (parameters != null && parameters.Any())
                        {
                            //替换标题和内容参数
                            foreach (var item in parameters)
                            {
                                con   = con.Replace("{" + item.Key + "}", item.Value);
                                title = title.Replace("{" + item.Key + "}", item.Value);
                            }
                        }
                        BasicDataContext basicData = new BasicDataContext();
                        model.EmailCon         = con;
                        model.ReceiveId        = receiveId;
                        model.ReceiveEmaile    = basicData.Base_User.FirstOrDefault(i => i.Id == model.ReceiveId).Email;
                        model.SenderId         = sendId;
                        model.SenderEmail      = db.Msg_EmailSetting.FirstOrDefault(i => i.IsConfirm && i.IsEnable).UserName;
                        model.SendeCompanyId   = sendCompanyId;
                        model.ReceiveCompanyId = receiveCompanyId;

                        model.State          = false;
                        model.Step           = step.ToString();
                        model.TemplateId     = templete.Id;
                        model.Title          = title;
                        model.SenderTime     = null;
                        model.SubmissionTime = DateTime.Now;
                        model.SendCount      = 0;
                        db.Msg_Email.Add(model);
                        var rows = db.SaveChanges();
                        result.Data = rows;
                        result.Flag = EResultFlag.Success;

                        //WriteLog(AdminModule.EmailHistory.GetText(), SystemRight.Add.GetText(), "新增邮件:" + model.Id + ":" + model.Title);
                    }
                    else
                    {
                        throw new Exception("未查找到对应邮件模板");
                    }
                }
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "AddEmail");
            }
            return(result);
        }