templateContainer = $templateContainer; $this->identityContainer = $identityContainer; $this->senderBuilderFactory = $senderBuilderFactory; $this->logger = $logger; $this->addressRenderer = $addressRenderer; } /** * Send order email if it is enabled in configuration. * * @param Order $order * @return bool */ protected function checkAndSend(Order $order) { $this->identityContainer->setStore($order->getStore()); if (!$this->identityContainer->isEnabled()) { return false; } $this->prepareTemplate($order); /** @var SenderBuilder $sender */ $sender = $this->getSender(); try { $sender->send(); } catch (\Exception $e) { $this->logger->error($e->getMessage()); return false; } try { $sender->sendCopyTo(); } catch (\Exception $e) { $this->logger->error($e->getMessage()); } return true; } /** * Populate order email template with customer information. * * @param Order $order * @return void */ protected function prepareTemplate(Order $order) { $this->templateContainer->setTemplateOptions($this->getTemplateOptions()); if ($order->getCustomerIsGuest()) { $templateId = $this->identityContainer->getGuestTemplateId(); $customerName = $order->getBillingAddress()->getName(); } else { $templateId = $this->identityContainer->getTemplateId(); $customerName = $order->getCustomerName(); } $this->identityContainer->setCustomerName($customerName); $this->identityContainer->setCustomerEmail($order->getCustomerEmail()); $this->templateContainer->setTemplateId($templateId); } /** * Create Sender object using appropriate template and identity. * * @return Sender */ protected function getSender() { return $this->senderBuilderFactory->create( [ 'templateContainer' => $this->templateContainer, 'identityContainer' => $this->identityContainer, ] ); } /** * Get template options. * * @return array */ protected function getTemplateOptions() { return [ 'area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $this->identityContainer->getStore()->getStoreId() ]; } /** * Render shipping address into html. * * @param Order $order * @return string|null */ protected function getFormattedShippingAddress($order) { return $order->getIsVirtual() ? null : $this->addressRenderer->format($order->getShippingAddress(), 'html'); } /** * Render billing address into html. * * @param Order $order * @return string|null */ protected function getFormattedBillingAddress($order) { return $this->addressRenderer->format($order->getBillingAddress(), 'html'); } }