未发送新订单电子邮件确认


Answers:


96
  1. 从Magento 1.9.1开始,不会在结帐时直接发送电子邮件,而是将其排队。
  2. 正在通过您的Magento cronjob处理该队列-请确保已设置该队列并使其正常运行。
  3. 扩展名AOE_Scheduler可以帮助您确认Magento cronjob已正确配置并正在运行。

6
确保cron.sh正在运行!我们只花了整整一天的时间进行调试,以发现cron配置错误。
forsvunnet

2
如何知道cron.php是否正常工作?
Teja Bhagavan Kollepara

2
您可以跟踪的/ var里面的日志/日志/ cron的
贝托·卡斯蒂略

Magento 2中的订单电子邮件有问题。Cron也正在运行,但邮件未发送。数据库表中缺少大多数cron任务。我该如何解决?
Magecode

@Magecode我建议先搜索Magento 2特定问题。如果没有人可以随意添加您自己的问题,并提供您到目前为止发现/排除的内容的详细信息。
克里斯托夫在

29

从我们的Magento 1商店发送邮件有两种方法。

  1. 通过使用cron
  2. 通过避免cron

如果要避免cron:

在打开您的order.php文件

应用/代码/核心/法师/销售/模型/Order.php

1356、1450行,

更改

//$mailer->setQueue($emailQueue)->send(); 

至:

$mailer-> send();

在中app/design/frontend/base/default/template/checkout/success.phtml:添加以下行用于直接发送邮件的顶部成功页面

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending

完美地工作,是否有必要在success.phtml becoz上添加代码,而看起来却没有问题
Suneth Kalhara

3
你好,很高兴听这个。无需添加任何代码,因为交易邮件将立即发送至电子邮件。
Teja Bhagavan Kollepara

1
永远不要更改(或覆盖)供应商代码-升级时会发生什么?
巴基(Bachi)'18年

20

我从Template.php中删除了以下邮件队列代码,然后当客户下订单或单击管理面板“销售/订单”标签中的发送电子邮件时,我开始接收电子邮件。

Magento已将订单电子邮件设置为通过计划作业发送,而不是即时电子邮件...可能是出于性能原因?(我不知道为什么,我对magento非常陌生)...但是我将把这段代码放回去Template.php,并找到一种设置和运行计划作业以每5分钟运行一次的方法...

Template.php位于=> /app/code/core/Mage/Core/Model/Email/Template.php

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }

此方法解决了该问题,但是新闻通讯订阅不起作用。回滚到旧template.php解决了新闻信订阅问题。
balajisoundar

14

有两种解决方法如下:

解决方案01:使用cron

系统>配置>高级>系统> Cron

默认设置为:

首先,Magento 1.9+完全依靠cron作业发送事务性电子邮件。如果您之前没有正确设置Cron作业,那么现在就必须这样做。

首先,请确保您已在Magento管理员下设置了cron任务

系统>配置>高级>系统> Cron

默认设置为:

如果未在15个历史记录中运行,则每15个时间表提前生成20个计划(如果未运行),每10个成功历史记录生成60个失败历史记录生存时间

有人建议应更改这些设置,但是由于他们似乎无法就最佳组合达成共识,因此我宁愿保持原样。

然后,您需要进入主机控制面板并设置cron作业。在cPanel中,它位于“高级”>“ Cron作业”下。将它们设置为每五分钟运行一次,并使用以下命令:

php -f /home/username/public_html/cron.php

检查上面的路径是否正确,并且在Magento安装的根目录中是否确实存在文件cron.php(如果刚刚升级,应该已经存在)。将用户名更改为正确的帐户。

现在,我最初犯了一个错误,即遵循xtento.com上的开发人员的建议,即使用wget命令字符串的建议:wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron。的PHP

解决方案02:避免cron

交易电子邮件将立即发送。

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending

10

使用Magento 1.9,所有电子邮件都将排队,然后通过Cron发送。

Magento 1.9发行说明

如果你希望你的交易电子邮件通过的Cron发送,您可以设置从cron的系统 > 配置 > 系统 标签下的Cron或创建在cron 交友直接到你的cron.shcron.php位于根目录下的Magento。


10

只需安装“ SMTP Pro电子邮件”扩展名即可:http : //www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

