getFrom()->count() === 0 || $message->getTo()->count() === 0 || trim((string)$message->getSubject()) === ''; if (!$needsEnvelope) { return; } try { $client = $this->clientFactory->getClient($account); try { $imapMessage = $this->mailManager->getImapMessage( $client, $account, $mailbox, $message->getUid(), false ); $this->applyEnvelopeToMessage($imapMessage, $message); } finally { $client->logout(); } } catch (DoesNotExistException $e) { $this->logger->debug('Message no longer on IMAP, skip envelope enrichment', [ 'id' => $message->getId(), 'uid' => $message->getUid(), ]); } catch (ServiceException $e) { $this->logger->warning('Could not fetch envelope for message, filter prefill may be incomplete', [ 'id' => $message->getId(), 'message' => $e->getMessage(), ]); } } private function applyEnvelopeToMessage(IMAPMessage $imapMessage, Message $message): void { if ($message->getFrom()->count() === 0 && $imapMessage->getFrom()->count() > 0) { $message->setFrom($imapMessage->getFrom()); } if ($message->getTo()->count() === 0 && $imapMessage->getTo()->count() > 0) { $message->setTo($imapMessage->getTo()); } if ((trim((string)$message->getSubject()) === '') && trim($imapMessage->getSubject()) !== '') { $message->setSubject($imapMessage->getSubject()); } if ($message->getCc()->count() === 0 && $imapMessage->getCC()->count() > 0) { $message->setCc($imapMessage->getCC()); } if ($message->getBcc()->count() === 0 && $imapMessage->getBCC()->count() > 0) { $message->setBcc($imapMessage->getBCC()); } } }