public async Task SendWelcomeEmail(WelcomeNotificationUserDto model)
        {
            var     subject = "Verify your email one time to complete registration";
            dynamic expando = new ExpandoObject();

            expando.Subject  = subject;
            expando.Date     = String.Format("{0:dddd, d MMMM yyyy}", DateTime.Now);
            expando.FullName = model.FullName;
            expando.Email    = model.Email;
            expando.UserName = model.UserName;
            expando.Message  = model.Message;
            var messageBodyHTML = _templateManager.GetTemplate(NotificationTemplateConst.Welcome_Account_Registration, expando);

            string        emailTemplateFolder = Path.Combine(_webHostEnvironment.WebRootPath, Path.Combine("images", "email"));
            List <string> attachmentList      = new List <string>();

            attachmentList.Add(Path.Combine(emailTemplateFolder, "logo.png"));

            var emailDto = new EmailDto()
            {
                FromConst            = NotificationFromConst.Info,
                EmailTo              = model.Email,
                EmailSubject         = subject,
                EmailBody            = messageBodyHTML,
                AttachmentInBodyList = attachmentList,
                //formFile = new FormFile(new StreamReader(,0,120,"akafsf","TestFile")
            };
            await _emailService.SendEmailAsync(emailDto);
        }
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            try
            {
                ExternalLoginInfo externalLoginInfo = null;
                if (model.IsExternalLogin)
                {
                    externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync();

                    if (externalLoginInfo == null)
                    {
                        throw new Exception("Can not external login!");
                    }

                    model.UserName = model.EmailAddress;
                    model.Password = Authorization.Users.User.CreateRandomPassword();
                }
                else
                {
                    if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(L("FormIsNotValidMessage"));
                    }
                }

                var user = await _userRegistrationManager.RegisterAsync(
                    model.Name,
                    string.Empty,// model.Surname,
                    model.EmailAddress,
                    model.UserName,
                    model.Password,
                    false,
                    false,
                    model.MobileNumber,
                    model.ZoomId,
                    model.DOB,
                    model.Gender
                    );

                // Getting tenant-specific settings
                var isEmailConfirmationRequiredForLogin = true; // await SettingManager.GetSettingValueAsync<bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin);

                if (model.IsExternalLogin)
                {
                    Debug.Assert(externalLoginInfo != null);

                    if (string.Equals(externalLoginInfo.Principal.FindFirstValue(ClaimTypes.Email), model.EmailAddress, StringComparison.OrdinalIgnoreCase))
                    {
                        user.IsEmailConfirmed = true;
                    }

                    user.Logins = new List <UserLogin>
                    {
                        new UserLogin
                        {
                            LoginProvider = externalLoginInfo.LoginProvider,
                            ProviderKey   = externalLoginInfo.ProviderKey,
                            TenantId      = user.TenantId
                        }
                    };
                }

                await _unitOfWorkManager.Current.SaveChangesAsync();

                Debug.Assert(user.TenantId != null);

                var tenant = await _tenantManager.GetByIdAsync(user.TenantId.Value);

                // Directly login if possible
                if (user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin))
                {
                    AbpLoginResult <Tenant, User> loginResult;
                    if (externalLoginInfo != null)
                    {
                        loginResult = await _logInManager.LoginAsync(externalLoginInfo, tenant.TenancyName);
                    }
                    else
                    {
                        loginResult = await GetLoginResultAsync(user.UserName, model.Password, tenant.TenancyName);
                    }

                    if (loginResult.Result == AbpLoginResultType.Success)
                    {
                        await _signInManager.SignInAsync(loginResult.Identity, false);

                        return(Redirect(GetAppHomeUrl()));
                    }

                    Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result);
                }

                //Welcome Email
                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                var callbackUrlMessage = Url.Action(nameof(ConfirmEmail), "Account", new { token = code, email = user.EmailAddress }, protocol: HttpContext.Request.Scheme);
                try
                {
                    var welcomeModel = new WelcomeNotificationUserDto()
                    {
                        FullName = user.FullName,
                        Email    = user.EmailAddress,
                        UserName = user.UserName,
                        Message  = callbackUrlMessage
                    };
                    await _notificationManager.SendWelcomeEmail(welcomeModel);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                return(View("RegisterResult", new RegisterResultViewModel
                {
                    TenancyName = tenant.TenancyName,
                    NameAndSurname = user.Name + " " + user.Surname,
                    UserName = user.UserName,
                    EmailAddress = user.EmailAddress,
                    IsEmailConfirmed = user.IsEmailConfirmed,
                    IsActive = user.IsActive,
                    IsEmailConfirmationRequiredForLogin = isEmailConfirmationRequiredForLogin
                }));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.ErrorMessage = ex.Message;
                model.GenderList     = GetGenderSelectListItem();
                return(View("Register", model));
            }
        }