我的ASP.Net代码能否从sendgrid获得电子邮件已发送的确认?
我在应用程序中使用了以下代码:我的ASP.Net代码能否从sendgrid获得电子邮件已发送的确认?,asp.net,asp.net-mvc,email,asp.net-web-api,sendgrid,Asp.net,Asp.net Mvc,Email,Asp.net Web Api,Sendgrid,我在应用程序中使用了以下代码: private async Task configSendGridasync(IdentityMessage message) { var myMessage = new SendGridMessage(); myMessage.AddTo(message.Destination); myMessage.From = new System.Net.Mail.MailAddress(
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();
}
公共异步任务寄存器(寄存器绑定模型)
{
var user=new ApplicationUser()
{
Email=model.Email,
FirstName=model.FirstName,
LastName=model.LastName,
RoleId=(int)ERole.Student,
用户名=model.UserName
};
var result=await UserManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
var code=wait UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl=model.Server+
“/index.html”+
“?加载=确认邮件”+
“&userId=“+user.Id+
“&code=“+HttpUtility.UrlEncode(代码);
等待UserManager.SendEmailAsync(user.Id,“确认您的帐户”,“请单击此链接确认您的帐户:”);
}
如果(!result.successed)
{
返回GetErrorResult(结果);
}
返回Ok();
}
有没有办法从sendgrid获得消息已发送或任何其他信息的确认信息?我认为sendgrid没有被设置为提供响应。但是,作为黑客,您可以通过向configSendGridasync类中添加以下代码来对自己进行密件抄送(因此至少知道电子邮件已发出
.
.
.
//this is your old code...
myMessage.Text=message.Body;
myMessage.Html = message.Body;
//Add this...
myMessage.AddBcc("yourEmail@domain.com");
希望这有帮助 您需要使用将确认发送回您,以确认邮件已送达收件人
您需要设置一个页面来接受来自Sendgrid的事件,例如:
它将接受JSON,然后您将按照自己的意愿处理它。文档将能够指导您如何接受JSON,然后将其转换为您可以使用的对象
您将被发布的JSON示例:
{
"sg_message_id":"sendgrid_internal_message_id",
"email": "john.doe@sendgrid.com",
"timestamp": 1337197600,
"smtp-id": "<4FB4041F.6080505@sendgrid.com>",
"event": "delivered"
},
{
“sg\u消息\u id”:“sendgrid\u内部消息\u id”,
“电子邮件”:“约翰。doe@sendgrid.com",
“时间戳”:1337197600,
“smtp id”:“,
“事件”:“已交付”
},
您可以从SendGrid接收的事件有:已处理、已删除、已交付、已延迟、跳出、打开、单击、垃圾邮件报告、取消订阅、组取消订阅、组重新订阅
使用所有这些选项,您可以使用webhook来处理跳转,例如让某人找到您试图发送电子邮件的用户的正确电子邮件地址。通过SendGrid web API发送的电子邮件是异步的,因此要获得确认,您需要实现webhook。将把您选择的事件发布到您定义的URL。在这种情况下,您对“交付”事件感兴趣 服务器上需要一些代码来处理传入的webhook,并根据结果执行任何逻辑,例如记录传递的事件。有一些社区贡献的库可以让您轻松创建webhook处理程序。我建议在nuget上提供 然后将收到的帖子交给解析器以获取一个对象 由于您使用的是ASP.NET MVC,因此可以在控制器内部使用
[HttpPost]
方法从SendGrid接收POST数据。然后可以使用sendgrid webhooks解析它
从:
var parser=new-WebhookParser();
var events=parser.ParseEvents(json);
var webhookEvent=事件[0];
//共享基本属性
webhookEvent.EventType//Enum-事件的类型为Enum
WebVent.类别//IList-分配给事件的类别列表
webhookEvent.TimeStamp//DateTime—从unix时间转换的事件的日期时间
webhookEvent.UniqueParameters//IDictionary-键值唯一参数的映射
//事件特定属性
var clickEvent=webhookEvent作为clickEvent//基于EventType强制转换到父级
clickEvent.Url//string—用户单击的内容的url
我在SendGrid工作,所以如果有什么我可以帮忙的,请告诉我。我会等一段时间,检查所有答案,并接受最能为大家解释的答案。非常感谢您花时间回答这个问题。如何将webhook与我发送的内容配对?当我发送邮件时,没有
sg\u messge\u id
作为回复,我需要保留并与webhook return匹配。非常感谢。很高兴能得到SendGrid工作人员的帮助。我会等一会儿,测试你的解决方案,如果我有任何问题,请告诉你。
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