开发者社区> 问答> 正文

主机禁用了mail()函

已解决

展开
收起
2018-07-09 02:27:11 548 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    问题场景:

    本文介绍在虚拟主机和轻云服务器上使用 zend framwork发送邮件的方法。 虚拟主机或轻云服务器上目前只支持通过 fsockopen的方式发送邮件。 Zend_Mail默认的发送邮件的方式是 stream_socket_client函数发送邮件的。虚拟主机或轻云服务器禁用了此函数。 所以无法直接使用 Zend_Mail发送邮件。 可以通过修改默认的 Zend_Mail发送邮件的方式,实现使用 Zend_Mail发送邮件的功能。 

    温馨提示:

    您修改程序代码前对当前文件进行备份后在进行操作,避免误操作后影响网站程序正常运行。

    修改方法:

    下载 zend framework之后,打开 library/Zend/Mail/protocol 目录,打开 Abstract.php 文件, 找到 protected function _connect($remote) 方法: 

    $this->_socket = @stream_socket_client($remote, $errorNum, $errorStr, self::TIMEOUT_CONNECTION);

    修改为

    $this->_socket  =   @fsockopen($remote, 25, $errorNum, $errstr, self::TIMEOUT_CONNECTION); 

     

    请注意,这里 fsockopen 的第二个参数“25”是邮件服务器的端口,一般默认是25,如果是其他端口,请做相应的修改。

    做上述修改之后,到主机控制台打开 fsockopen 函数:  

     

     

    至此,主机的配置修改完毕。下面是测试代码: 

    <?php

      require_once 'Zend/Mail.php';
      require_once 'Zend/Mail/Transport/Smtp.php';
      $tr=new Zend_Mail_Transport_Smtp("smtp.163.com",
                                    array('auth'=>'login',
                                       'port'=> '25',
                                          'username'=>'xxxx@163.com',
                                          'password'=>'xxxxx'));    //发件人邮箱和密码
            $mail = new Zend_Mail('UTF-8');
            $mail->setSubject('This is a test email');
            $mail->setFrom("<a style="FONT-FAMILY: 微软雅黑,Microsoft YaHei; FONT-SIZE: 14px; TEXT-DECORATION: underline" href="mailto:xxxx@163.com",'aaa'">xxxx@163.com",'aaa');   //发件人邮箱
            $mail->addTo("<a style="FONT-FAMILY: 微软雅黑,Microsoft YaHei; FONT-SIZE: 14px; TEXT-DECORATION: underline" href="mailto:xxxx@126.com",'aaa'">xxxx@126.com",'aaa');    //收件人邮箱
            $mail->setBodyText('');
            $mail->setBodyHtml("Test EmailTest email

    Test email

    ");
     
      if(false == $mail->send($tr) ) {
         echo ("fail");
      }
      else {
      
       echo ("success");
      }
            $tr->__destruct();

     

    ?> 

     

     

    将上述代码中的发件人邮箱和收件人邮箱替换成您的邮箱。

    然后把代码写入php文件,上传到主机,访问该网页,如果现实success,则发送邮件成功。检查邮件即可。

     

     

     

    如果问题还未能解决,请联系售后技术支持

     

     

    2018-07-10 17:30:00
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载