Skip to content

Instantly share code, notes, and snippets.

@danielplawgo
Created February 10, 2021 07:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielplawgo/533a81afde36dae31d24b354b8e99a4b to your computer and use it in GitHub Desktop.
Save danielplawgo/533a81afde36dae31d24b354b8e99a4b to your computer and use it in GitHub Desktop.
SendGrid - Webhook
"SendGrid": {
"ApiKey": "apikey",
"SenderEmail": "blogtest@plawgo.pl",
"SenderName": "Blog PROGRAMUJE.NET",
"TemplateId": "templateid",
"WebhooksKey": "publickey"
}
private async Task<IActionResult> ProcessResponse(Response response)
{
var responseContent = await response.Body.ReadAsStringAsync();
if (string.IsNullOrEmpty(responseContent) == false)
{
return BadRequest(responseContent);
}
var header = response.Headers.FirstOrDefault(h => h.Key == "X-Message-Id");
var messageId = header.Value?.FirstOrDefault();
_logger.LogInformation($@"MessageId: {messageId}");
return Ok(new
{
MessageId = messageId
});
}
public class SendGridConfig
{
public string ApiKey { get; set; }
public string SenderEmail { get; set; }
public string SenderName { get; set; }
public string TemplateId { get; set; }
public string WebhooksKey { get; set; }
}
[Route("api/[controller]")]
[ApiController]
public class SendGridWebhooksController : ControllerBase
{
private readonly SendGridConfig _config;
private readonly ILogger<SendGridWebhooksController> _logger;
public SendGridWebhooksController(IOptions<SendGridConfig> config,
ILogger<SendGridWebhooksController> logger)
{
_logger = logger;
_config = config.Value;
}
[HttpPost]
[Route("InboundEmail")]
public async Task<IActionResult> ReceiveInboundEmail()
{
try
{
var signature = Request.Headers[WebhookParser.SIGNATURE_HEADER_NAME];
var timestamp = Request.Headers[WebhookParser.TIMESTAMP_HEADER_NAME];
var parser = new WebhookParser();
var events = await parser.ParseSignedEventsWebhookAsync(Request.Body, _config.WebhooksKey, signature, timestamp);
_logger.LogInformation(JsonConvert.SerializeObject(events));
return Ok();
}
catch (SecurityException e)
{
return BadRequest();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment