public IActionResult GetMail(string mailto, string code) { CheckDataSourceParameter(); if (SqlMap.Params.GetValue("checkvalid", true)) { string validCode = GetValidCode(App.GetQuery("type", "root"), true); if (!code.HasValue() || validCode != code.ToUpper()) { throw new AceException("验证码输入错误"); } } var rndStr = RandomHelper.GetRandomNumber(6); var key = "mail_" + mailto; var keySending = "mail-send-" + mailto; if (App.Cache.GetString(keySending) != null) { throw new AceException("不能频繁获取验证码!"); } var expired = SqlMap.Params.GetValue("mail_expired", 15); var times = SqlMap.Params.GetValue("sms_retrytimes", 5); var success = false; var mail = cloudService.GetMailService(); for (var i = 0; i < times; i++) { try { mail.Send(mailto, "邮件验证码", $"这是你的验证码:{rndStr},请在{expired}分钟内输入提交!"); logger.LogDebug($"Send valid code \"{rndStr}\" to \"{mailto}\""); success = true; break; } catch (Exception ex) { logger.LogError($"Send valid code to \"{mailto}\" with error: {ex.GetMessage()}"); } } if (!success) { throw new AceException(SqlMap.Params.GetValue("mail_errservice", "")); } App.Cache.SetString(key, rndStr, opts => { opts.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(expired); }); App.Cache.SetString(keySending, "1", opts => { opts.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1); }); return(Ok(null)); }