/** * Create service with name * * @param ServiceLocatorInterface $sm * @param $name * @param $requestedName * @return mixed */ public function createServiceWithName(ServiceLocatorInterface $sm, $name, $requestedName) { $specificServiceName = explode('.', $name)[2]; $this->mailOptions = $sm->get(sprintf('%s.%s.%s', self::ACMAILER_PART, MailOptionsAbstractFactory::SPECIFIC_PART, $specificServiceName)); // Create the service $message = $this->createMessage(); $transport = $this->createTransport($sm); $renderer = $this->createRenderer($sm); $mailService = new MailService($message, $transport, $renderer); // Set subject $mailService->setSubject($this->mailOptions->getMessageOptions()->getSubject()); // Set body, either by using a template or a raw body $body = $this->mailOptions->getMessageOptions()->getBody(); if ($body->getUseTemplate()) { $defaultLayoutConfig = $body->getTemplate()->getDefaultLayout(); if (isset($defaultLayoutConfig['path'])) { $params = isset($defaultLayoutConfig['params']) ? $defaultLayoutConfig['params'] : []; $captureTo = isset($defaultLayoutConfig['template_capture_to']) ? $defaultLayoutConfig['template_capture_to'] : 'content'; $mailService->setDefaultLayout(new DefaultLayout($defaultLayoutConfig['path'], $params, $captureTo)); } $mailService->setTemplate($body->getTemplate()->toViewModel(), ['charset' => $body->getCharset()]); } else { $mailService->setBody($body->getContent(), $body->getCharset()); } // Attach files $files = $this->mailOptions->getMessageOptions()->getAttachments()->getFiles(); $mailService->addAttachments($files); // Attach files from dir $dir = $this->mailOptions->getMessageOptions()->getAttachments()->getDir(); if ($dir['iterate'] === true && is_string($dir['path']) && is_dir($dir['path'])) { $files = $dir['recursive'] === true ? new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir['path'], \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST) : new \DirectoryIterator($dir['path']); /* @var \SplFileInfo $fileInfo */ foreach ($files as $fileInfo) { if ($fileInfo->isDir()) { continue; } $mailService->addAttachment($fileInfo->getPathname()); } } // Attach mail listeners $this->attachMailListeners($mailService, $sm); return $mailService; }
public function createService(ServiceLocatorInterface $sm) { /* @var MailOptions $mailOptions */ $mailOptions = $sm->get('AcMailer\\Options\\MailOptions'); // Prepare Mail Message $message = new Message(); $message->setFrom($mailOptions->getFrom(), $mailOptions->getFromName())->setTo($mailOptions->getTo())->setCc($mailOptions->getCc())->setBcc($mailOptions->getBcc()); // Prepare Mail Transport $serviceName = $mailOptions->getMailAdapterService(); /** @var TransportInterface $transport */ $transport = isset($serviceName) ? $sm->get($serviceName) : $mailOptions->getMailAdapter(); $this->setupSpecificConfig($transport, $mailOptions); // Prepare MailService $renderer = $this->createRenderer($sm); $mailService = new MailService($message, $transport, $renderer); $mailService->setSubject($mailOptions->getSubject()); // Set body, either by using a template or the body option $template = $mailOptions->getTemplate(); if ($template->getUseTemplate() === true) { $mailService->setTemplate($template->toViewModel()); } else { $mailService->setBody($mailOptions->getBody()); } // Attach files $files = $mailOptions->getAttachments()->getFiles(); $mailService->addAttachments($files); // Attach files from dir $dir = $mailOptions->getAttachments()->getDir(); if ($dir['iterate'] === true && is_string($dir['path']) && is_dir($dir['path'])) { $files = $dir['recursive'] === true ? new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir['path'], \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST) : new \DirectoryIterator($dir['path']); /* @var \SplFileInfo $fileInfo */ foreach ($files as $fileInfo) { if ($fileInfo->isDir()) { continue; } $mailService->addAttachment($fileInfo->getPathname()); } } return $mailService; }
public function testSetSubject() { $expected = 'This is the subject'; $this->assertEquals($this->mailService, $this->mailService->setSubject($expected)); $this->assertEquals($expected, $this->mailService->getMessage()->getSubject()); }