Я начал искать в базе кода 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;
Транспортный класс extends \ 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)