SendGrid: Get send confirmation and delivery confirmation

Viewed 22

I have an Azure Function that sends emails via SendGrid. I would like to track if SendGrid sent the email and maybe get a delivery receipt.

My implemention works as follows: I have configured a Service Bus queue to send messages to my

[FunctionName("SendEmail")]
public static void Run([ServiceBusTrigger("%emailqueue_qa%", Connection = xxxxxxxxxx)] string queueItem,
    [SendGrid(ApiKey = xxxxxxxxxx)] out SendGridMessage sendGridMessage,
    ILogger log)
{
  EmailRequestBody emailRequestBody = JsonConvert.DeserializeObject<EmailRequestBody>(queueItem);

  List<EmailAddress> recipients = new List<EmailAddress>();
  List<EmailAddress> carbonCopyList = new List<EmailAddress>();

  if (emailRequestBody.RecipientList != null)
  {
    foreach (string recipient in emailRequestBody.RecipientList)
    {
      recipients.Add(new EmailAddress(recipient));
    }
  }
  else
  {
    log.LogInformation($"Missing : {emailRequestBody.RecipientList.GetType().Name}");
    sendGridMessage = null;
    return;
  }

  if (string.IsNullOrEmpty(emailRequestBody.SenderAddress))
  {
    emailRequestBody.SenderAddress = Environment.GetEnvironmentVariable(EmailConst.SENDERADDRESS);
  }

  if (string.IsNullOrEmpty(emailRequestBody.SenderName))
  {
    emailRequestBody.SenderName = Environment.GetEnvironmentVariable(EmailConst.SENDERNAME);
  }

  sendGridMessage = new SendGridMessage
  {
    From = new EmailAddress(emailRequestBody.SenderAddress, emailRequestBody.SenderName)
  };

  sendGridMessage.AddTos(recipients);
  sendGridMessage.SetSubject(emailRequestBody.Subject);

  if (emailRequestBody.CarbonCopyList != null)
  {
    foreach (string carbonCopy in emailRequestBody.CarbonCopyList)
    {
      recipients.Add(new EmailAddress(carbonCopy));
    }
    sendGridMessage.AddCcs(carbonCopyList);
  }

  sendGridMessage.AddContent("text/html", emailRequestBody.HTMLMailMessage);

  log.LogWarning("Successfully sent email.");
}
0 Answers
Related