Answers:
我开始在Magento 2代码库中搜索诸如“ email”,“ message”等字符串,直到找到发送电子邮件的内容。我在中偶然发现了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;。
类Transport扩展\ Zend_Mail_Transport_Sendmail实现\ Magento \ Framework \ Mail \ TransportInterface
这就是您要寻找的。使用DI,您将能够使用其他电子邮件框架而不是Zend_Mail替换此传输,例如Mandrill或Amazon SES。
只需确保包括send()
方法,因为那是in中调用的方法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);
}
}
Magento 2 TransportBuilder
使用电子邮件模板来构成电子邮件的正文。我发现发送纯文本的最简单方法-使用Zend_Mail
(Magento 2本身使用的):
$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
/srv/public_html/pub/test.php
?
关于PHP的版本mail()
过时且不支持任何第3位,通常会做出一个假设。派对服务。
实际上,这是错误的,因为每一个好三分。派对服务支持SMTP接口,也是如此mail()
。
Amazon SES确实支持SMTP。
并通过SMTP发送通过mail()
此答案中进行了描述:https : //stackoverflow.com/a/14457410/716029
Magento 2使用\ Magento \ Framework \ Mail \ Template \ TransportBuilder类发送自定义电子邮件。
您需要创建一个简单的模块并设置email_tempaltes.xml文件以定义您的交易邮件模板。
您可以从Adminhtml或“前端作用域”区域发送邮件。
我共享了一个逐步指南的链接,该指南使用模块从Magento 2发送自定义邮件。
$email->setBodyHtml($body)