ASP净MVC sendgrid帐户电子邮件验证 [英] asp net mvc sendgrid account email verification
问题描述
我试图发送自动发送邮件,用户完成注册,我测试我的应用程序的本地主机上
I'm trying to send automatic email to user to complete registration, I'm testing my app on local host
这是我的注册控制器:
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Comment the following line to prevent log in until the user is confirmed.
// await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
// Uncomment to debug locally
// TempData["ViewBagLink"] = callbackUrl;
ViewBag.Message = "Check your email and confirm your account, you must be confirmed "
+ "before you can log in.";
return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
这是我的电子邮件服务类
this is my Email service class
public class EmailService : IIdentityMessageService
{
public async Task SendAsync(IdentityMessage message)
{
// Create the email object first, then add the properties.
var myMessage = new SendGridMessage();
// this defines email and name of the sender
myMessage.From = new MailAddress("no-reply@example.info", "My Example Admin");
// set where we are sending the email
myMessage.AddTo(message.Destination);
myMessage.Subject = message.Subject;
// make sure all your messages are formatted as HTML
myMessage.Html = message.Body;
// Create credentials, specifying your SendGrid username and password.
var credentials = new NetworkCredential(
ConfigurationManager.AppSettings["SendGridLogin"],
ConfigurationManager.AppSettings["SendGridPassword"]
);
// Create an Web transport for sending email.
var transportWeb = new Web(credentials);
// Send the email.
await transportWeb.DeliverAsync(myMessage);
}
}
我使用SendGridSmtpApi 1.3.1&安培; SendGrid C#cilent库6.3.4。
问题出在哪里,为什么不工作?
I'm using SendGridSmtpApi 1.3.1 & SendGrid C# cilent library 6.3.4 . Where is the problem , why this don't work ?
推荐答案
由于您正在异步调用,有可能你的程序是调用一个机会完成之前退出。因此,以下是必要的,如果你想阻止,直到通话结束,你的程序进行前:
Because you are making an asynchronous call, it is possible your program is exiting before the call a chance to complete. Therefore, the following is necessary if you would like to block until the call is complete, before your program proceeds:
transportWeb.DeliverAsync(message).Wait();
另外,你可以从调用函数取决于您期望的结果等待()或结果。
Alternatively, you can "Wait() or Result" from the calling function depending on your desired result.
有关更多信息,请查看以下内容:
For more information, check out the following:
<一个href=\"http://stackoverflow.com/questions/24623120/await-on-a-completed-task-same-as-task-result\">Await在已完成的任务一样task.Result?
这篇关于ASP净MVC sendgrid帐户电子邮件验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!