做为一个高级程序员,经常处理不同的问题.例如下面这不应该发生的问题.

magento — 客户无法使用contact us 发邮件 – Unable to submit your request. Please, try again later

magento的contact us是一个非常重要的一个功能,当在线客服不在时,客户可以通过contact us发送邮件来联系我们。问题是,总是会出来这样或者那样的问题导致magento下面的这个功能无法使用。

我这边要说明的是一种非常特殊的情况引起的这个问题。但是我在magento论坛上搜索了,碰到的更多的是其它的状况,一起记录一下。

Unable to submit your request. Please, try again later

首先引起这个问题的可能性是你在后台没有设置用来接收邮件的邮箱。contact us表单是客户用来提交咨询信息的表单,那这个表单的信息要发送到一个我们指定的邮箱。如果你没有指定邮箱,自然contact us就无法使用。

System -> Configuration -> General -> Contacts 在magento后台的这个地方设置

另外一个发送失败的可能是,由于magento找不到相应的邮件模板。

还有的一个可能是论坛中提到的,升级到magento新版本后出现的问题即1.401版本时。

要么注释掉(不推荐)app/code/core/Mage/Contacts/controllers/IndexController.php的

if ( Zend_Validate :: is ( trim ( $post[ ‘hideit’ ] ), ‘NotEmpty’ )) {
$error = true ;
}

要么就在模板app/design/frontend/default/THEME/template/contacts/form.phtm中的form标签下添加:

< input type = “text” name = “hideit” id = “hideit” value = “” style = “display:none !important;” />

我碰到的一个特殊情况:因为同一个服务器上的其它网站,包括magento,zen cart的网站,可以正常发信。所以基本上可以排除是邮件服务器的问题。但是结果其实还是邮件服务器的配置问题。

不能成功发送邮件的网站都是使用了同一个域名(以abc.com)的邮箱, 如[email protected] , [email protected] ,我是在跟踪php代码后发现异常是在mail函数执行后丢出的。查看了sendmail的日志后猜测是由于这个域名引起的。abc.com被设定为这台 服务器的hostname.而这个域名的邮件记录呢是设置成了指定google.它使用的是google免费企业邮。

对于服务器外部发送给这个域名的邮箱 时自然使用的是DNS的解析记录,会转到gmail.但是,由服务器发出的就使用了/etc/hosts的解析,这样就当成是发给服务器自己了。而服务器 上是没有这些邮件账户的。结果就失败了。邮件服务器需要进一步设置。把邮件转到gmail上去。