Comecei a pesquisar na base de código do Magento 2 por strings como 'email', 'message', etc. até encontrar algo que envia um email. Eu tropecei em sendPaymentFailedEmail () em vendor/magento/module-checkout/Helper/Data.php
. Isso define muitas variáveis, mas eventualmente as vincula a um objeto de transporte, criado por meio de um 'transportBuilder'. Este transportBuilder é uma instância de \Magento\Framework\Mail\Template\TransportBuilder
.
Nesse arquivo, $transport
existe uma variável, que é uma instância de \Magento\Framework\Mail\TransportInterface
. Como existe uma interface, também há uma classe regular chamada \Magento\Framework\Mail\Transport
. Quando abrimos o arquivo vendor/magento/framework/Mail/Transport.php
, vemos que isso estende o Zend_Mail_Transport_Sendmail;
classe Transport estende \ Zend_Mail_Transport_Sendmail implementa \ Magento \ Framework \ Mail \ TransportInterface
Isto é o que você está procurando. Usando o DI, você poderá substituir esse transporte por outra estrutura de email em vez do Zend_Mail, como Mandrill ou Amazon SES.
Apenas certifique-se de incluir o send()
método, pois esse é o método chamado 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)