/// <inheritdoc/> public async Task ProcessNotificationEntities(string applicationName, IList <EmailNotificationItemEntity> notificationEntities) { var traceprops = new Dictionary <string, string>(); traceprops[AIConstants.Application] = applicationName; traceprops[AIConstants.MeetingNotificationCount] = notificationEntities?.Count.ToString(CultureInfo.InvariantCulture); this.logger.TraceInformation($"Started {nameof(this.ProcessNotificationEntities)} method of {nameof(DirectSendNotificationProvider)}.", traceprops); if (notificationEntities is null || notificationEntities.Count == 0) { throw new ArgumentNullException(nameof(notificationEntities), "notificationEntities are null."); } foreach (var item in notificationEntities) { item.EmailAccountUsed = item.From; item.TryCount++; item.ErrorMessage = string.Empty; // Reset the error message on next retry. try { var sendForReal = this.mailSettings.Find(a => a.ApplicationName == applicationName).SendForReal; var toOverride = this.mailSettings.Find(a => a.ApplicationName == applicationName).ToOverride; MessageBody body = await this.emailManager.GetNotificationMessageBodyAsync(applicationName, item).ConfigureAwait(false); DirectSend.Models.Mail.EmailMessage message = item.ToDirectSendEmailMessage(body, this.directSendSetting); if (!sendForReal) { message.ToAddresses = toOverride.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries) .Select(torecipient => new DirectSend.Models.Mail.EmailAddress { Address = torecipient }).ToList(); message.CcAddresses = null; } await this.mailService.SendEmailAsync(message).ConfigureAwait(false); item.Status = NotificationItemStatus.Sent; } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { this.logger.WriteCustomEvent($"{AIConstants.CustomEventMailSendFailed} for notificationId: {item.NotificationId} "); item.Status = NotificationItemStatus.Failed; item.ErrorMessage = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; } } this.logger.TraceInformation($"Finished {nameof(this.ProcessNotificationEntities)} method of {nameof(DirectSendNotificationProvider)}.", traceprops); }
/// <inheritdoc/> public async Task ProcessMeetingNotificationEntities(string applicationName, IList <MeetingNotificationItemEntity> notificationEntities) { var traceprops = new Dictionary <string, string>(); traceprops[AIConstants.Application] = applicationName; traceprops[AIConstants.MeetingNotificationCount] = notificationEntities?.Count.ToString(CultureInfo.InvariantCulture); this.logger.TraceInformation($"Started {nameof(this.ProcessMeetingNotificationEntities)} method of {nameof(DirectSendNotificationProvider)}.", traceprops); if (notificationEntities is null || notificationEntities.Count == 0) { throw new ArgumentNullException(nameof(notificationEntities), "notificationEntities are null."); } foreach (var item in notificationEntities) { item.TryCount++; item.ErrorMessage = string.Empty; // Reset the error message on next retry. try { var sendForReal = this.mailSettings.Find(a => a.ApplicationName == applicationName).SendForReal; var toOverride = this.mailSettings.Find(a => a.ApplicationName == applicationName).ToOverride; DirectSend.Models.Mail.EmailMessage message = new DirectSend.Models.Mail.EmailMessage(); message.Subject = item.Subject; MessageBody body = await this.emailManager.GetMeetingInviteBodyAsync(applicationName, item).ConfigureAwait(false); message.FromAddresses = new List <DirectSend.Models.Mail.EmailAddress> { (item.From == this.directSendSetting?.FromAddress2) ? new DirectSend.Models.Mail.EmailAddress { Name = this.directSendSetting?.FromAddress2DisplayName, Address = this.directSendSetting?.FromAddress2 } : new DirectSend.Models.Mail.EmailAddress { Name = this.directSendSetting?.FromAddressDisplayName, Address = this.directSendSetting?.FromAddress }, }; if (!sendForReal) { message.ToAddresses = toOverride.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries) .Select(torecipient => new DirectSend.Models.Mail.EmailAddress { Address = torecipient }).ToList(); message.CcAddresses = null; } else { var toAddress = item.RequiredAttendees.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries) .Select(torecipient => new DirectSend.Models.Mail.EmailAddress { Address = torecipient }).ToList(); if (item.OptionalAttendees?.Length > 0) { toAddress.AddRange(item.OptionalAttendees.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries)? .Select(torecipient => new DirectSend.Models.Mail.EmailAddress { Address = torecipient }).ToList()); } message.ToAddresses = toAddress; } message.FileName = item.Attachments?.Select(e => e.FileName); message.FileContent = item.Attachments?.Select(e => e.FileBase64); message.Content = MeetingInviteUtilities.ConvertDirectSendMeetingInviteToBody(item, body.Content); message.Importance = (ImportanceType)Enum.Parse(typeof(ImportanceType), item.Priority.ToString()); await this.mailService.SendMeetingInviteAsync(message).ConfigureAwait(false); item.Status = NotificationItemStatus.Sent; } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { this.logger.WriteCustomEvent($"{AIConstants.CustomEventInviteSendFailed} for notificationId: {item.NotificationId} "); item.Status = NotificationItemStatus.Failed; item.ErrorMessage = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; } this.logger.TraceInformation($"Finished {nameof(this.ProcessMeetingNotificationEntities)} method of {nameof(DirectSendNotificationProvider)}.", traceprops); } }