Asp.net

我的 ASP.Net 程式碼可以從 sendgrid 獲得電子郵件已發送的確認嗎?

  • July 1, 2017

我有我在我的應用程序中使用的這段程式碼:

   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 解析它。

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 工作,所以如果有什麼我可以幫忙的,請告訴我。

引用自:https://stackoverflow.com/questions/31218563