Я хочу отправить посылку с заказом и все другие электронные письма, связанные с Заказом, на адрес электронной почты CC, определенный в пользовательском атрибуте Клиента.
Я переопределил \Magento\Sales\Model\Order\Email\SenderBuilder
namespace MyCompany\Customization\Model\Order\Email;
use Magento\Sales\Model\Order\Email;`
use Magento\Framework\Mail\Template\TransportBuilder;`
class SenderBuilder extends \Magento\Sales\Model\Order\Email\SenderBuilder
{
/**
* Prepare and send email message
*
* @return void
*/
public function send()
{
$this->configureEmailTemplate();
$this->transportBuilder->addTo(
$this->identityContainer->getCustomerEmail(),
$this->identityContainer->getCustomerName()
);
$copyTo = $this->identityContainer->getEmailCopyTo();
if (!empty($copyTo) && $this->identityContainer->getCopyMethod() == 'bcc') {
foreach ($copyTo as $email) {
$email = 'test@test.com';
$this->transportBuilder->addBcc($email);
}
}
// CODE TO SEND CC EMAILS
try {
if( method_exists($this->identityContainer,'getOrderCustomerId') ) {
\Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class)->debug('Shipment Email SEND ######');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerObj = $objectManager->create('Magento\Customer\Model\Customer')->load($this->identityContainer->getOrderCustomerId());
mail('rdambare@test.com','CC EMAIL - Order Update Email Send - ',$customerObj->getCcEmail());
if($customerObj->getCcEmail() != "" && $customerObj->getCcEmail() != $this->identityContainer->getCustomerEmail()) {
mail('rdambare@test.com','CC EMAIL - Order Update Email Send >>>>> - ',$customerObj->getCcEmail());
$this->transportBuilder->addCc($customerObj->getCcEmail());
}
}
} catch(Exception $e) {
mail('rdambare@test.com','CC EMAIL - Order Update Email Exception',$e->getMessage());
}
// END - CODE TO SEND CC EMAILS
$transport = $this->transportBuilder->getTransport();
$transport->sendMessage();
}
}
Также переопределить - \Magento\Sales\Model\Order\Email\Sender\ShipmentSender
namespace MyCompany\Customization\Model\Order\Email\Sender;
use Magento\Sales\Model\Order\Shipment;
class ShipmentSender extends \Magento\Sales\Model\Order\Email\Sender\ShipmentSender
{
public function send(Shipment $shipment, $forceSyncMode = false)
{
$order = $shipment->getOrder();
/*Start - No shipment email in case of Amazon Order*/
if(stripos($order->getShippingDescription(),"amazon") !== FALSE) {
return false;
}
/*End - No shipment email in case of Amazon Order*/
$shipment->setSendEmail(true);
if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
$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;
}
}
Но электронная почта не отправляется на адрес электронной почты CC.
Как выдает ошибку
PHP Фатальная ошибка: Uncaught Ошибка: вызов неопределенного метода
Magento \ Sales \ Model \ Order \ Email \ Container \ ShipmentIdentity :: getOrderCustomerId ()
в
Приложение / код / MyCompany / Настройка / Model / Order / Email / SenderBuilder.php: 39
Итак, я переопределил -
\Magento\Sales\Model\Order\Email\Container\ShipmentIdentity
namespace MyCompany\Customization\Model\Order\Email\Container;
//use Magento\Sales\Model\Order\Email\Container\OrderIdentity;
class ShipmentIdentity extends \Magento\Sales\Model\Order\Email\Container\ShipmentIdentity
{
public function setOrderCustomerId($id)
{
$this->_customerId = $id;
}
public function getOrderCustomerId()
{
return $this->_customerId;
}
}
Все еще не работает.
Любая помощь будет полезна ..
Спасибо ..