本文介绍在Linux云虚拟主机和轻云服务器上使用Zend_Mail发送邮件的方法。

前提条件

背景信息

Zend_Mail默认通过stream_socket_client函数实现邮件的文本内容的创建和发送。Linux云虚拟主机或轻云服务器只支持通过fsockopen函数发送邮件,禁用了stream_socket_client函数。您可以参考本文修改Zend_Mail程序中的默认函数,实现在Linux云虚拟主机或轻云服务器上使用Zend_Mail发送邮件。

操作步骤

  1. 修改Zend_Mail中的默认stream_socket_client函数。
    1. 在本地主机打开Zend Framework中的library/Zend/Mail/protocol目录。
    2. 找到Abstract.php文件,使用文件编辑器打开Abstract.php文件。
    3. Abstract.php文件中,找到protected function _connect($remote)方法,修改默认函数stream_socket_client
      默认函数stream_socket_client示例,如下所示:
      $this->_socket = @stream_socket_client($remote, $errorNum, $errorStr, self::TIMEOUT_CONNECTION);

      修改后的函数示例,如下所示:

      $this->_socket = @fsockopen($remote, 邮件服务器端口, $errorNum, $errstr, self::TIMEOUT_CONNECTION);  
      说明 一般邮件服务器默认端口为25,请根据您的实际端口值替换示例中的邮件服务器端口。
  2. 启动fsockopen函数。
    1. 登录云虚拟主机管理页面
    2. 找到待开启fsockopen函数的主机,单击对应操作列的管理
    3. 在左侧导航栏,选择高级环境设置 > PHP.INI设置
    4. PHP.INI设置页面的PHP函数设置区域,将PHP函数fsockopen设置:设置为启动
      fsockopen函数
    5. 单击保存设置
  3. 使用Zend_Mail发送邮件。
    1. 在您的网站程序PHP文件中编写邮件信息的配置代码。
      您可以参考本文提供的样例编写您的代码,如下所示:
      <?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();
      ?> 
    2. 通过FTP客户端将您的网站程序上传到云虚拟主机。
    3. 打开浏览器,访问该PHP文件生成的网页。
      如果网页访问成功,则邮件发送成功,表示设置生效,您可以通过Zend_Mail方式发送邮件。