Magento 2:以编程方式发送电子邮件


24

Magento 2是否与第三方交易电子邮件传递系统(例如Amazon SES,Mandrill等)有任何内置集成,还是内置电子邮件功能仍基于PHP mail功能?还是电子邮件发送了第三件东西?

如果答案是mail,是否有第三方扩展程序(例如SMTPPro for Magento 2)可让开发人员替换标准电子邮件系统?

Answers:


13

我开始在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);
    }
}

12

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();

3
如果您想以html的形式发送正文,则可以使用$email->setBodyHtml($body)
Anish Karim

这是伟大的,但是,如果您是通过类似谷歌使用SMTP然后按照这个线程stackoverflow.com/questions/3455674/...
Ahdee

我曾尝试在Magento的,但收到的错误致命错误:致命错误:未捕获的错误:类“的Zend_Mail”在/srv/public_html/pub/test.php找不到
Nagarajuķ

@NagarajuK,您是否将作曲家的自动加载程序包含到您的计算机中/srv/public_html/pub/test.php
Alex Gusev

No @AlexGusev您能否指导我如何在我的test.php文件中添加作曲家的autloader?
Nagaraju K

8

关于PHP的版本mail()过时且不支持任何第3位,通常会做出一个假设。派对服务。
实际上,这是错误的,因为每一个好三分。派对服务支持SMTP接口,也是如此mail()

Amazon SES确实支持SMTP。

并通过SMTP发送通过mail()此答案中进行了描述:https : //stackoverflow.com/a/14457410/716029


1
+1获取有用的信息-但是我仍然对Magento通过HTTP服务支持各种电子邮件所具有的抽象(如果有)感兴趣。
艾伦·风暴

不幸的是,除了Zend_Mail之外,没有其他特定的实现。
Peter Jaap Blaakmeer '16

-1

Magento 2使用\ Magento \ Framework \ Mail \ Template \ TransportBuilder类发送自定义电子邮件。

您需要创建一个简单的模块并设置email_tempaltes.xml文件以定义您的交易邮件模板。

您可以从Adminhtml或“前端作用域”区域发送邮件。

我共享了一个逐步指南的链接,该指南使用模块从Magento 2发送自定义邮件。

从Magento 2模块发送自定义邮件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.