【问题标题】:E-mail is not send with ASP.NET Identity Framework不使用 ASP.NET Identity Framework 发送电子邮件
【发布时间】:2017-06-22 01:10:34
【问题描述】:

我正在使用此代码发送电子邮件以重置用户密码:

//
        // POST: /Account/ForgotPassword
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<JsonResult> ForgotPassword(ForgotPasswordViewModel model, bool CaptchaValid)
        {
            string mensaje = String.Empty;

            if (ModelState.IsValid)
            {
                if (!CaptchaValid)
                    mensaje = "ERROR: Captcha inválido.";
                else
                {
                    var user = await UserManager.FindByEmailAsync(model.Email);
                    if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
                    {
                        mensaje = "ERROR: La dirección de correo electrónico no está registrada.";
                    }
                    else
                    {
                        var provider = new DpapiDataProtectionProvider("WebAttendance");
                        UserManager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser, string>(provider.Create("UserToken")) as IUserTokenProvider<ApplicationUser, string>;
                        string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
                        var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                        await UserManager.SendEmailAsync(user.Id, "Reset Password", "Por favor, cambie su contraseña al hacer click <a href=\"" + callbackUrl + "\">aquí</a>");
                        return Json("INFO: Se envió un mail a su cuenta de correo con instrucciones para cambiar su contraseña.");
                    }
                }
            }

            // If we got this far, something failed, redisplay form
            return Json(mensaje);
        }

上面的代码运行没有任何错误,但实际上并没有发送电子邮件。

这是 Web.config 条目:

  <system.net>
    <mailSettings>
      <smtp from="info@xxx.com">
        <network host="mail.desytec.cl" password="xxxx" port="587" userName="yyy@xxx.cl"  enableSsl="false"/>
      </smtp>
    </mailSettings>
  </system.net>

顺便说一句,在阅读一些帖子时,我知道我必须在 App_Start 中有 IdentityConfig.cs 文件,但该文件丢失了。可能是这个原因吗?

【问题讨论】:

  • 您在代码中的哪个位置发送电子邮件?你在哪里初始化 smtp 并使用 smtp 配置发送电子邮件?
  • 我认为这是由 UserManager.SendEmailAsync 调用自动完成的
  • @YuriS 我以前读过。看看我写的关于 IdentityConfig.cs 的内容。但是,我已经使用该帖子中显示的代码手动添加了该文件,但它不起作用。
  • 如果您没有该文件,则意味着您没有正确创建该项目。仅仅添加它是不够的。有一些代码设置。例如在 public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context) 应该调用 var manager = new ApplicationUserManager(new UserStore(context.Get()));然后 manager.EmailService = new EmailService();我会正确地重新创建项目

标签: c# asp.net email asp.net-identity


【解决方案1】:

您可能已经得到了答案,但这是 Google 向我展示的第一篇帖子,所以为了完整起见,我正在回答它。

查看App_Start 文件夹中的IdentityConfig.cs 文件。您应该会找到类似于以下内容的代码:

public class EmailService : IIdentityMessageService {
    public Task SendAsync(IdentityMessage message) {
        // Plug in your email service here to send an email.
        return Task.FromResult(0);
    }
}

我误解了其他几个帖子,并认为我必须使用上面的代码创建一个新类。相反,您需要更新此方法以使用您想使用的任何电子邮件服务发送电子邮件。

我最终得到了类似的东西,但并不完全如此,所以你必须测试这是否真的适合你。

// code from https://stackoverflow.com/questions/40674457/how-to-configure-sender-email-credentials-for-asp-net-identity-usermanager-sende
public async Task SendAsync(IdentityMessage message) {
    // Plug in your email service here to send an email.
    SmtpClient client = new SmtpClient();
    await client.SendMailAsync("email from web.config here",
                                message.Destination,
                                message.Subject,
                                message.Body);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多