Asp.net
我的 ASP.Net 程式碼可以從 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 Web API 發送的電子郵件是非同步的,因此要獲得確認,您需要實現一個 webhook。Event Webhook會將您選擇的事件發佈到您定義的 URL。在這種情況下,您對“已傳遞”事件感興趣。
您需要在伺服器上使用一些程式碼來處理傳入的 webhook 並根據結果執行任何邏輯,例如記錄傳遞的事件。有一些社區貢獻的庫可以讓您輕鬆創建 webhook 處理程序。我建議使用 nuget 上的 sendgrid- webhooks 。
然後獲取傳入的 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 工作,所以如果有什麼我可以幫忙的,請告訴我。