使用sendgrid不会收到任何电子邮件,也不会收到任何错误消息
本文关键字:任何 错误 消息 电子邮件 使用 sendgrid | 更新日期: 2023-09-27 18:26:21
我有一个新的MVC项目,在本文之后,我将在注册sendgrid时发送邮件。http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset
在项目的根目录中创建了一个新的文件夹"manager"。在该文件夹中,我创建了一个新文件EmailService.cs
,其中包含以下代码。
public class EmailService : IIdentityMessageService
{
public async Task SendAsync(IdentityMessage message)
{
await configSendGridasync(message);
}
// Use NuGet to install SendGrid (Basic C# client lib)
private async Task configSendGridasync(IdentityMessage message)
{
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new System.Net.Mail.MailAddress(
"mymail@gmail.com", "Joe S.");
myMessage.Subject = message.Subject;
myMessage.Text = message.Body;
myMessage.Html = message.Body;
var credentials = new NetworkCredential(
ConfigurationManager.AppSettings["mailAccount"],
ConfigurationManager.AppSettings["mailPassword"]
);
// Create a Web transport for sending email.
var transportWeb = new Web(credentials);
// Send the email.
if (transportWeb != null)
{
await transportWeb.DeliverAsync(myMessage);
}
else
{
Trace.TraceError("Failed to create Web transport.");
await Task.FromResult(0);
}
}
}
将其添加到web.config
中,并使用正确的值
<add key="mailAccount" value="xyz" />
<add key="mailPassword" value="password" />
并用这个修改了我的注册控制器
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>");
我什么也没做。我可以注册。没有错误,也没有电子邮件。当项目启动时,我需要添加EmailService
吗?为什么?
将我的代码添加到identityconfig中,现在它可以工作了。
我遇到了同样的问题。事实证明,我的问题是,在使用SendGrid.Helpers.Mail.MailHelper类生成消息时,我为纯文本和html内容传递了空字符串。一旦我添加了这些,消息就成功发送了。
我以前没有使用过Sendgrid,但看起来您缺少了他们在第14行列出的API密钥:
var credentials = new NetworkCredential(api_user, api_key);
对于那些可能正在竭尽全力发送第一封SendGrid电子邮件的人,这里简要介绍一下我的经历:
我可以通过.NET SmtpClient
发送电子邮件,而不会收到任何错误消息。然而,这些电子邮件似乎在SendGrid内部永久丢失,因为它们既没有发送,也没有出现在SendGrid面板上的"今天发送的电子邮件"计数器中。我没有看到任何迹象表明我的帐户正在被配置。然而,当我第二天再次尝试时,我的电子邮件收到了。