Я почав шукати в кодовій базі Magento 2 рядки, такі як "електронна пошта", "повідомлення" тощо, поки не знайшов щось, що посилає електронний лист. Я натрапив на sendPaymentFailedEmail () у vendor/magento/module-checkout/Helper/Data.php
. Це встановлює безліч змінних, але врешті-решт прив'язує їх до транспортного об'єкта, який створюється за допомогою "transportBuilder". Цей transportBuilder - це примірник \Magento\Framework\Mail\Template\TransportBuilder
.
У цьому файлі $transport
існує змінна, яка є примірником \Magento\Framework\Mail\TransportInterface
. Оскільки є інтерфейс, існує також звичайний клас, який називається \Magento\Framework\Mail\Transport
. Коли ми відкриваємо файл vendor/magento/framework/Mail/Transport.php
, ми бачимо, що це поширюється на Zend_Mail_Transport_Sendmail;
Клас транспорту поширюється \ Zend_Mail_Transport_Sendmail реалізує \ Magento \ Framework \ Mail \ TransportInterface
Це те, що ви шукаєте. Використовуючи DI, ви зможете замінити цей транспорт замість Zend_Mail, наприклад, Mandrill або Amazon SES.
Просто не забудьте включити send()
метод, оскільки це метод, який викликається sendMessage()
;
public function sendMessage()
{
try {
parent::send($this->_message);
} catch (\Exception $e) {
throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
}
}
$email->setBodyHtml($body)