Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }