/**
  * Handle mail process
  * @param MessageProvider $provider
  * @return void
  */
 public function handle(MessageProvider $provider)
 {
     $processedMessages = [];
     $strategies = $this->strategyHolder->getStrategies();
     foreach ($provider->fetchMessagesToProcess() as $message) {
         foreach ($strategies as $strategy) {
             $this->processingContext->setStrategy($strategy);
             try {
                 if (!$message->isFailed() && !$message->isSystem()) {
                     $this->processingContext->execute($message);
                 }
                 if (false === isset($processedMessages[$message->getUniqueId()])) {
                     $processedMessages[$message->getUniqueId()] = $message;
                 }
             } catch (\Exception $e) {
                 // TODO
                 $this->logger->error(sprintf('Error processing message: %s', $e->getMessage()));
             }
         }
     }
     if ($this->settings->getDeleteProcessedMessages()) {
         $provider->deleteProcessedMessages($processedMessages);
     } else {
         $provider->markMessagesAsProcessed($processedMessages);
     }
 }