PHP发送邮件mail时fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法

三郎 2018-2-11 1095

通用解决方法:

一:找到程序里的  fsockopen  函数,替换为:pfsockopen,即可解决所有问题,两个函数的区别在于  pfsockopen  保持  keep-alive,使得黑客无法进行  连接数攻击。

已知使用  fsockopen  函数的程序文件路径(在fsockopen  前加  p,  即fsockopen  修改为  pfsockopen  即可  )

二:服务器同时禁用了fsockopen  pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。

具体操作:

搜索程序中的字符串  fsockopen(  替换为  stream_socket_client(  ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。

示例如下

修改前:

$fp  =  fsockopen($host,  80,  $errno,  $errstr,  30);

修改后:

$fp  =  stream_socket_client($host.":80",  $errno,  $errstr,  30);


xiuno4.0.1的修改方法:

文件xiunophp/xn_send_mail.func.php

第2673行,把

$this->smtp_conn  =  @fsockopen($host,        //  the  host  of  the  server
                                $port,        //  the  port  to  use
                                $errno,      //  error  number  if  any
                                $errstr,    //  error  message  if  any
                                $tval);      //  give  up  after  ?  secs

修改为:

$this->smtp_conn  =  stream_socket_client("$host:$port",
                                           $errno,
                                           $errstr,
                                           $tval);

然后登录网站后台-其他-清理临时目录、清理缓存


另外,qq邮箱、gmail等在配置smtp的时候密码是用一串识别码而不是邮箱密码。

最新回复 (1)
  • 0 引用 2
    不错
    2018-2-11 回复
返回
发新帖