订单确认电子邮件未发送至magento 2


9

我安装我的VPS服务器上的Magento 2和配置存储电子邮件喜欢

但是订单确认电子邮件不会发送给客户,我该怎么办?我应该将cron设置为推荐的某些链接来建议这样做,还是应该像这样配置我的服务器, 是什么问题?


尝试使用已配置的cron。
Dhiren Vasoya

Answers:


14

如果您已经正确配置了Magento 2邮件系统,则可能需要检查以下几点:

  1. 到了 Stores -> Configuration -> Advanced -> System

在“ 邮件发送设置”下,确保Disable Email Communications将其设置为No。如果您正在使用任何外部邮件服务器,还请验证您的HostPort字段。

  1. 到了 Stores -> Configuration -> Sales -> Sales Emails

常规设置选项卡中,选择Asynchronous sendingDisable

Order标签EnabledYes

现在清除/刷新缓存。

希望这对您有所帮助。该解决方案已通过Magento 2.1.0进行了测试


1
没有“异步发送”
迪派KAMAT

您使用的magento版本是什么?
卡马尔·辛格

这是Magento / 2.2(社区)
迪帕克·卡马特

我在Magento 2.2.7中有一个问题
Pratik Mehta,

无法使用2.2.7
Navin Bhudiya,

4

这将起作用。

transportbuilderbystore类已在2.3中弃用,不久将在2.2中使用。

在Magento 2.2.7中修复。

修复:供应商/ magento /模块销售/模型/订单/电子邮件/SenderBuilder.php

更换

    $this->transportBuilderByStore->setFromByStore(
        $this->identityContainer->getEmailIdentity(),
        $this->identityContainer->getStore()->getId()
    );

    $this->transportBuilder->setFrom(
        $this->identityContainer->getEmailIdentity(), 
        $this->identityContainer->getStore()->getId()
    ); 

供应商/ magento /框架/邮件/模板/TransportBuilder.php

更换

/**
 * Set mail from address
 *
 * @param string|array $from
 * @return $this
 */
public function setFrom($from)
{
    $result = $this->_senderResolver->resolve($from);
    $this->message->setFrom($result['email'], $result['name']);
    return $this;
}

/**
 * Set mail from address
 *
 * @param string|array $from
 * @return $this
 */
public function setFrom($from, $store = null)
{
    $result = $this->_senderResolver->resolve($from, $store);
    $this->message->setFrom($result['email'], $result['name']);
    return $this;
}

就像这样,我们不再需要TransportBuilderByStore,它可以按预期工作。


1
如果我使用此解决方案电子邮件发送停止,则无法正常工作
Navin Bhudiya


0

我遇到了同样的问题,发现实际问题是由于“ from”头引起的。由于某种原因两次被设置。请更新以下文件以解决此问题:

供应商\ magento \框架\邮件\模板\ TransportBuilderByStore

public function setFromByStore($from, $store)
{
    $result = $this->senderResolver->resolve($from, $store);
    $this->message->setFrom($result['email'], $result['name']);

    return $this;
}

public function setFromByStore($from, $store)
{
    $result = $this->senderResolver->resolve($from, $store);

    if ($this->message->getFrom()) {
        $this->message->clearFrom();
    }

    $this->message->setFrom($result['email'], $result['name']);

    return $this;
}

无法为我解决此问题2.2.7
Navin Bhudiya '19
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.