在windows下安装ecshop之后,只需要正常配置,即可正常收到邮件,如下:
但是在linux下安装的ecshop始终提示发送成功,如下图,
但是测试邮箱却始终没有收到测试邮件,
于是在网上搜索各种解决方案,在官网的bbs中有各种解决方案,但是却没有一个方案能解决问题,
网上的方案集中在:
1. 换个邮箱测试,比如从163换成qq试一下,这个方案在我这里不行的,被排除;
2. "邮件服务器配置"有问题,这个核对了很多遍,有问题的可能性很小;
3. 服务器没有启动stmp功能,我在本地已经启动了postfx,这个可能性排除;
4. 系统中fsockopen()函数不可用,有些服务器供应商禁用了这个函数,EC论坛中有个大佬说可采用pfsockopen替换fsockopen来解决这个问题。
比如:http://bbs.ecshop.com/thread-142347-1-1.html
个人认为这个问题是外行话,服务器我们有完全的控制权,我们装什么一般对方不会干预那么多的,但是这个提示也触发了我从linux系统去找问题的根源。
通过创建phpinfo查看php的支持信息,不过这个方法我没采用,如下:
<?php
phpinfo();
?>
只是用 php -v 查看Zend Extension 和 Zend Optimizer的信息,但是系统出现了报错,如下:
Failed loading /usr/local/lamp/Zend/lib/ZendExtensionManager.so: /usr/local/lamp/Zend/lib/ZendExtensionManager.so: wrong ELF class: ELFCLASS32
因为fsocketopen()这个方法跟Zend Extension关系紧密,所以问题的重点应该就是集中在这个错误上,
经过查找资料证实,这个错误的发生是因为系统和安装的Zend包不匹配导致的,经过回查,发现确实是由于自己的粗心导致的问题,如下图显示,
我安装的Zend包是32bit的,而系统是64bit。
于是抓紧从网上下载了64bit的ZendOptimizer包,替换掉之前的32bit包,
对邮箱再进行一次测试,阿弥陀佛,终于OK了。
说明: 任何方法和经验都不是万金油,这个方法只适合遇到类似问题的同学,如果并不能解决您的问题,请另辟蹊径,谢谢!