专栏"电子邮件"在db startersite中不用于电子邮件,而是用于"个人号码" (最好离开的原因)。我已经为电子邮件添加了另一个专栏,名为" Courriel" (法语电子邮件)
现在的问题是,如果有人输入他的#34;个人号码"要更改密码,我的网站会尝试向此号码发送电子邮件,当然这是失败的(因为它不是有效的电子邮件地址)。
我希望密码重置页面能够验证"个人号码"并自动发送电子邮件到" Courriel"中的电子邮件地址。数据库的列。
这是我到目前为止所做的:
bool passwordSent = false;
var resetToken = "";
var email = Request.Form["email"] ?? Request.QueryString["email"];
Validation.RequireField("email", "Le champ numéro est obligatoire.");
if (IsPost) {
AntiForgery.Validate();
bool isValid = true;
if (Validation.IsValid()) {
if (WebSecurity.GetUserId(email) > -1 && WebSecurity.IsConfirmed(email)) {
resetToken = WebSecurity.GeneratePasswordResetToken(email); // Indiquez une date d'expiration pour le jeton (facultatif)
} else {
passwordSent = true;
isValid = false;
}
}
if (isValid) {
var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
var resetUrl = "http://xx.xx.xx.xx" + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
var db = Database.Open("StarterSite");
var sqlquery = "SELECT Courriel FROM UserProfile WHERE email = @0";
var mail = db.Query(sqlquery,WebSecurity.GetUserId(email));
WebMail.Send(
to: mail,
subject: "Réinitialisation de votre mot de passe",
body: "Utilisez ce jeton pour réinitialiser votre mot de passe : " + resetToken + @". Accédez à la page <a href=""" + HttpUtility.HtmlAttributeEncode(resetUrl) + @""">" + resetUrl + "</a> pour réinitialiser votre mot de passe."
);
passwordSent = true;
}
}
我也尝试过以下方法,但它仍无法正常工作:
if (isValid) {
var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
var resetUrl = "http://69.70.9.54" + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
var db = Database.Open("StarterSite");
var sqlquery = "SELECT Courriel FROM UserProfile WHERE Email = @0";
Courriel = db.QueryValue(sqlquery,WebSecurity.CurrentUserName);
我收到此错误
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.InvalidOperationException:收件人必须 指定。
如果有人可以给我一个快速提示,那将是非常好的。
答案 0 :(得分:0)
是的,我今天早上醒来时提出了一个想法...而不是引用电子邮件= @ 0我将它提到UserId = @ 0然后我将QueryValue更改为Websecurity.GetUserId = D它可以工作
var db = Database.Open("StarterSite");
var sqlquery = "SELECT Courriel FROM UserProfile WHERE UserId = @0";
Courriel = db.QueryValue(sqlquery,WebSecurity.GetUserId(email));