Magento
没有发送任何电子邮件,跨国,联系表单提供错误
cannot send your mail at this moment
我检查了
/var/log/system.log和exception.log只显示错误而不是错误原因
exception 'Zend_Mail_Transport_Exception' with
message 'Unable to send mail. ' in
/var/webshop/httpdocs/lib/Zend/Mail/Transport/Sendmail.php:137
答案 0 :(得分:26)
当Magento没有发送忘记密码的电子邮件(但是向用户报告时)时遇到了这个问题,然后在查看/var/log/exception.log
后发现它生成的错误是:
2012-05-30T04:27:54+00:00 ERR (3):
exception 'Exception' with message 'This letter cannot be sent.' in /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php:354
Stack trace:
#0 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php(463): Mage_Core_Model_Email_Template->send(Array, Array, Array)
#1 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template/Mailer.php(79): Mage_Core_Model_Email_Template->sendTransactional('customer_passwo...', 'support', Array, Array, Array, '1')
#2 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(646): Mage_Core_Model_Email_Template_Mailer->send()
#3 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(663): Mage_Customer_Model_Customer->_sendEmailTemplate('customer/passwo...', 'customer/passwo...', Array, '1')
#4 /home/magento/www/app/code/core/Mage/Customer/controllers/AccountController.php(554): Mage_Customer_Model_Customer->sendPasswordResetConfirmationEmail()
#5 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Customer_AccountController->forgotPasswordPostAction()
#6 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('forgotpasswordp...')
#7 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#8 /home/magento/www/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch()
#9 /home/magento/www/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#10 /home/magento/www/index.php(84): Mage::run('default', 'store')
#11 {main}
开放/app/code/core/Mage/Core/Model/Email/Template.php
并发现抛出此错误的代码(第354行)是:
if (!$this->isValidForSend()) {
Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted
return false;
}
所以看看isValidForSend()
:
public function isValidForSend()
{
return !Mage::getStoreConfigFlag('system/smtp/disable')
&& $this->getSenderName()
&& $this->getSenderEmail()
&& $this->getTemplateSubject();
}
在函数开头添加了一些变量记录,因为其中一个必须返回false
:
Mage::Log(var_export(!Mage::getStoreConfigFlag('system/smtp/disable'),true).';'.var_export($this->getSenderName(),true).';'.var_export($this->getSenderEmail(),true).';'.var_export($this->getTemplateSubject(),true),null,'email.log');
创建具有以下内容的日志文件/var/log/email.log
:
2012-05-30T04:44:37+00:00 DEBUG (7): false;'CustomerSupport';'support@example.com';'Password Reset Confirmation for {{var customer.name}}'
问题是:!Mage::getStoreConfigFlag('system/smtp/disable')
您可以在Admin > System > Configuration > Advanced > System > Mail Sending Settings
中修复并将Disable Email Communications
更改为No
,以便电子邮件不已停用
现在有效:)
答案 1 :(得分:2)
任何php程序都可以用phpmail发送一些电子邮件。
鉴于错误消息,您的Magento构建尝试做的是不同的 - 通过Zend库使用Sendmail。
您需要构建并测试sendmail安装。或者使用其他一些邮件服务,例如gmail,并让Magento使用它。
要测试是您,您的计算机还是Magento,请在其上放置一些其他程序,例如Roundcube Mail。如果Roundcube Mail可以发送邮件,那么你会知道Sendmail正在运行,如果没有,那么你就会知道问题出在Sendmail中。
修复您的Sendmail是特定于发行版的。
答案 2 :(得分:2)
我还在CE 1.9.1中没有发送订单电子邮件的问题,但在一段时间后发现了问题:
自Magento CE 1.9.1开始,Magento在订购过程中不会直接发送订单电子邮件。 相反,邮件排队并由cron发送。 因此,请确保正确配置Magento cronjob。
另请参阅:
http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#cron http://www.magentocommerce.com/knowledge-base/entry/ce18-and-ee113-installing#install-cron
答案 3 :(得分:1)
如果sendmail
发送带有Magento
默认传输的电子邮件,则可能会出现php
问题。
当sendmail拒绝为本地域发送电子邮件而不是将这些电子邮件转发到MX服务器时,我很有经验
http://www.masterdef.net/blog/magento-unable-to-send-mail-sendmail-configuration/#more-1
我建议在服务器上检查mail.log
,并发现是否存在user unknown
等错误
这意味着错误的sendmail
配置
答案 4 :(得分:1)
public function isValidForSend()
{
return !Mage::getStoreConfigFlag('system/smtp/disable')
&& $this->getSenderName()
&& $this->getSenderEmail()
&& $this->getTemplateSubject();
}
另外,在我的情况下,错误日志将我带到了这个功能。管理员配置很好。但$ this-> getTemplateSubject()在/ app / locale /文件夹下缺少模板时发送了false值。所以添加了缺少的模板。之后它对我有用。
答案 5 :(得分:0)
如果电子邮件模板出现问题。您收到此错误。因此,在检查电子邮件日志之前,请检查您的电子邮件模板,此外,当它是自定义电子邮件模板时,代码不会中断。