【发布时间】:2013-01-15 23:52:17
【问题描述】:
我正在从默认的 Internet 应用程序开始构建一个 MVC 4 应用程序。我的目标是在用户注册网站时向他们发送一封确认电子邮件,我已经成功发送了确认电子邮件,但是当我点击它时,帐户没有得到确认。
注意:我知道注册操作很拥挤,当我让它工作时,我会将其分成不同的文件。
*这就是我所做的:*
注册操作
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
try //CreateUserAndAccount
{
var token = WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true);
if (token != null)
{
var hosturl =
System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
"/Account/ConfirmAccount?token=" + token;
var confirmationLink = string.Format("<a href=\"{0}\">Clink to confirm your registration</a>",
hosturl);
var message = new MailMessage("komengem@gmail.com", model.UserName)
{
Subject = "Please confirm your email",
Body = confirmationLink
};
var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);
}
TempData["message"] = string.Format(
"Thank you for registering. An email has been sent to {0}. " +
"Please check your email and use the enclosed link to finish registration.", model.UserName);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
ConfirmAcount 操作
public ActionResult ConfirmAccount(string ID)
{
//return View("ConfirmAccount");
var confirmationToken = Request["token"];
if (!String.IsNullOrEmpty(confirmationToken))
{
var user = WebSecurity.CurrentUserName;
WebSecurity.ConfirmAccount(confirmationToken);
WebSecurity.Login(user, null);
return View("Welcome");
}
TempData["message"] = string.Format(
"Your account was not confirmed, please try again or contact the website adminstrator.");
return RedirectToAction("Index", "Home");
}
也试过了
public ActionResult ConfirmAccount(string ID)
{
if (string.IsNullOrEmpty(ID) || (!Regex.IsMatch(ID,
@"[0-9a-f]{8}\-([0-9a-f]{4}\-){3}[0-9a-f]{12}")))
{
TempData["tempMessage"] =
"The user account is not valid. Please try clicking the link in your email again.";
return View();
}
MembershipUser user = Membership.GetUser(new Guid(ID));
if (!user.IsApproved)
{
user.IsApproved = true;
Membership.UpdateUser(user);
FormsAuthentication.SetAuthCookie(user.UserName, false);
return RedirectToAction("Login");
}
WebSecurity.Logout();
TempData["tempMessage"] = "You have already confirmed your email address... please log in.";
return RedirectToAction("Login");
}
谁能告诉我如何使这项工作,或者建议一种不同的方式来使这项工作?
【问题讨论】:
-
指定的字符串是什么?
model.UserName是someone@somewhere.com的形式吗? -
你没有设置邮件的发件人,这可能会有所不同
-
嗯,很明显这是
Webmail.Send()调用的问题,而不是其他问题。我会专注于让那个发挥作用。 -
@RobertHarvey 那么,我应该假设我所有的代码都在正确的位置吗?这是我最大的担心
-
也许这是个愚蠢的问题,但是您是否在本地机器上设置了邮件服务器?
标签: c# asp.net-mvc-4 ef-code-first security email-confirmation