/** * Sends order shipment email to the customer. * * Email will be sent immediately in two cases: * * - if asynchronous email sending is disabled in global settings * - if $forceSyncMode parameter is set to TRUE * * Otherwise, email will be sent later during running of * corresponding cron job. * * @param Shipment $shipment * @param bool $forceSyncMode * @return bool */ public function send(Shipment $shipment, $forceSyncMode = false) { $shipment->setSendEmail(true); if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $shipment->getOrder(); $transport = ['order' => $order, 'shipment' => $shipment, 'comment' => $shipment->getCustomerNoteNotify() ? $shipment->getCustomerNote() : '', 'billing' => $order->getBillingAddress(), 'payment_html' => $this->getPaymentHtml($order), 'store' => $order->getStore(), 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order)]; $this->eventManager->dispatch('email_shipment_set_template_vars_before', ['sender' => $this, 'transport' => $transport]); $this->templateContainer->setTemplateVars($transport); if ($this->checkAndSend($order)) { $shipment->setEmailSent(true); $this->shipmentResource->saveAttribute($shipment, ['send_email', 'email_sent']); return true; } } $this->shipmentResource->saveAttribute($shipment, 'send_email'); return false; }