在管理员通过按钮提交后,我需要完成一项需要发送电子邮件确认的任务,但是我不明白我在哪里写错了以及为什么电子邮件没有发送。
我在发送网格(这是一个Gmail帐户)上验证了发件人,并将其复制到appsettings json
"SendGridKey": "SG.rrFAGo83SbqRvVZxxxxxxxxxxxxxxxxx"
我的代码如下:
EmailSender.cs
public class EmailSender : IEmailSender
{
public EmailOptions Options { get; set; }
public EmailSender(IOptions<EmailOptions> emailOptions)
{
Options = emailOptions.Value;
}
public Task SendEmailAsync(string email, string subject, string htmlMessage)
{
return Execute(Options.SendGridKey, subject, htmlMessage, email);
}
private Task Execute(string sendGridKey, string subject, string htmlMessage, string email)
{
var client = new SendGridClient(sendGridKey);
var msg = new SendGridMessage()
{
From = new EmailAddress("admin@vmfhotel.com", "VMF Hotel"),
Subject = subject,
PlainTextContent = htmlMessage,
HtmlContent = htmlMessage,
};
msg.AddTo(new EmailAddress(email));
try
{
return client.SendEmailAsync(msg);
}
catch (Exception ex)
{
}
return null;
}
}
在startup.cs中,我添加了:
//email service
services.AddSingleton<IEmailSender, EmailSender>();
services.Configure<EmailOptions>(Configuration);
我在控制器中的方法是异步的
public async Task <IActionResult> Change(int id)
{
var rsvItem = await _db.Reservation.FindAsync(id);
rsvItem.Status = "Approved";
await _db.SaveChangesAsync();
//email sender for confirmation email
string message = $"Hi {rsvItem.ClientName}," +
$"<p>Your reservation details at Hotel are:</p>" +
$"<p>Name:{rsvItem.ClientName}</p>" +
$"<p>Check in Date: {rsvItem.CheckInDate}</p>" +
$"<p>Check out Date: {rsvItem.CheckOutDate}</p>" +
$"<i>Bla bla bla </i>";
await _emailSender.SendEmailAsync(rsvItem.ClientEmail, "Reservation Confirmed", message);
return RedirectToAction("Index");
}
我没有任何错误,但是当我尝试调试时说:
+ SendGrid.BaseClient.SendEmailAsync returned Id = 453, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}" System.Runtime.CompilerServices.AsyncTaskMethodBuilder<SendGrid.Response>.AsyncStateMachineBox<SendGrid.BaseClient.<SendEmailAsync>d__22>
我在git上阅读了一篇文章,我认为我需要让私有任务执行异步
private async Task<Response> Execute(string sendGridKey, string subject, string htmlMessage, string email)
try
{
return await client.SendEmailAsync(msg);
}
I changed the From = new EmailAddress(" valid email@gmail.com", "VMF Hotel"),
使用有效的Gmail帐户
我检查了发送网格,但有一个请求,但没有发送
问题出在哪里?
任何建议都将不胜感激,并提前谢谢您!
答案 0 :(得分:0)
怎么样:
return await Execute(Options.SendGridKey, subject, htmlMessage, email);