Пример #1
0
        /// <summary>
        /// 重寄驗證信
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <returns></returns>
        public async Task <ActionResult> SendConfirmMail(Guid id)
        {
            var result = new CiResult <mgt_User>();
            var user   = service.Get(id);

            //check mail
            var model = new SendEmailViewModel
            {
                Email          = user.Email,
                SystemMailType = SystemMailType.ConfirmEmail
            };

            result = service.SendValidCodeCheck(model);

            //send
            if (result.IsSuccess)
            {
                var mailService = new MailService(SessionManager.Client.ID);
                var mailContent = new ReplaceMailContent
                {
                    UserName  = result.Data.Name,
                    UserEmail = model.Email
                };
                var mailResult = await mailService.SendEmail(result.Data.ID, mailContent, model.SystemMailType, model.ValidType, fromFn : "Admin_SendConfirmMail");

                return(Json(mailResult, JsonRequestBehavior.AllowGet));
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Пример #2
0
        public async Task <ActionResult> UpdatePhone(string Phone)
        {
            if (!Request.IsAjaxRequest())
            {
                return(ErrorPage()); //404
            }


            var result = service.UpdatePhone(SessionManager.UserID, Phone);

            //check and addLog
            if (result.IsSuccess)
            {
                result = service.SendSmsValidCodeCheck(Phone);
            }

            //送出簡訊驗證碼
            if (result.IsSuccess)
            {
                var mailService = new MailService(ApplicationHelper.ClientID);
                var mailContent = new ReplaceMailContent
                {
                    PhoneNumber = Phone
                };
                var mailResult = await mailService.SendSms(SessionManager.UserID, mailContent, SystemMailType.ConfirmEmail, ValidType.ConfirmPhone, fromFn : "UpdatePhone");

                return(Json(mailResult));
            }

            return(Json(result));
        }
Пример #3
0
        public async Task <ActionResult> SendValidCodeSelf()
        {
            var user  = service.Get(SessionManager.UserID);
            var model = new SendEmailViewModel
            {
                Email          = user.Email,
                SystemMailType = SystemMailType.ConfirmEmail,
                ValidType      = ValidType.ConfirmEmail
            };

            var result = service.SendValidCodeCheck(model);

            if (result.IsSuccess)
            {
                var mailService = new MailService(ApplicationHelper.ClientID);
                var mailContent = new ReplaceMailContent
                {
                    UserName  = result.Data.Name,
                    UserEmail = model.Email
                };
                var mailResult = await mailService.SendEmail(result.Data.ID, mailContent, model.SystemMailType, model.ValidType, fromFn : "SendValidCodeSelf");

                return(Json(mailResult));
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Пример #4
0
        public async Task <ActionResult> SendValidCode(SendEmailViewModel model)
        {
            var result = new CiResult <mgt_User>();

            //驗證碼
            if (string.IsNullOrWhiteSpace(model.Captcha) || SessionManager.Captcha != model.Captcha)
            {
                result.Message = SystemMessage.CaptchaError;
            }

            if (string.IsNullOrEmpty(result.Message))
            {
                result = service.SendValidCodeCheck(model);
                if (result.IsSuccess)
                {
                    var mailService = new MailService(ApplicationHelper.ClientID);
                    var mailContent = new ReplaceMailContent
                    {
                        UserName  = result.Data.Name,
                        UserEmail = model.Email
                    };
                    var mailResult = await mailService.SendEmail(result.Data.ID, mailContent, model.SystemMailType, model.ValidType, fromFn : "SendValidCode");

                    return(Json(mailResult));
                }
            }

            return(Json(result));
        }
Пример #5
0
        public async Task <ActionResult> DeleteAssign(Guid id)
        {
            var result = service.DeleteAssign(SessionManager.UserID, id);

            //通知:選手指派取消 (失敗不提醒)
            if (result.IsSuccess)
            {
                try
                {
                    var data = service.GetUserAssign(id);

                    var mailService = new MailService(ApplicationHelper.ClientID);
                    var mailContent = new ReplaceMailContent
                    {
                        UserName   = data.ToUser.Name,
                        UserEmail  = data.ToUser.Email,
                        MemberName = data.Member.NickName
                    };
                    var mailResult = await mailService.SendEmail(data.ToUser.ID, mailContent, SystemMailType.AssignCancel, fromFn : "DeleteAssign");

                    if (mailResult.IsSuccess)
                    {
                        result.Message += ", " + mailResult.Message;
                    }
                }
                catch (Exception e)
                {
                    var json = _Json.ModelToJson(e);
                    _Log.CreateText(json);
                }
            }

            return(Json(result));
        }
Пример #6
0
        public async Task <ActionResult> CreateAssign(Guid childID, string AssignPhoneNumber)
        {
            var result = new CiResult();
            var toUser = service.GetbyPhone(AssignPhoneNumber.ToTrim());

            if (toUser == null)
            {
                result.Message = "查無電話號碼";
            }

            if (string.IsNullOrEmpty(result.Message))
            {
                var model = new mgt_UserAssign
                {
                    UserProfileID = childID,
                    FromUser      = SessionManager.UserID,
                    ToUser        = toUser.ID
                };
                result = service.CreateAssign(model);
            }

            //通知:選手指派新增 (失敗不提醒)
            if (result.IsSuccess)
            {
                try
                {
                    var data = service.GetUserAssign(result.ID);

                    if (data.ToUser.ID == data.FromUser.ID)
                    {
                        //_Log.CreateText($"[Email no send]指派給自己: User={data.ToUser.ID}, Member={data.Member.NickName}");
                    }
                    else
                    {
                        var mailService = new MailService(ApplicationHelper.ClientID);
                        var mailContent = new ReplaceMailContent
                        {
                            UserName   = data.ToUser.Name,
                            UserEmail  = data.ToUser.Email,
                            MemberName = data.Member.NickName
                        };
                        var mailResult = await mailService.SendEmail(data.ToUser.ID, mailContent, SystemMailType.AssignCreate, fromFn : "CreateAssign");

                        if (mailResult.IsSuccess)
                        {
                            result.Message += ", " + mailResult.Message;
                        }
                    }
                }
                catch (Exception e)
                {
                    var json = _Json.ModelToJson(e);
                    _Log.CreateText(json);
                }
            }

            return(Json(result));
        }
Пример #7
0
        private async Task SendOrderDetailMail(Guid orderDetailID, Guid structureID, SystemMailType mailType)
        {
            var mailService = new MailService(ApplicationHelper.ClientID);

            //存在emailTemplate才寄信-失敗不提醒
            if (mailService.IsExistTemplate(mailType, structureID))
            {
                try
                {
                    // var user = userService.Get(userID);
                    var dataOrder    = service.GetDetail(orderDetailID);
                    var memberResult = userService.SendMemberEmails(orderDetailID);

                    //盃-區-組
                    var order   = service.GetView(dataOrder.OrderID, ApplicationHelper.DefaultLanguage, DataLevel.Simple);
                    var subject = order.ParentItemViewModel?.ItemLanguage.Subject ?? "";
                    if (!string.IsNullOrEmpty(subject))
                    {
                        subject += "-";
                    }
                    subject += order.ItemViewModel?.ItemLanguage.Subject + " " + dataOrder.ItemSubject;

                    if (memberResult.IsSuccess)
                    {
                        //所有家長
                        foreach (var member in memberResult.Data)
                        {
                            var user = member.mgt_UserCreate;

                            if (user.ID == SessionManager.UserID)
                            {
                                //_Log.CreateText($"[Email no send]通知參賽: User={member.ID}, Member={member.NickName}");
                            }
                            else
                            {
                                var mailCoutent = new ReplaceMailContent
                                {
                                    UserName        = user.Name,
                                    UserEmail       = user.Email,
                                    MemberName      = member.NickName,
                                    CompetitionCame = subject
                                };
                                var mailResult = await mailService.SendEmail(user.ID, mailCoutent, mailType, structureID : structureID, fromFn : "SendOrderDetailMail");
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    var json = _Json.ModelToJson(e);
                    _Log.CreateText(json);
                }
            }
        }
Пример #8
0
        private async Task SendOrderMail(Guid orderID, Guid structureID, SystemMailType mailType, Guid userID, string fromFn = "")
        {
            var mailService = new MailService(ApplicationHelper.ClientID);

            //存在emailTemplate才寄信-失敗不提醒
            if (mailService.IsExistTemplate(mailType, structureID))
            {
                try
                {
                    var user      = userService.Get(userID);
                    var dataOrder = service.GetView(orderID, ApplicationHelper.DefaultLanguage, DataLevel.Simple);

                    var subject = "";
                    try
                    {
                        subject = dataOrder.ParentItemViewModel?.ItemLanguage.Subject ?? "";
                        if (!string.IsNullOrEmpty(subject))
                        {
                            subject += "-";
                        }
                        subject += dataOrder.ItemViewModel?.ItemLanguage.Subject;
                    }
                    catch (Exception)
                    {
                    }

                    var mailCoutent = new ReplaceMailContent
                    {
                        UserName        = user.Name,
                        UserEmail       = user.Email,
                        OrderContent    = mailService.CreateOrderContent(dataOrder),
                        OrderATMInfo    = mailService.CreateOrderATMInfo(dataOrder),
                        OrderAdminNote  = dataOrder.Order.PublicNote,
                        CompetitionCame = subject
                    };
                    var mailResult = await mailService.SendEmail(userID, mailCoutent, mailType, structureID : structureID, fromFn : fromFn);
                }
                catch (Exception e)
                {
                    var json = _Json.ModelToJson(e);
                    _Log.CreateText(json);
                }
            }
        }
Пример #9
0
        public async Task <ActionResult> SendSmsValidCodeSelf()
        {
            var phoneNumber = service.GetMyPhoneNumber(SessionManager.UserID);

            var result = service.SendSmsValidCodeCheck(phoneNumber);

            //送出簡訊驗證碼
            if (result.IsSuccess)
            {
                var mailService = new MailService(ApplicationHelper.ClientID);
                var mailContent = new ReplaceMailContent
                {
                    PhoneNumber = phoneNumber
                };
                var mailResult = await mailService.SendSms(SessionManager.UserID, mailContent, SystemMailType.ConfirmEmail, ValidType.ConfirmPhone, fromFn : "UpdatePhone");

                return(Json(mailResult));
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Пример #10
0
        public async Task <ActionResult> Profile(UserViewModel model)
        {
            model.User.ID = SessionManager.UserID;
            var result = service.UpdateMember(model, ApplicationHelper.ProfileWithEmail, ApplicationHelper.ProfileWithPhone);

            //重寄驗證信
            if (result.IsSuccess && result.Data && ApplicationHelper.ProfileWithEmail)
            {
                var mailService = new MailService(ApplicationHelper.ClientID);
                var mailContent = new ReplaceMailContent
                {
                    UserName  = model.User.Name,
                    UserEmail = model.User.Email
                };
                var mailResult = await mailService.SendEmail(SessionManager.UserID, mailContent, SystemMailType.ConfirmEmail, ValidType.ConfirmEmail);

                return(Json(mailResult));
            }

            return(Json(result));
        }
Пример #11
0
        public async Task <ActionResult> Update(OrderViewModel model)
        {
            if (model.User == null)
            {
                model.User = new mgt_User();
            }
            model.User.ID = SessionManager.UserID;

            var result = service.ChangeStatus(model, AccountType.Admin, true);

            //通知信
            if (result.IsSuccess)
            {
                var mailService = new MailService(SessionManager.Client.ID);

                //存在emailTemplate才寄信
                if (mailService.IsExistTemplate((SystemMailType)model.Order.OrderStatus, model.Order.StructureID))
                {
                    var user        = userService.Get(model.Order.CreateUser);
                    var dataOrder   = service.GetView(model.Order.ID, SystemLanguage, DataLevel.Simple);
                    var mailCoutent = new ReplaceMailContent
                    {
                        UserName       = user.Name,
                        UserEmail      = user.Email,
                        OrderContent   = mailService.CreateOrderContent(dataOrder),
                        OrderATMInfo   = mailService.CreateOrderATMInfo(dataOrder),
                        OrderAdminNote = dataOrder.Order.PublicNote
                    };
                    var mailResult = await mailService.SendEmail(user.ID, mailCoutent, (SystemMailType)model.Order.OrderStatus, structureID : model.Order.StructureID);

                    result.Message += "<br>" + mailResult.Message;
                }
            }

            return(Json(result));
        }
Пример #12
0
        public async Task <ActionResult> UpdateEmail(string Email)
        {
            var result = service.UpdateEmail(SessionManager.UserID, Email);

            //check and addLog
            if (result.IsSuccess)
            {
                var model = new SendEmailViewModel
                {
                    Email          = Email,
                    SystemMailType = SystemMailType.ConfirmEmail,
                    ValidType      = ValidType.ConfirmEmail
                };
                result = service.SendValidCodeCheck(model);
            }

            //重寄驗證信
            if (result.IsSuccess)
            {
                var mailService = new MailService(ApplicationHelper.ClientID);
                var mailContent = new ReplaceMailContent
                {
                    UserName  = SessionManager.UserName,
                    UserEmail = Email
                };
                var mailResult = await mailService.SendEmail(SessionManager.UserID, mailContent, SystemMailType.ConfirmEmail, ValidType.ConfirmEmail);


                //重新登入
                //SessionManager.RemoveAll();

                return(Json(mailResult));
            }

            return(Json(result));
        }
Пример #13
0
        /// <summary>
        /// 寄送簡訊
        /// </summary>
        /// <param name="userID">user id</param>
        /// <param name="model">Mail內容取代字串</param>
        /// <param name="systemMailType">郵件類型</param>
        /// <param name="validType">驗證碼類型</param>
        /// <param name="structureID">郵件類型structure</param>
        /// <param name="fromFn">來源</param>
        /// <returns></returns>
        public async Task <CiResult> SendSms(Guid userID, ReplaceMailContent model,
                                             SystemMailType systemMailType, ValidType?validType = null, Guid?structureID = null,
                                             string fromFn = "")
        {
            var result = new CiResult <SMSViewModel> {
                IsSuccess = true
            };
            var smsTool = new SmsTool {
            };

            //ReplaceMailContent
            model.WebsiteUrl = RouteHelper.BaseUrl();
            if (string.IsNullOrEmpty(model.PhoneNumber) || !_Check.IsPhone(model.PhoneNumber))
            {
                result.IsSuccess = false;
            }

            //system setting
            if (!ApplicationHelper.ClientSettings.Contains(ClientSetting.SMS))
            {
                result.IsSuccess = false;
                _Log.CreateText($"SendSms no setting");
            }

            //get setting
            if (result.IsSuccess)
            {
                var smsResult = settingService.Get <SmsServiceViewModel>(SystemSettingType.SmsService);
                smsTool.setting = smsResult.Data;
                if (!smsResult.IsSuccess || !smsResult.Data.IsEnabled)
                {
                    result.IsSuccess = false;
                }
            }

            if (result.IsSuccess)
            {
                var siteResult = settingService.Get <SiteInfoViewModel>(SystemSettingType.SiteInfo);
                if (siteResult.IsSuccess)
                {
                    model.WebsiteName = siteResult.Data.SiteName;
                }
                else
                {
                    result.IsSuccess = false;
                }
            }

            //create validCode
            if (result.IsSuccess && validType != null)
            {
                var validCodeResult = userService.CreateValidCode(userID, validType.Value, length: 5);
                if (validCodeResult.IsSuccess)
                {
                    model.ValidCode = validCodeResult.Data;
                }
                else
                {
                    result.IsSuccess = false;
                }
            }

            //get template
            var template = new cms_EmailTemplate();

            if (result.IsSuccess)
            {
                template = templateService.GetByType(systemMailType, structureID);
                if (template != null)
                {
                    // set template
                    smsTool.message = model.ReplaceContent(template.SMSContent);
                }
                else
                {
                    result.IsSuccess = false;
                    _Log.CreateText($"SendSms no template: {systemMailType.ToString()}");
                }
            }

            //send mail (測試中不寄簡訊)
            if (result.IsSuccess)
            {
                if (ApplicationHelper.IsLocal)
                {
                    _Log.CreateText($"Local not send SMS: {model.PhoneNumber} >> {smsTool.message}");
                }
                else
                {
                    result = await smsTool.Send(userID, model.PhoneNumber);
                }

                //add log
                var log = new cms_SmsLog
                {
                    PhoneNumber = model.PhoneNumber,
                    SMSContent  = smsTool.message,
                    ToUser      = userID,
                    IsSend      = result.IsSuccess,//是否已發送
                    SendTime    = DateTime.Now,
                    CreateTime  = DateTime.Now,
                };
                if (result.IsSuccess && result.Data != null)
                {
                    log.Msgid            = result.Data.MsgId;
                    log.SmsResultType    = (int)result.Data.ResultType;
                    log.UpdateResultTime = DateTime.Now;
                }
                smsService.CreateLog(log);
            }

            if (result.IsSuccess)
            {
                if (systemMailType == SystemMailType.ConfirmEmail)
                {
                    result.Message = string.Format(SystemMessage.PhoneConfirm, model.PhoneNumber);
                }
                else
                {
                    result.Message = SystemMessage.SendSmsSuccess;
                }
            }
            else if (string.IsNullOrEmpty(result.Message))
            {
                result.Message = SystemMessage.SmsServiceError;
            }

            SessionManager.Captcha = "";

            return(result);
        }
Пример #14
0
        /// <summary>
        /// 寄送郵件
        /// </summary>
        /// <param name="userID">user id</param>
        /// <param name="model">Mail內容取代字串</param>
        /// <param name="systemMailType">郵件類型</param>
        /// <param name="validType">驗證碼類型</param>
        /// <param name="structureID">郵件類型structure</param>
        /// <param name="fromFn">來源</param>
        /// <returns></returns>
        public async Task <CiResult> SendEmail(Guid userID, ReplaceMailContent model,
                                               SystemMailType systemMailType, ValidType?validType = null, Guid?structureID = null,
                                               string fromFn = "")
        {
            var result = new CiResult {
                IsSuccess = true
            };
            var mailTool = new MailTool {
                email = model.UserEmail
            };

            //ReplaceMailContent
            model.WebsiteUrl = RouteHelper.BaseUrl();
            if (string.IsNullOrEmpty(model.UserName) || string.IsNullOrEmpty(model.UserEmail) || !_Check.IsEmail(model.UserEmail))
            {
                result.IsSuccess = false;
            }

            //get setting
            if (result.IsSuccess)
            {
                var smtpResult = settingService.Get <SmtpServerViewModel>(SystemSettingType.SmtpServer);
                mailTool.setting = smtpResult.Data;
                if (!smtpResult.IsSuccess || !smtpResult.Data.IsEnabled)
                {
                    result.IsSuccess = false;
                }
            }

            if (result.IsSuccess)
            {
                var siteResult = settingService.Get <SiteInfoViewModel>(SystemSettingType.SiteInfo);
                if (siteResult.IsSuccess)
                {
                    model.WebsiteName = siteResult.Data.SiteName;
                }
                else
                {
                    result.IsSuccess = false;
                }
            }

            //create validCode
            if (result.IsSuccess && validType != null)
            {
                var validCodeResult = userService.CreateValidCode(userID, validType.Value);
                if (validCodeResult.IsSuccess)
                {
                    model.ConfirmUrl = RouteHelper.GetConfirmUrl(validType.Value, validCodeResult.Data, model.UserEmail);
                }
                else
                {
                    result.IsSuccess = false;
                }
            }

            //get template
            var template = new cms_EmailTemplate();

            if (result.IsSuccess)
            {
                template = templateService.GetByType(systemMailType, structureID);
                if (template != null)
                {
                    // ckeditor
                    template.Content = HttpUtility.HtmlDecode(template.Content);

                    // set template
                    mailTool.subject = model.ReplaceContent(template.Subject);
                    mailTool.content = model.ReplaceContent(template.Content);
                    if (!string.IsNullOrEmpty(template.TemplateBcc))
                    {
                        mailTool.bccReceiver = template.TemplateBcc.Split(',');
                    }
                }
                else
                {
                    result.IsSuccess = false;
                    _Log.CreateText($"SendEmail no template: {systemMailType.ToString()}");
                }
            }

            //send mail (測試中:只能寄給開發者)
            if (result.IsSuccess)
            {
                if (!ApplicationHelper.IsLocal || (ApplicationHelper.IsLocal && mailTool.IsTestingMail(model.UserEmail)))
                {
                    result.IsSuccess = await mailTool.SendAsync(fromFn);
                }
                else
                {
                    _Log.CreateText($"Local not send: {mailTool.email}");
                }

                //add log
                emailService.CreateLog(new EmailViewModel
                {
                    Email = new cms_Email
                    {
                        Subject        = mailTool.subject,
                        Content        = mailTool.content,
                        SystemMailType = (int)systemMailType,
                        Status         = (int)MailStatus.Done,
                        SendTime       = DateTime.Now
                    },
                    SendUsers = new List <cms_EmailSendUser> {
                        new cms_EmailSendUser {
                            ToEmail  = model.UserEmail,
                            ToUser   = userID,
                            IsSend   = result.IsSuccess,//是否已發送
                            SendTime = DateTime.Now
                        }
                    }
                });
            }

            if (result.IsSuccess)
            {
                if (systemMailType == SystemMailType.ConfirmEmail)
                {
                    result.Message = string.Format(SystemMessage.EmailConfirm, model.UserEmail);
                }
                else if (systemMailType == SystemMailType.ForgotPassword)
                {
                    result.Message = string.Format(SystemMessage.PasswordReset, model.UserEmail);
                }
                else
                {
                    result.Message = SystemMessage.SendSuccess;
                }
            }
            else if (string.IsNullOrEmpty(result.Message))
            {
                result.Message = SystemMessage.MailServerError;
            }

            SessionManager.Captcha = "";

            return(result);
        }
Пример #15
0
        public async Task <ActionResult> SignUp(SignUpViewModel model)
        {
            if (!Request.IsAjaxRequest())
            {
                return(ErrorPage()); //404
            }
            var result = new CiResult <Guid>();

            //驗證碼 (外部登入不用)
            if (model.ExternalType != null)
            {
                if (SessionManager.ExternalLogin == null)
                {
                    return(ErrorPage()); //404
                }
            }
            else if (string.IsNullOrWhiteSpace(model.Captcha) || SessionManager.Captcha != model.Captcha)
            {
                result.Message = SystemMessage.CaptchaError;
            }

            //註冊Email會員
            if (string.IsNullOrEmpty(result.Message))
            {
                var newData = new UserViewModel
                {
                    User = new mgt_User
                    {
                        Email    = model.Email,
                        Password = model.Password,
                        Name     = model.Name,
                        Phone    = model.Phone,
                        Address  = model.Address,
                        //帳號類型&狀態
                        AccountType = (int)AccountType.Member,
                        UserStatus  = (int)UserStatus.OnVerify,
                    },
                    LoginType = model.ExternalType != null ? (LoginType)model.ExternalType : LoginType.Email
                };

                if (SessionManager.ExternalLogin != null)
                {
                    newData.UserExternalLogin = new mgt_UserExternalLogin
                    {
                        ExternalType = (int)SessionManager.ExternalLogin.ExternalType,
                        ExternalKey  = SessionManager.ExternalLogin.ExternalKey
                    };
                }

                result = service.Create(newData, isExternalBinding: model.Email == SessionManager.ExternalLogin?.Email);
            }

            //寄Email驗證信
            if (result.IsSuccess)
            {
                //clear
                SessionManager.FBstate       = "";
                SessionManager.Captcha       = "";
                SessionManager.ExternalLogin = null;

                //綁定成功, 不用重送驗證信
                if (result.Message != SystemMessage.BindingSuccess)
                {
                    var mailService = new MailService(ApplicationHelper.ClientID);
                    var mailContent = new ReplaceMailContent
                    {
                        UserName  = model.Name,
                        UserEmail = model.Email
                    };
                    var mailResult = await mailService.SendEmail(result.Data, mailContent, SystemMailType.ConfirmEmail, ValidType.ConfirmEmail, fromFn : "SignUp");

                    return(Json(mailResult));
                }
            }

            return(Json(result));
        }