public async Task <Transmission> RunAsync([QueueTrigger("send-emails")] SendEmailQueueItem sendEmailQueueItem, ILogger logger) { // create transmission object and assign partition and row keys. var transmission = new Transmission() { TransmittedOnUtc = DateTime.UtcNow, ReferenceToFeedbackRowKey = sendEmailQueueItem.ReferenceToFeedbackRowKey, ReferenceToReservationRowKey = sendEmailQueueItem.ReferenceToReservationRowKey, }; transmission.GeneratePartitionAndRowKeys(sendEmailQueueItem.ReciepientAddress, null); // add img element to html content for registering open events in this webhook uri. var body = AddWebhookUrl(sendEmailQueueItem.HtmlContent, $"asdf.net?tId={transmission.RowKey}"); var tries = 1; bool transmissionWasSuccessful = false; // make 3 attempts to send an email. do { try { await _emailUtil.SendEmailAsync(sendEmailQueueItem.ReciepientAddress, sendEmailQueueItem.Subject, body); transmissionWasSuccessful = true; } catch (Exception exc) { transmissionWasSuccessful = false; } finally { tries++; } } while (tries < 3 && !transmissionWasSuccessful); // update transmission's status upon transmission attempts. transmission.Status = transmissionWasSuccessful ? TransmissionStatus.Sent : TransmissionStatus.Unsuccessful; // return and add to transmissions table. return(transmission); }
public static async Task RunAsync([QueueTrigger("email-opened-wbhks")] string transmissionId, [Table("Transmissions")] CloudTable transmissionsTable, ILogger logger) { // create a new transmission with an updated opened status. var transmissionToUpdate = new Transmission() { Opened = true, }; // assign row and partition keys as the transmission id to updated in the table. transmissionToUpdate.GeneratePartitionAndRowKeys(); // insert or merge transmission as read. var insertOrMergeTableOperation = TableOperation.InsertOrMerge(transmissionToUpdate); // execute operation. await transmissionsTable.ExecuteAsync(insertOrMergeTableOperation); }