问题是,我想通过 API 手动发送它们,因为在我的国家,发票是受法律约束的订单。有没有办法做到这一点?
谢谢你的帮助!
转到系统->配置->销售电子邮件并禁用“发票”。
欢呼西蒙
我不认为接受的答案是处理问题的最佳方法。如果您从后端完全禁用自动交易电子邮件,您也无法手动触发它们或在您的自定义模块中使用它们。这意味着,如果您需要在另一点将其作为 magento 标准发送,则必须创建从头开始禁用的每封交易电子邮件,这也是事后需要进行的大量维护工作。
我想出的解决方案是以编程方式禁用在创建发票时发送电子邮件,并在自定义观察者事件中利用默认发件人类。在我们的例子中,我们希望在创建货件时发送发票电子邮件。
您可以通过覆盖 \Magento\Sales\Model\InvoiceOrder 来做到这一点。找到线路
$this->notifierInterface->notify($order, $invoice, $comment);
并删除它。如果您想触发电子邮件,您仍然可以使用 InvoiceSender 中的标准“发送”功能从任何您想要的地方执行此操作。在我们的例子中,我们触发来自观察者的电子邮件,如下所示:
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
class SendInvoiceWithShipment implements ObserverInterface
{
protected $_invoiceSender;
public function __construct(
InvoiceSender $invoiceSender
) {
$this->_invoiceSender = $invoiceSender;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$order = $observer->getShipment()->getOrder();
$invoices = $order->getInvoiceCollection();
foreach ($invoices as $invoice) {
// this is where the magic happens
$this->_invoiceSender->send($invoice);
}
}
}
观察者由事件 sales_order_shipment_save_after 触发
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name='sales_order_shipment_save_after'>
<observer name='SendInvoiceWithShipment' instance='Vendor\Module\Observer\SendInvoiceWithShipment'
/>
</event>
</config>
您可以对每封交易电子邮件执行此操作。