WordPress 不用做任何修改就可以運(yùn)行在阿里云的 ACE 上面,目前 ACE 又是免費(fèi)的,速度快,有穩(wěn)定,種種優(yōu)點(diǎn)吸引了廣大的 WordPress 用戶,目前本站就是運(yùn)行在 ACE 上面的,從自己的 VPS 上遷移過來之后,一切運(yùn)行良好,除了不能發(fā)送郵件,在自己的 VPS 上,我一直是使用 Cimy Swift SMTP 這個(gè)插件通過 SMTP 發(fā)送郵件的,可是到了阿里云就一直提示:SMTP connect() failed.看字面意思是郵件服務(wù)器根本連接不上。
ACE 上 WordPress 不能發(fā)送郵件的原因
在阿里云后臺(tái)發(fā)了工單,得到的回復(fù)是這樣的:
PHP應(yīng)用使用 http/https/smtp 等協(xié)議 (curl/fsockopen) 無需設(shè)置代理: stream_socket_client 中無法設(shè)置代理選項(xiàng),建議替換成 fsockopen 或 curl stream_socket_client 函數(shù)中的參數(shù) $flags 只能是 STREAM_CLIENT_CONNECT,其中 $context 將被忽略; 參數(shù):$remote_socket,只能是 tcp 或 ssl 協(xié)議,其它不支持;
從回復(fù)中可以看出,阿里云 ACE 是可以發(fā)送郵件的,只是和我們平時(shí)發(fā)郵件的方式不一樣,根據(jù)阿里云的建議,我們需要替換插件中的stream_socket_client為fsockopen,既然可以替換,相比這兩個(gè)函數(shù)的功能基本上是類似的。
修改 Cimy Swift SMTP 插件使其能在阿里云 ACE 上面發(fā)送郵件
搜索了一下 Cimy Swift SMTP 插件的代碼,果然有stream_socket_client這個(gè)函數(shù),在cimy-swift-smtp/Swift/lib/classes/Swift/Transport/StreamBuffer.php的第 263 行:
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
我們只需要把這一行代碼替換為以下一行即可:
$this->_stream = @fsockopen($host, $this->_params['port'], $errno, $errstr, $timeout);
保存一下,SVN 提交到版本庫,等一分鐘左右,應(yīng)用重新部署后,再從 Cimy Swift SMTP 插件設(shè)置的地方測試一下,我們會(huì)發(fā)現(xiàn),郵件很快發(fā)送出去了,再測試一下評(píng)論回復(fù)和找回密碼,一樣可以很快找到郵件。
為了方便大家的使用,我直接把修改好的插件打包了一下,下面是下載鏈接,有需要的朋友可以點(diǎn)擊下面的按鈕下載。
想要更快還得用 ECS 云服務(wù)器
ACE 的速度對(duì)于每日 PV 不超過100的網(wǎng)站來說,速度已經(jīng)足夠用了,如果網(wǎng)站的流量比較大,ACE 的速度就跟不上了,這時(shí)候根據(jù)自己的網(wǎng)站流量,直接購買阿里云 ECS 服務(wù)器就可以了,原來放在 OSS 和 RDS 上的數(shù)據(jù)不用動(dòng),直接配置一下就可以了。
2015/05/19 更新:萬網(wǎng)的虛擬主機(jī)也有和 ACE 一樣的問題,不知道他們是不是使用的同一套系統(tǒng)。經(jīng)測試,以上方法同樣可以在萬網(wǎng)的虛擬主機(jī)上使用。



謝謝博主的文章,我也在用阿里云的ace,不過為什么我把你打包的代碼下載下來,我在本地調(diào)試有問題,傳到ACE還是有問題,博主能否幫忙看下?