Answers:
cron.sh
正在运行!我们只花了整整一天的时间进行调试,以发现cron配置错误。
从我们的Magento 1商店发送邮件有两种方法。
如果要避免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
我从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;
}
有两种解决方法如下:
解决方案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
使用Magento 1.9,所有电子邮件都将排队,然后通过Cron发送。
如果你希望你的交易电子邮件通过的Cron发送,您可以设置从cron的系统 > 配置 > 系统 标签下的Cron或创建在cron 交友直接到你的cron.sh或cron.php位于根目录下的Magento。
只需安装“ SMTP Pro电子邮件”扩展名即可:http : //www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html
填写您的自定义SMTP详细信息并完成。
这花了我整整两天的时间。不需要Cron作业,尽管如果您确实希望cron作业正常工作并且不想执行上述操作,则可以执行以下操作:
后:
$isShellDisabled = (stripos(PHP_OS, ‘win’) === false) ? $isShellDisabled : true;
添加以下代码行:
$isShellDisabled = true;
在C面板上,打开Cron Jobs部分,
创建一个cron作业,该作业每15分钟运行一次以下命令:
php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
在Magento 1.9.1.0中,Magento添加了一项新功能:他们将订单电子邮件存储在core_email_queue
表中以发送订单电子邮件。我们必须cron.php
在服务器上设置
该cron.php
文件设置了core_email_queue_send_all
cron计划表。当crone执行从中调用的“ send”方法Mage_Core_Model_Email_Queue
。他们将邮件发送给客户。
因此,以上修复程序可以正常运行,而核心文件没有任何更改。
只需按照以下命令在服务器上进行cron设置,然后您将开始接收销售邮件。
php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php
使用常用设置作为“ *****”
需要用您的替换您的YOUR_USER_NAME和Path_to_cron.php。
使用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秒发送队列中的所有电子邮件。
如果仅是订单电子邮件未发送,则是因为Magento仅将订单电子邮件排入队列,并将其保存以分批发送出去。如果您没有设置Heartbeat Cron,那么他们将永远不会离开Magento队列。
您会看到其他Magento电子邮件发送出去了,因为这些电子邮件是直接从Magento发送到您的邮件守护进程的。在Hearbeat Cron运行之前,甚至没有将Magento队列(例如订单电子邮件)移交给邮件守护程序。
要强迫他们出去...导航至http://yourmagentodomain.com/cron.php并保持每五分钟刷新一次该页面,您将看到排队的订单电子邮件开始出去。心跳Cron应该为您做到这一点。哦,当您导航到该cron.php文件时,该页面应该为空白,所以请不要担心...它将正常工作。
我按照知识库进行操作:http : //www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-sensitive-email#contact-info
在按照前面的说明进行操作后,在“本地化交易电子邮件”部分中,将电子邮件复制到/ en_UK上(最终包括以前未发送的电子邮件),我们也遇到了问题,即订单确认页面没有显示给客户完成。这也是固定的。
例如,对于en_GB语言环境,您需要复制位于以下位置的文件:
应用程序/语言环境/ en_US /模板/电子邮件
到位置:
应用程序/语言环境/ en_GB /模板/电子邮件
如果您的邮件系统(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\*/) {
如果您具有SMTPpro扩展名,则尝试禁用它。并再次检查。所有电子邮件都可以正常工作,您只需要正确配置即可。