setMaxPerSecond(0); } /** * Sends out the messages in the memory */ public function __destruct() { // TODO: DI should be used to inject the MailerInterface $mailer = GeneralUtility::makeInstance(MailerInterface::class); try { $this->flushQueue($mailer->getRealTransport()); } catch (\Throwable $exception) { if ($this->logger instanceof LoggerInterface) { $this->logger->error('An Exception occurred while flushing email queue: {message}', ['exception' => $exception, 'message' => $exception->getMessage()]); } } } public function flushQueue(TransportInterface $transport): int { if ($this->queuedMessages === []) { return 0; } $retries = $this->retries; $message = null; $count = 0; while ($retries--) { try { while ($message = array_pop($this->queuedMessages)) { $transport->send($message->getMessage(), $message->getEnvelope()); $count++; } } catch (TransportExceptionInterface $exception) { if ($retries) { // re-queue the message at the end of the queue to give a chance // to the other messages to be sent, in case the failure was due to // this message and not just the transport failing array_unshift($this->queuedMessages, $message); // wait half a second before we try again usleep(500000); } else { throw $exception; } } } return $count; } /** * Stores a message in the queue. */ protected function doSend(SentMessage $message): void { $this->queuedMessages[] = $message; } public function __toString(): string { return 'MemorySpool'; } }