Пример #1
0
        /// <summary>
        /// Dequeues the job from email jobs queue and passes it to the appropriate job handler
        /// </summary>
        private bool ProcessRegularEmailJob()
        {
            EmailCargo emailCargo = null;
            bool       foundJob   = false;

            try
            {
                if (this._jobsQueue.TryDequeue(out emailCargo))
                {
                    foundJob = true;
                    if (_jobHandlers.ContainsKey(emailCargo.GetType()))
                    {
                        object handler = _jobHandlers[emailCargo.GetType()];
                        Log.Verbose("Start Processing Job. Agent Id: {0}; JobInfo : {1} ", this._agentId, emailCargo.ToString());

                        if (handler is IEmailJobHandler)
                        {
                            (handler as IEmailJobHandler).Handle(emailCargo);
                            Log.Verbose("Completed Processing Job. Agent Id: {0}; JobInfo : {1} ", this._agentId, emailCargo.ToString());
                        }
                        else
                        {
                            Log.Error(string.Format("Invalid handler associated with the Email Job of type {0}", emailCargo.GetType()));
                        }
                    }
                    else
                    {
                        Log.Error(string.Format("No handler associated with the Email Job of type {0}", emailCargo.GetType()));
                    }
                }
                else
                {
                    // No jobs in the queue.
                    Log.Verbose("No jobs in the email jobs queue");
                }
            }
            catch (ModelContentException modelContentException)
            {
                Log.Warn(string.Format("Can't generate email model. Agent Id={0}; Job Details=[{1}]; Error={2}", this._agentId, emailCargo, modelContentException));
            }
            catch (StorageException storageClientException)
            {
                this.HandleError(EventCode.EmailAgentStorageAccessError, storageClientException, "Error Access jobs or outbound message store", this._agentId, emailCargo);
            }
            catch (JsonException jsonException)
            {
                this.HandleError(EventCode.EmailAgentJsonSerializationError, jsonException, "Serialization Error", this._agentId, emailCargo);
            }
            catch (TemplateRenderException renderException)
            {
                this.HandleError(EventCode.EmailAgentTemplateRenderingError, renderException, "Couldn't Render the data into the template", this._agentId, emailCargo);
            }
            catch (Exception exp)
            {
                this.HandleError(EventCode.EmailAgentUnexpectedError, exp, "Unexpected Error", this._agentId, emailCargo);
            }

            return(foundJob);
        }
        /// <summary>
        /// The is send time window valid.
        /// </summary>
        /// <param name="lastEmailEntity">
        /// The last email entity.
        /// </param>
        /// <param name="emailCargo">
        /// The job.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private bool IsSendTimeWindowValid(UserEmailEntity lastEmailEntity, EmailCargo emailCargo)
        {
            bool isSendTimeWindowValid = true;

            if (lastEmailEntity != null && lastEmailEntity.EmailDate > (DateTime.UtcNow - this.windowsBetweenUserEmails))
            {
                Log.Error(
                    "Can't send deals email due to time windows constraint. Job Details=[{0}]; Last Email Date={1}; Window Between Emails={2}",
                    emailCargo.ToString(),
                    lastEmailEntity.EmailDate,
                    this.windowsBetweenUserEmails);

                isSendTimeWindowValid = false;
            }

            return(isSendTimeWindowValid);
        }
