Tôi bắt đầu tìm kiếm xung quanh trong cơ sở mã Magento 2 để tìm các chuỗi như 'email', 'message', v.v. cho đến khi tôi tìm thấy thứ gì đó gửi email. Tôi tình cờ thấy sendPaymentFailedEmail () trong vendor/magento/module-checkout/Helper/Data.php
. Điều này đặt ra rất nhiều biến số nhưng cuối cùng lại liên kết chúng với một đối tượng vận chuyển, được tạo ra thông qua một 'TransportBuilder'. TransportBuilder này là một ví dụ của \Magento\Framework\Mail\Template\TransportBuilder
.
Trong tệp đó, một $transport
biến tồn tại, là một thể hiện của \Magento\Framework\Mail\TransportInterface
. Bởi vì có một giao diện, cũng có một lớp thông thường được gọi \Magento\Framework\Mail\Transport
. Khi chúng tôi mở tệp vendor/magento/framework/Mail/Transport.php
, chúng tôi thấy rằng điều này mở rộng Zend_Mail_Transport_Sendmail;
lớp Giao thông vận tải mở rộng \ Zend_Mail_Transport_Sendmail thực hiện \ Magento \ Framework \ Mail \ TransportInterface
Đây là những gì bạn đang tìm kiếm. Sử dụng DI, bạn sẽ có thể thay thế phương thức vận chuyển này bằng một khung email khác thay vì Zend_Mail, chẳng hạn như Mandrill hoặc Amazon SES.
Chỉ cần chắc chắn bao gồm send()
phương thức vì đó là phương thức được gọi trong 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)