/// <summary>
        /// 发送短信验证码
        /// </summary>
        /// <param name="templateCode"></param>
        /// <param name="phoneNumber"></param>
        /// <param name="verifyCode"></param>
        /// <returns></returns>
        protected virtual async Task SendPhoneVerifyMessageAsync(string templateCode, string phoneNumber, string verifyCode)
        {
            var sendMessage = new SmsMessage(phoneNumber, "SendSmsMessage");

            sendMessage.Properties.Add("code", verifyCode);
            sendMessage.Properties.Add("TemplateCode", templateCode);
            await SmsSender.SendAsync(sendMessage);
        }
コード例 #2
0
        public async Task Send_Test(string code)
        {
            var signName = Configuration["Aliyun:Sms:Sender:SignName"];
            var phone    = Configuration["Aliyun:Sms:Sender:PhoneNumber"];
            var template = Configuration["Aliyun:Sms:Sender:TemplateCode"];

            await SmsSender.SendAsync(
                signName,
                template,
                phone,
                new Dictionary <string, object>
            {
                { "code", code }
            });
        }
コード例 #3
0
        public virtual async Task <IActionResult> OnPostAsync()
        {
            var user = await SignInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                Alerts.Warning("双因素认证失败,用户未登录!");
                return(Page());
            }

            if (SendCodeInput.SelectedProvider == "Authenticator")
            {
                var verifyAuthenticatorCodeInput = new VerifyAuthenticatorCodeInputModel
                {
                    ReturnUrl  = SendCodeInput.ReturnUrl,
                    RememberMe = SendCodeInput.RememberMe
                };
                return(RedirectToPage("VerifyAuthenticatorCode", verifyAuthenticatorCodeInput));
            }

            var code = await UserManager.GenerateTwoFactorTokenAsync(user, SendCodeInput.SelectedProvider);

            if (string.IsNullOrWhiteSpace(code))
            {
                Alerts.Warning("验证码生成失败,请联系系统管理员!");
                return(Page());
            }

            var message = "Your security code is: " + code;

            if (SendCodeInput.SelectedProvider == "Email")
            {
                await EmailSender.SendAsync(await UserManager.GetEmailAsync(user), "Security Code", message);
            }
            else if (SendCodeInput.SelectedProvider == "Phone")
            {
                await SmsSender.SendAsync(await UserManager.GetPhoneNumberAsync(user), message);
            }

            var verifyCodeInput = new VerifyCodeInputModel
            {
                Provider   = SendCodeInput.SelectedProvider,
                ReturnUrl  = SendCodeInput.ReturnUrl,
                RememberMe = SendCodeInput.RememberMe
            };

            return(RedirectToPage("VerifyCode", verifyCodeInput));
        }
コード例 #4
0
        public async Task HandleAsync(HttpContext context)
        {
            var requestConfig = await Serializer.DeserializeStreamAsync <AppConfig>(context.Request.Body)
                                .ConfigureAwait(false);

            // due to API limits, we may want to temporarily disable api requests
            if (requestConfig.PushBullet?.SkipSend is bool smsSend)
            {
                SmsSender.SkipSend = smsSend;
            }

            var skipYouTubeSend = requestConfig.YouTube?.SkipSend ?? Config.Value.YouTube?.SkipSend
                                  ?? throw new NullReferenceException(nameof(AppConfig.YouTube));

            var pageCount = requestConfig.YouTube?.PageCount ?? Config.Value.YouTube?.PageCount
                            ?? throw new NullReferenceException(nameof(AppConfig.YouTube));
            var numbers = requestConfig.Numbers ?? Config.Value.Numbers
                          ?? throw new NullReferenceException(nameof(AppConfig.Numbers));
            var siteUri = requestConfig.SiteUri ?? Config.Value.SiteUri
                          ?? throw new NullReferenceException(nameof(AppConfig.SiteUri));

            var random = new Random(Guid.NewGuid().GetHashCode());

            var videos = await GetVideoUrls(pageCount, skipYouTubeSend).ToArrayAsync().ConfigureAwait(false);

            var video = videos.RandomItem();

            var message  = $"{_greetings.RandomItem()}, {_names.RandomItem()}! Checkout this cool knife sharpening video!\n\n{video}";
            var message2 = $"If you're tired of these messages, you can unsubscribe using this link: {siteUri}";

            // send each message as a separate sms, rather than a single mms
            foreach (var number in numbers)
            {
                var result = await SmsSender.SendAsync(message, number).ConfigureAwait(false);

                await SmsSender.AwaitCompleteAsync(result).ConfigureAwait(false);

                // need a delay between SMS message or the second may not go through
                await Task.Delay(1000);

                await SmsSender.SendAsync(message2, number).ConfigureAwait(false);

                await Task.Delay(1000);
            }
        }