Пример #3
0
        /// <summary>
        /// Handles the Remainder email job
        /// </summary>
        /// <param name="emailCargo">RemainderEmail cargo</param>
        public void Handle(EmailCargo emailCargo)
        {
            PromotionalEmailCargo remainderEmailCargo = emailCargo as PromotionalEmailCargo;

            if (remainderEmailCargo != null)
            {
                var emailHistoryEntities = this._userHistoryStorage.GetUserEmailEntities(remainderEmailCargo.UserId, _mailHistoryLookback).ToList();
                if (this.IsSendTimeWindowValid(emailHistoryEntities.FirstOrDefault(elem => string.Compare(elem.EmailType, EmailType.CompleteSignup.ToString(), StringComparison.CurrentCultureIgnoreCase) == 0), remainderEmailCargo))
                {
                    EmailData    emailData    = _emailContentCreator.GetContent(remainderEmailCargo);
                    bool         isTest       = (remainderEmailCargo.Hints != null) && remainderEmailCargo.Hints.IsTest;
                    EmailContent emailContent = new EmailContent
                    {
                        From        = isTest ? this._emailFromAddressTestAccount : this._emailFromAddress,
                        FromDisplay = this._emailFromDisplay,
                        Subject     = emailData.Subject,
                        HtmlBody    = emailData.HtmlBody,
                        TextBody    = emailData.TextBody,
                        Category    = remainderEmailCargo.Campaign
                    };
                    SendEmailRequest request = new SendEmailRequest
                    {
                        Content = emailContent,
                        ToList  = new List <string> {
                            remainderEmailCargo.EmailAddress
                        },
                        IsTest = isTest
                    };

                    // Send the email
                    this._userServicesClient.SendEmail(remainderEmailCargo.Id, request, null);

                    PromotionalEmailType remainderType;
                    if (Enum.TryParse(remainderEmailCargo.PromotionalEmailType, true, out remainderType))
                    {
                        // Saving the email data in the history table
                        UserEmailEntity emailToSend = new UserEmailEntity(remainderEmailCargo.UserId, string.Empty, DateTime.UtcNow, EmailType.CompleteSignup);
                        this._userHistoryStorage.SaveUserEmailEntity(emailToSend);
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Handles the Deals email job
        /// </summary>
        /// <param name="emailCargo">Deals email cargo</param>
        public void Handle(EmailCargo emailCargo)
        {
            DealsEmailCargo dealsEmailCargo = emailCargo as DealsEmailCargo;

            if (dealsEmailCargo != null)
            {
                EmailContent     emailContent = PrepareEmail(dealsEmailCargo);
                bool             isTest       = (dealsEmailCargo.Hints != null) && dealsEmailCargo.Hints.IsTest;
                SendEmailRequest request      = new SendEmailRequest
                {
                    Content = emailContent,
                    ToList  = new List <string> {
                        dealsEmailCargo.EmailAddress
                    },
                    IsTest = isTest
                };

                // Send the email
                this._userServicesClient.SendEmail(dealsEmailCargo.Id, request, null);
            }
        }
        /// <summary>
        /// Handles the Merchant Email job
        /// </summary>
        /// <param name="emailCargo">Merchant Email cargo</param>
        public void Handle(EmailCargo emailCargo)
        {
            MerchantReportEmailCargo merchantReportEmailCargo = emailCargo as MerchantReportEmailCargo;

            if (merchantReportEmailCargo != null)
            {
                EmailData emailData = _emailContentCreator.GetContent(merchantReportEmailCargo);
                if (emailData != null)
                {
                    bool         isTest       = (merchantReportEmailCargo.Hints != null) && merchantReportEmailCargo.Hints.IsTest;
                    EmailContent emailContent = new EmailContent
                    {
                        From        = isTest ? this._emailFromAddressTestAccount : this._merchantEmailFromAddress,
                        FromDisplay = this._emailFromDisplay,
                        Subject     = emailData.Subject,
                        HtmlBody    = emailData.HtmlBody,
                        TextBody    = emailData.TextBody,
                        Category    = merchantReportEmailCargo.Campaign
                    };
                    SendEmailRequest request = new SendEmailRequest
                    {
                        Content = emailContent,
                        ToList  = new List <string> {
                            merchantReportEmailCargo.EmailAddress
                        },
                        IsTest = isTest
                    };

                    // Send the email
                    Log.Verbose("Sending email for the email job : {0}", emailCargo.ToString());
                    this._userServicesClient.SendEmail(merchantReportEmailCargo.Id, request, null);
                }
                JobFetcher.CompleteJob(merchantReportEmailCargo.Id);
            }
            else
            {
                Log.Error("Invalid handler for the email job : {0}", emailCargo.ToString());
            }
        }
Пример #6
0
        /// <summary>
        /// Handles the Deals email job
        /// </summary>
        /// <param name="emailCargo">Deals email cargo</param>
        public void Handle(EmailCargo emailCargo)
        {
            CampaignEmailCargo campaignEmailCargo = emailCargo as CampaignEmailCargo;

            if (campaignEmailCargo != null)
            {
                EmailContent emailContent = PrepareEmail(campaignEmailCargo);
                if (emailContent != null)
                {
                    bool             isTest  = (campaignEmailCargo.Hints != null) && campaignEmailCargo.Hints.IsTest;
                    SendEmailRequest request = new SendEmailRequest
                    {
                        Content = emailContent,
                        ToList  = new List <string> {
                            campaignEmailCargo.EmailAddress
                        },
                        IsTest = isTest
                    };

                    // Send the email
                    this._userServicesClient.SendEmail(campaignEmailCargo.Id, request, null);
                }
            }
        }
Пример #7
0
 /// <summary>
 /// The get content creator.
 /// </summary>
 /// <param name="emailCargo">
 /// The job.
 /// </param>
 /// <returns>
 /// The <see cref="IEmailContentCreator"/>.
 /// </returns>
 public IEmailContentCreator GetContentCreator(EmailCargo emailCargo)
 {
     return(contentCreator);
 }