protected void ExecuteSendMessagePostProcessing(SendMessageData sendMessageData, List <TypedCounter <MailingResponseCode> > sendResults, SendMessageTaskData sendMessageTaskData) { var bulkEmail = sendMessageData.BulkEmail; var sessionId = sendMessageData.SessionId; var blankEmailCount = sendResults.Sum("BlankEmail"); var doNotUseEmailCount = sendResults.Sum("DoNotUseEmail"); var incorrectEmailCount = sendResults.Sum("IncorrectEmail"); var unreachableEmailCount = sendResults.Sum("UnreachableEmail"); var communicationLimitCount = sendResults.Sum("CommunicationLimit"); var duplicateEmailCount = sendResults.Sum("DuplicateEmail"); var templateNotFoundCount = sendResults.Sum("TemplateNotFound"); var sendersDomainNotVerifiedCount = sendResults.Sum("SendersDomainNotVerified"); var sendersNameNotValidCount = sendResults.Sum("SendersNameNotValid"); var invalidAddresseeCount = sendResults.Sum("InvalidAddressee"); if (sendMessageTaskData.IsBreaking) { SetBulkEmailStatus(bulkEmail.Id, MailingConsts.BulkEmailStatusStoppedId); BulkEmailEventLogger.LogInfo(bulkEmail.Id, DateTime.UtcNow, GetLczStringValue("MailingStoppedManually"), GetLczStringValue("MailingStoppedManuallyDescription"), UserConnection.CurrentUser.ContactId); SetInvalidBulkEmailCounters(bulkEmail.Id, invalidAddresseeCount); CreateReminding(bulkEmail, "CESStoppedMailingMsg"); MailingUtilities.Log.InfoFormat("BulkEmail with Id: {0} Was stopped manually.", bulkEmail.Id); return; } BulkEmailQueryHelper.UpdateBulkEmail(bulkEmail.Id, UserConnection, new KeyValuePair <string, object>("SendDueDate", DateTime.UtcNow), new KeyValuePair <string, object>("BlankEmailCount", blankEmailCount), new KeyValuePair <string, object>("DoNotUseEmailCount", doNotUseEmailCount), new KeyValuePair <string, object>("IncorrectEmailCount", incorrectEmailCount), new KeyValuePair <string, object>("UnreachableEmailCount", unreachableEmailCount), new KeyValuePair <string, object>("CommunicationLimitCount", communicationLimitCount), new KeyValuePair <string, object>("DuplicateEmailCount", duplicateEmailCount), new KeyValuePair <string, object>("TemplateNotFoundCount", templateNotFoundCount), new KeyValuePair <string, object>("SendersDomainNotVerifiedCount", sendersDomainNotVerifiedCount), new KeyValuePair <string, object>("SendersNameNotValidCount", sendersNameNotValidCount), new KeyValuePair <string, object>("InvalidAddresseeCount", invalidAddresseeCount)); MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessage]: Finished: BulkEmail.Id: {0}, SessionId: {1}", bulkEmail.Id, sessionId); if (sendMessageTaskData.ProcessedGroupsCounter == 0) { SetBulkEmailStatus(bulkEmail.Id, MailingConsts.BulkEmailStatusErrorId); CreateReminding(bulkEmail, "CESNoRecipientsMsg"); MailingUtilities.Log.InfoFormat("BulkEmail with Id: {0} Has no recipients.", bulkEmail.Id); } }
private void ExecuteSendMessageTask(SendMessageData sourceData) { var bulkEmail = sourceData.BulkEmail; var bulkEmailRId = sourceData.BulkEmailRId; var sessionId = sourceData.SessionId; var culture = Thread.CurrentThread.CurrentCulture; var sendMessageTaskData = new SendMessageTaskData(); var sendResults = new List <TypedCounter <MailingResponseCode> >(); _audienceDataSource.PageNumber = 0; while (sendMessageTaskData.HasDataToProceed) { _audienceDataSource.PageNumber++; sendMessageTaskData.BatchId = _audienceDataSource.PageNumber; MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessageTask]: Set BatchId - {0}. " + "BulkEmail.Id {1}, Session {2}.", sendMessageTaskData.BatchId, bulkEmail.Id, sessionId); var messageData = sourceData.Clone(); messageData.BulkEmail = sourceData.BulkEmail; var email = InitDCEmailMessage(messageData); messageData.BatchId = sendMessageTaskData.BatchId; messageData.BatchLength = MassMailingRecipientsLimit; List <IMessageRecipientInfo> recipients; var nextBatchLength = 0; try { email.InitRecipientVariable(); var startGetRecipientTime = DateTime.UtcNow; recipients = GetRecipients(); RecipientsValidator.Validate(recipients); LogRecipientState(recipients, messageData.BulkEmail.Id, messageData.BatchId, startGetRecipientTime); var validRecipients = GetValidRecipient(recipients); var recipientEmailAddress = CreateEmailAddresses(validRecipients); email.to = recipientEmailAddress; nextBatchLength = recipients.Count; MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessageTask]: Prepared {0} " + "recipients. BulkEmail.Id {1}, BatchId {2}, SessionId: {3}", nextBatchLength, bulkEmail.Id, sendMessageTaskData.BatchId, sessionId); } catch (SqlException e) { MailingUtilities.Log.ErrorFormat( "[CESMaillingProvider.GetRecipients]: Group processing fails. BulkEmailRId: {0}, " + "SessionId: {1}. GroupId: {2}.", e, messageData.BulkEmailRId, messageData.SessionId, messageData.BatchId); BulkEmailEventLogger.LogError(messageData.BulkEmail.Id, DateTime.UtcNow, GetLczStringValue("AudienceAddEvent"), e, GetLczStringValue("BatchProcessingErrorMsg"), UserConnection.CurrentUser.ContactId, messageData.BatchId); sendMessageTaskData.RetryMessageProcessing(); if (!sendMessageTaskData.HasDataToProceed) { MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessage]: Terminated. Failed groups limit reached. " + "BulkEmail.Id: {0}, SessionId: {1}", bulkEmailRId, sessionId); } continue; } catch (Exception exception) { MailingUtilities.Log.ErrorFormat( "[CESMaillingProvider.GetRecipients]: Group processing fails. BulkEmailRId: {0}, " + "SessionId: {1}. GroupId: {2}.", exception, messageData.BulkEmailRId, messageData.SessionId, messageData.BatchId); BulkEmailEventLogger.LogError(messageData.BulkEmail.Id, DateTime.UtcNow, GetLczStringValue("AudienceAddEvent"), exception, GetLczStringValue("BatchProcessingErrorMsg"), UserConnection.CurrentUser.ContactId, messageData.BatchId); throw; } sendMessageTaskData.LastFailedGroupId = 0; sendMessageTaskData.CheckMessageCanProceed(nextBatchLength); BulkEmailQueryHelper.ResetBulkEmailCounters(sourceData.BulkEmailRId, UserConnection); if (sendMessageTaskData.HasDataToProceed) { messageData.MailingStartTS = GetMailingStartTs(bulkEmail); MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessageTask]: Has data to " + "proceed and start new thread. BulkEmail.Id {0}, BatchId {1}, SessionId: {2}", bulkEmail.Id, sendMessageTaskData.BatchId, sessionId); try { Thread.CurrentThread.CurrentCulture = culture; var resultsCounter = CreateResultsCounter(); messageData.EmailMessage = email; var sentResult = true; if (email.to.Any()) { sentResult = SendBatch(messageData); } if (!sentResult) { recipients.Where(x => x.InitialResponseCode == (int)BulkEmailResponseCode.Sent).ForEach(y => y.InitialResponseCode = (int)MailingResponseCode.RequestFailed); } UpdateSendEmailIterationResult(messageData, recipients, resultsCounter); sendResults.Add(resultsCounter); } catch (Exception e) { MailingUtilities.Log.ErrorFormat( "[CESMaillingProvider.ExecuteSendMessageTask]: Error occurs when sends batch." + " BulkEmailRId: {0}, SessionId: {1}. GroupId: {2}.", e, messageData.BulkEmailRId, messageData.SessionId, messageData.BatchId); } } else { MailingUtilities.Log.InfoFormat( "[CESMaillingProvider.ExecuteSendMessageTask]: Has no data to " + "proceed and BatchSendThreadPool released. BulkEmail.Id {0}, BatchId {1}, SessionId: {2}", bulkEmail.Id, sendMessageTaskData.BatchId, sessionId); } } ExecuteSendMessagePostProcessing(sourceData, sendResults, sendMessageTaskData); }