entityManager = $entityManager; $this->acl = $acl; $this->queueCreator = $queueCreator; $this->sendingProcessor = $sendingProcessor; } /** * SMTP data for the front-end. * * @return stdClass[] * @throws Forbidden */ public function getSmtpAccountDataList(): array { if ( !$this->acl->checkScope(MassEmailEntity::ENTITY_TYPE, Table::ACTION_CREATE) && !$this->acl->checkScope(MassEmailEntity::ENTITY_TYPE, Table::ACTION_EDIT) ) { throw new Forbidden(); } $dataList = []; /** @var Collection $inboundEmailList */ $inboundEmailList = $this->entityManager ->getRDBRepository(InboundEmail::ENTITY_TYPE) ->where([ 'useSmtp' => true, 'status' => InboundEmail::STATUS_ACTIVE, 'smtpIsForMassEmail' => true, ['emailAddress!=' => ''], ['emailAddress!=' => null], ]) ->find(); foreach ($inboundEmailList as $inboundEmail) { $item = (object) []; $key = 'inboundEmail:' . $inboundEmail->getId(); $item->key = $key; $item->emailAddress = $inboundEmail->getEmailAddress(); $item->fromName = $inboundEmail->getFromName(); $dataList[] = $item; } return $dataList; } /** * Send test. * * @param stdClass[] $targetDataList * @throws BadRequest * @throws Error * @throws Forbidden * @throws NotFound * @throws NoSmtp */ public function processTest(string $id, array $targetDataList): void { $targetList = []; if (count($targetDataList) === 0) { throw new BadRequest("Empty target list."); } foreach ($targetDataList as $item) { if (empty($item->id) || empty($item->type)) { throw new BadRequest(); } $targetId = $item->id; $targetType = $item->type; $target = $this->entityManager->getEntityById($targetType, $targetId); if (!$target) { throw new Error("Target not found."); } if (!$this->acl->check($target, Table::ACTION_READ)) { throw new Forbidden(); } $targetList[] = $target; } /** @var ?MassEmailEntity $massEmail */ $massEmail = $this->entityManager->getEntityById(MassEmailEntity::ENTITY_TYPE, $id); if (!$massEmail) { throw new NotFound(); } if (!$this->acl->check($massEmail, Table::ACTION_READ)) { throw new Forbidden(); } $this->createTestQueue($massEmail, $targetList); $this->processTestSending($massEmail); } /** * @param iterable $targetList * @throws Error */ private function createTestQueue(MassEmailEntity $massEmail, iterable $targetList): void { $this->queueCreator->create($massEmail, true, $targetList); } /** * @throws Error * @throws NoSmtp */ private function processTestSending(MassEmailEntity $massEmail): void { $this->sendingProcessor->process($massEmail, true); } }