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.");
}