填写您的自定义SMTP详细信息并完成。


这花了我整整两天的时间。不需要Cron作业,尽管如果您确实希望cron作业正常工作并且不想执行上述操作,则可以执行以下操作:

在Magento根目录中编辑cron.php

后:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

添加以下代码行:

$isShellDisabled = true;

设置Cron Job

在C面板上,打开Cron Jobs部分,
创建一个cron作业,该作业每15分钟运行一次以下命令:

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php

需要特别注意的是,对于SMTP Pro,必须对Magento 1.9.1及更高版本进行此配置:系统->配置-> SMTP Pro->队列配置->队列使用从默认更改为从不。
Shrenik

8

在Magento 1.9.1.0中,Magento添加了一项新功能:他们将订单电子邮件存储在core_email_queue表中以发送订单电子邮件。我们必须cron.php在服务器上设置

cron.php文件设置了core_email_queue_send_allcron计划表。当crone执行从中调用的“ send”方法Mage_Core_Model_Email_Queue。他们将邮件发送给客户。

因此,以上修复程序可以正常运行,而核心文件没有任何更改。


6

只需按照以下命令在服务器上进行cron设置,然后您将开始接收销售邮件。

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

使用常用设置作为“ *****”

需要用您的替换您的YOUR_USER_NAME和Path_to_cron.php。


6

使用n98-magerun我只需运行以下命令:

n98-magerun sys:cron:run core_email_queue_send_all

或者,如果不想一直运行它,可以计时:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

这每10秒发送队列中的所有电子邮件。


6

对于Godaddy服务器,在设置cronjob时使用以下代码:

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

这将每分钟运行一次。在此处输入图片说明


5

如果仅是订单电子邮件未发送,则是因为Magento仅将订单电子邮件排入队列,并将其保存以分批发送出去。如果您没有设置Heartbeat Cron,那么他们将永远不会离开Magento队列。

您会看到其他Magento电子邮件发送出去了,因为这些电子邮件是直接从Magento发送到您的邮件守护进程的。在Hearbeat Cron运行之前,甚至没有将Magento队列(例如订单电子邮件)移交给邮件守护程序。

要强迫他们出去...导航至http://yourmagentodomain.com/cron.php并保持每五分钟刷新一次该页面,您将看到排队的订单电子邮件开始出去。心跳Cron应该为您做到这一点。哦,当您导航到该cron.php文件时,该页面应该为空白,所以请不要担心...它将正常工作。


5

我遇到了同样的问题,发现它与扩展有关。Fooman电子邮件附件现已更新至v0.10.4。v0.10.3以下的版本不适用于Magento 1.9。


5

我按照知识库进行操作:http : //www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-sensitive-email#contact-info

在按照前面的说明进行操作后,在“本地化交易电子邮件”部分中,将电子邮件复制到/ en_UK上(最终包括以前未发送的电子邮件),我们也遇到了问题,即订单确认页面没有显示给客户完成。这也是固定的。

例如,对于en_GB语言环境,您需要复制位于以下位置的文件:

应用程序/语言环境/ en_US /模板/电子邮件

到位置:

应用程序/语言环境/ en_GB /模板/电子邮件


2
欢迎来到Magento SE!您能否进一步详细说明您的答案(提供代码示例等)?
benmarks 2014年

3

如果您的邮件系统(smtp,zend_mail)工作正常;禁用mailQueue可能会解决您的问题。

/app/code/core/Mage/Core/Model/Email/Template.php

换线407

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {

5
这破坏了联系表单的功能。
Zoya

9
不要编辑核心
Kevin Schroeder 2015年

1
请不要提供需要更改CORE的解决方案。核心类绝不能更改。
Ahsan Horani

2

如果您具有SMTPpro扩展名,则尝试禁用它。并再次检查。所有电子邮件都可以正常工作,您只需要正确配置即可。


0

更好的方法是复制您的应用程序/代码/核心/法师/核心/模型/电子邮件/模板/Mailer.php

到您的本地文件夹app / code / local / Mage / Core / Model / Email / Template / Mailer.php

然后在第76行中注释掉该行

->setQueue($this->getQueue())

这样就完成了。无需修改success.phtml模板。:D

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.