首页 > Yii2 > 阿里云主机对YII2的支持以及利用Swift_SmtpTransport组件发送邮件
2017
07-13

阿里云主机对YII2的支持以及利用Swift_SmtpTransport组件发送邮件

1、新购的阿里云主机PHP版本默认是5.2,我们先更改为5.4或5.5版本,如下图:


2、因php5.4和5.5版本要求mysql数据库密码为41位加密,所以要重置一下数据库密码,如下图:

点击“重置密码”,弹出以下对话框:


3、访问网站报错,需要开启PHP函数chmod。如果需要SMTP发邮件,还需要开启fsockopen函数,如下图:

解决方法:设置PHP.ini,如下图:


4、Swift_SmtpTransport组件发送邮件时错“getmypid() has been disabled for security reasons”,如下图:

解决办法:在/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php这里文件将getmypid()(一共3个)全部替换为mt_rand(0, 32000),例如:

$this->_cacheKey = md5(uniqid(getmypid().mt_rand(), true));

改为:

$this->_cacheKey = md5(uniqid(mt_rand(0, 32000).mt_rand(), true));


5、SMTP发邮件还是有问题,如下图:

解决方法:打开/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php这个文件,大概263行-264行。

//$this->_stream = @pfsockopen($host, $this->_params['port'], $errno, $errstr, $timeout);
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));

修改为:

$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (!$this->_stream) {
    $this->_stream = @pfsockopen($host, $this->_params['port'], $errno, $errstr, $timeout);
}
if (!$this->_stream) {
    $this->_stream = @fsockopen($host, $this->_params['port'], $errno, $errstr, $timeout);
}

经过以上修改,最终测试,阿里云主机完美支持Yii2这套程序,并且可以正常smtp发送邮件啦!



留下一个回复

你的email不会被公开。