コード例 #5
0
        protected override async Task PublishAsync(
            NotificationInfo notification,
            IEnumerable <UserIdentifier> identifiers,
            CancellationToken cancellationToken = default)
        {
            if (!identifiers.Any())
            {
                return;
            }

            var templateCode = notification.Data.TryGetData("TemplateCode");

            if (templateCode == null)
            {
                Logger.LogWarning("sms template code is empty, can not send sms message!");
                return;
            }

            var sendToPhones = await UserPhoneFinder.FindByUserIdsAsync(identifiers.Select(usr => usr.UserId), cancellationToken);

            if (!sendToPhones.Any())
            {
                return;
            }
            var message = new SmsMessage(sendToPhones.JoinAsString(","), "SmsNotification");

            // TODO: 后期增强功能,增加短信模板、通知模板功能
            message.Properties.Add("TemplateCode", templateCode);
            message.Properties.Add("SignName", notification.Data.TryGetData("SignName"));

            foreach (var property in notification.Data.Properties)
            {
                // TODO: 可以扩展下存储短信模板,根据模板变量自动匹配
                // 必须加上需要发送短信的前缀让用户自己选择是否发送短信,因为资费太贵了...
                if (property.Key.StartsWith(Options.TemplateParamsPrefix))
                {
                    message.Properties.Add(property.Key.Replace(Options.TemplateParamsPrefix, ""), property.Value);
                }
            }

            await SmsSender.SendAsync(message);
        }
コード例 #6
0
 public static void SendSmsUserThread(string smsTo, params string[] smsContent)
 {
     SmsSender.SendAsync(smsTo, "ReminderCode", smsContent);
 }
コード例 #7
0
        public virtual async Task <IActionResult> OnPostAsync()
        {
            var user = await SignInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                Alerts.Warning(L["TwoFactorAuthenticationInvaidUser"]);
                return(Page());
            }

            if (Input.SelectedProvider == "Authenticator")
            {
                // 用户通过邮件/短信链接进入授权页面
                return(RedirectToPage("VerifyAuthenticatorCode", new
                {
                    returnUrl = ReturnUrl,
                    returnUrlHash = ReturnUrlHash,
                    rememberMe = RememberMe
                }));
            }
            // 生成验证码
            var code = await UserManager.GenerateTwoFactorTokenAsync(user, Input.SelectedProvider);

            if (string.IsNullOrWhiteSpace(code))
            {
                Alerts.Warning(L["InvaidGenerateTwoFactorToken"]);
                return(Page());
            }

            if (Input.SelectedProvider == "Email")
            {
                var appName = "MVC"; // TODO: 跟随Abp框架的意思变动
                await AccountEmailVerifySender
                .SendMailLoginVerifyLinkAsync(
                    user, code, appName,
                    Input.SelectedProvider,
                    RememberMe, ReturnUrl, ReturnUrlHash);
            }
            else if (Input.SelectedProvider == "Phone")
            {
                var phoneNumber = await UserManager.GetPhoneNumberAsync(user);

                var templateCode = await SettingProvider.GetOrNullAsync(AccountSettingNames.SmsSigninTemplateCode);

                Check.NotNullOrWhiteSpace(templateCode, nameof(AccountSettingNames.SmsSigninTemplateCode));

                // TODO: 以后扩展短信模板发送
                var smsMessage = new SmsMessage(phoneNumber, code);
                smsMessage.Properties.Add("code", code);
                smsMessage.Properties.Add("TemplateCode", templateCode);

                await SmsSender.SendAsync(smsMessage);
            }

            return(RedirectToPage("VerifyCode", new
            {
                provider = Input.SelectedProvider,
                returnUrl = ReturnUrl,
                returnUrlHash = ReturnUrlHash,
                rememberMe = RememberMe
            }));
        }