getStatus() !== LocalMessage::STATUS_PROCESSED) { return $localMessage; } if ($localMessage->getInReplyToMessageId() === null) { return $this->processNext($account, $localMessage, $client); } $messages = $this->dbMessageMapper->findByMessageId($account, $localMessage->getInReplyToMessageId()); if ($messages === []) { return $this->processNext($account, $localMessage, $client); } foreach ($messages as $message) { try { $mailbox = $this->mailboxMapper->findById($message->getMailboxId()); //ignore read-only mailboxes if ($mailbox->getMyAcls() !== null && !strpos($mailbox->getMyAcls(), 'w')) { continue; } // ignore drafts and sent if ($mailbox->isSpecialUse('sent') || $mailbox->isSpecialUse('drafts')) { continue; } // Mark all other mailboxes that contain the message with the same imap message id as replied $this->messageMapper->addFlag( $client, $mailbox, [$message->getUid()], Horde_Imap_Client::FLAG_ANSWERED ); $message->setFlagAnswered(true); $this->dbMessageMapper->update($message); } catch (DoesNotExistException|Horde_Imap_Client_Exception $e) { $this->logger->warning('Could not flag replied message: ' . $e, [ 'exception' => $e, ]); } } return $this->processNext($account, $localMessage, $client); } }