Exemple #1
0
 public static void AddEvent(MailjetEvent mailjetEvent)
 {
     Task.Run(() => {
         Thread.CurrentThread.Name = "AddEventWork";
         ProcessEvent(mailjetEvent);
     });
 }
Exemple #2
0
 static void TryResaveEvent(MailjetEvent unsavedEvent)
 {
     Thread.CurrentThread.Name = "ResaveEventWork";
     //Попытка пересохранения каждые 20 сек.
     Thread.Sleep(20000);
     ProcessEvent(unsavedEvent);
 }
Exemple #3
0
        public void PostEvent(MailjetEvent content)
        {
            EmailManager.AddEvent(content);

            //Необходимо обязательно отправлять в ответ http code 200 - OK
            WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
        }
Exemple #4
0
 static void ResaveEventWork()
 {
     Thread.CurrentThread.Name = "ResaveEventWorkStarter";
     while (true)
     {
         MailjetEvent unsavedEvent = unsavedEventsQueue.Take();
         logger.Debug("{1} Взято не сохраненное событие из очереди для попытки пересохранения. Оставшееся кол-во событий в очереди: {0}", unsavedEventsQueue.Count, GetThreadInfo());
         Task.Run(() => TryResaveEvent(unsavedEvent));
     }
 }
Exemple #5
0
        static void ProcessEvent(MailjetEvent mailjetEvent)
        {
            if (mailjetEvent.AttemptCount > 0)
            {
                logger.Debug("{1} Повторная обработка события с сервера Mailjet. Попытка {2}/{3} \n{0}", mailjetEvent, GetThreadInfo(), mailjetEvent.AttemptCount, MaxSendAttemptsCount);
            }
            else
            {
                logger.Debug("{1} Обработка события с сервера Mailjet \n{0}", mailjetEvent, GetThreadInfo());
            }

            //Запись информации о письме в базу
            using (var uow = UnitOfWorkFactory.CreateWithoutRoot($"[ES]Обработка события Mailjet")) {
                var emailAction = emailRepository.GetStoredEmailByMessageId(uow, mailjetEvent.MessageID.ToString());
                if (emailAction == null)
                {
                    int mailId;
                    if (int.TryParse(mailjetEvent.CustomID, out mailId))
                    {
                        emailAction = uow.GetById <StoredEmail>(mailId);
                    }
                }
                if (emailAction != null)
                {
                    var eventDate = UnixTimeStampToDateTime(mailjetEvent.Time);
                    if (eventDate > emailAction.StateChangeDate)
                    {
                        emailAction.StateChangeDate = eventDate;
                        switch (mailjetEvent.Event)
                        {
                        case "sent":
                            emailAction.State = StoredEmailStates.Delivered;
                            break;

                        case "open":
                            emailAction.State = StoredEmailStates.Opened;
                            break;

                        case "spam":
                            emailAction.State = StoredEmailStates.MarkedAsSpam;
                            break;

                        case "bounce":
                        case "blocked":
                            emailAction.State = StoredEmailStates.Undelivered;
                            emailAction.AddDescription(mailjetEvent.GetErrorInfo());
                            break;
                        }
                        try {
                            uow.Save(emailAction);
                            uow.Commit();
                        }
                        catch (Exception ex) {
                            mailjetEvent.AttemptCount++;
                            if (mailjetEvent.AttemptCount <= MaxEventSaveAttemptsCount)
                            {
                                unsavedEventsQueue.Add(mailjetEvent);
                            }
                            logger.Error("{1} Произошла ошибка при сохранении: {0}", ex.Message, GetThreadInfo());
                        }
                    }
                }
                else
                {
                    logger.Error("{0} Событие проигнорировано. Не найдено письмо в БД связанное с событием с сервера Mailjet.", GetThreadInfo());
                }
            }
        }