我的 ASP.Net 代码能否从 sendgrid 确认电子邮件已发送?
Can my ASP.Net Code get confirmation from sendgrid that an email has been sent?
我有在我的应用程序中使用的代码:
private async Task configSendGridasync(IdentityMessage message)
{
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new System.Net.Mail.MailAddress(
"a@b.com", "AB Registration");
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);
}
}
在这里调用:
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
var user = new ApplicationUser()
{
Email = model.Email,
FirstName = model.FirstName,
LastName = model.LastName,
RoleId = (int)ERole.Student,
UserName = model.UserName
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = model.Server +
"/index.html" +
"?load=confirmEmail" +
"&userId=" + user.Id +
"&code=" + HttpUtility.UrlEncode(code);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
}
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
有什么方法可以让我从 sendgrid 确认消息已发送或任何其他信息?
我认为 SendGrid 未设置为提供响应。但是,作为黑客,您可以通过将以下代码添加到您的 configSendGridasync class
来自己密件抄送(因此至少知道电子邮件已经发送出去)
.
.
.
//this is your old code...
myMessage.Text=message.Body;
myMessage.Html = message.Body;
//Add this...
myMessage.AddBcc("yourEmail@domain.com");
希望对您有所帮助!
您需要使用 Event Webhooks 来获得发回给您的确认信息,以确认邮件已送达收件人。
您需要设置一个页面来接受来自 Sendgrid 的事件,例如:
https://yourdomain.com/email/hook which would accept JSON which you would then deal with however you want. The Json.NET 文档将能够指导您如何接受 JSON 然后将其变成您可以使用的对象。
例如 JSON 你将被发布:
{
"sg_message_id":"sendgrid_internal_message_id",
"email": "john.doe@sendgrid.com",
"timestamp": 1337197600,
"smtp-id": "<4FB4041F.6080505@sendgrid.com>",
"event": "delivered"
},
您可以从 SendGrid 接收的事件是:已处理、已丢弃、已交付、已延迟、退回、打开、点击、垃圾邮件报告、取消订阅、群组取消订阅、群组重新订阅。
通过所有这些选项,您可以使用网络钩子来处理退回邮件,例如让某人找出您尝试发送电子邮件的用户的正确电子邮件地址。
通过 SendGrid 网络 API 发送的电子邮件是异步的,因此要获得确认,您需要实施网络钩子。 Event Webhook 会将您选择的 post 事件转换为您定义的 URL。在这种情况下,您对 "delivered" 事件感兴趣。
您的服务器需要一些代码来处理传入的 webhook 并根据结果执行任何逻辑,例如记录传送的事件。有一些社区贡献的库可以让您轻松创建 webhook 处理程序。我建议 sendgrid-webhooks,它在 nuget 上可用。
然后把传入的POST交给解析器取回一个对象
由于您使用的是 ASP.NET MVC,因此您可以在控制器内部使用 [HttpPost]
方法从 SendGrid 接收 POST 数据。然后你可以使用 sendgrid-webhooks 解析它。
var parser = new WebhookParser();
var events = parser.ParseEvents(json);
var webhookEvent = events[0];
//shared base properties
webhookEvent.EventType; //Enum - type of the event as enum
webhookEvent.Categories; //IList<string> - list of categories assigned ot the event
webhookEvent.TimeStamp; //DateTime - datetime of the event converted from unix time
webhookEvent.UniqueParameters; //IDictionary<string, string> - map of key-value unique parameters
//event specific properties
var clickEvent = webhookEvent as ClickEvent; //cast to the parent based on EventType
clickEvent.Url; //string - url on what the user has clicked
我在 SendGrid 工作,如果有什么我可以帮忙的,请告诉我。
我有在我的应用程序中使用的代码:
private async Task configSendGridasync(IdentityMessage message)
{
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new System.Net.Mail.MailAddress(
"a@b.com", "AB Registration");
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);
}
}
在这里调用:
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
var user = new ApplicationUser()
{
Email = model.Email,
FirstName = model.FirstName,
LastName = model.LastName,
RoleId = (int)ERole.Student,
UserName = model.UserName
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = model.Server +
"/index.html" +
"?load=confirmEmail" +
"&userId=" + user.Id +
"&code=" + HttpUtility.UrlEncode(code);
await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>");
}
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
有什么方法可以让我从 sendgrid 确认消息已发送或任何其他信息?
我认为 SendGrid 未设置为提供响应。但是,作为黑客,您可以通过将以下代码添加到您的 configSendGridasync class
来自己密件抄送(因此至少知道电子邮件已经发送出去) .
.
.
//this is your old code...
myMessage.Text=message.Body;
myMessage.Html = message.Body;
//Add this...
myMessage.AddBcc("yourEmail@domain.com");
希望对您有所帮助!
您需要使用 Event Webhooks 来获得发回给您的确认信息,以确认邮件已送达收件人。
您需要设置一个页面来接受来自 Sendgrid 的事件,例如:
https://yourdomain.com/email/hook which would accept JSON which you would then deal with however you want. The Json.NET 文档将能够指导您如何接受 JSON 然后将其变成您可以使用的对象。
例如 JSON 你将被发布:
{
"sg_message_id":"sendgrid_internal_message_id",
"email": "john.doe@sendgrid.com",
"timestamp": 1337197600,
"smtp-id": "<4FB4041F.6080505@sendgrid.com>",
"event": "delivered"
},
您可以从 SendGrid 接收的事件是:已处理、已丢弃、已交付、已延迟、退回、打开、点击、垃圾邮件报告、取消订阅、群组取消订阅、群组重新订阅。
通过所有这些选项,您可以使用网络钩子来处理退回邮件,例如让某人找出您尝试发送电子邮件的用户的正确电子邮件地址。
通过 SendGrid 网络 API 发送的电子邮件是异步的,因此要获得确认,您需要实施网络钩子。 Event Webhook 会将您选择的 post 事件转换为您定义的 URL。在这种情况下,您对 "delivered" 事件感兴趣。
您的服务器需要一些代码来处理传入的 webhook 并根据结果执行任何逻辑,例如记录传送的事件。有一些社区贡献的库可以让您轻松创建 webhook 处理程序。我建议 sendgrid-webhooks,它在 nuget 上可用。
然后把传入的POST交给解析器取回一个对象
由于您使用的是 ASP.NET MVC,因此您可以在控制器内部使用 [HttpPost]
方法从 SendGrid 接收 POST 数据。然后你可以使用 sendgrid-webhooks 解析它。
var parser = new WebhookParser();
var events = parser.ParseEvents(json);
var webhookEvent = events[0];
//shared base properties
webhookEvent.EventType; //Enum - type of the event as enum
webhookEvent.Categories; //IList<string> - list of categories assigned ot the event
webhookEvent.TimeStamp; //DateTime - datetime of the event converted from unix time
webhookEvent.UniqueParameters; //IDictionary<string, string> - map of key-value unique parameters
//event specific properties
var clickEvent = webhookEvent as ClickEvent; //cast to the parent based on EventType
clickEvent.Url; //string - url on what the user has clicked
我在 SendGrid 工作,如果有什么我可以帮忙的,请告诉我。