因阿里云虛擬主機禁用了mail()函數,導致WordPress系統無法使用默認mail()函數發送郵件,即便改用SMTP插件也無法成功發送(因為阿里云虛擬主機提供的是fsockopen,而SMTP所使用的是steam_connect_client),因此想要實現SMTP成功發送郵件,就要修改wordpress程序源文件class-smtp.php,把wordpres的SMTP發送方式改為fsockopen方式。
1、登錄阿里云主機管理控制臺,進入:站點信息-高級環境設置-php.ini設置,PHP函數fsockopen設置:啟用
2、修改wordpress系統文件,打開 /wp-includes/class-smtp.php,在274-283 行位置,查找以下代碼:
- $socket_context = stream_context_create($options);
- //Suppress errors; connection failures are handled at a higher level
- $this->smtp_conn = @stream_socket_client(
- $host . ":" . $port,
- $errno,
- $errstr,
- $timeout,
- STREAM_CLIENT_CONNECT,
- $socket_context
- );
替換為以下代碼:
- $this->smtp_conn = @fsockopen($host,$port,$errno,$errstr,$timeout);
然后使用Easy WP SMTP或 WP MAIL SMTP 這類 SMTP 發送郵件的插件,配置好一般就可以了。
特別注意:由于這個方法是直接修改了 WordPress 的核心代碼,一旦升級了 WordPress 版本,就需要重新進行修改,切記!!!
原文地址:https://www.themebest.com/aliyun-mail-failure/