• 1
  • 2
  • 3
  • 4
  • 5
网站上传问题 首 页  »  帮助中心  »  虚拟主机  »  网站上传问题
Linux虚拟主机 发送邮件方法采用Zendmail (Zend_Mail)
发布日期:2015-11-28 15:11:21

  本文介绍在轻云服务器和虚拟主机上使用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函数:


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

  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("xxxx@163.com",'aaa'); //发件人邮箱

  $mail->addTo("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,则发送邮件成功,检查邮件即可。

  温馨提示:先对当前文件进行备份再修改程序代码,避免误操作后影响网站程序正常运行。