Zend Mail不断给我一个Socket错误

| 我在使用zend框架发送电子邮件时遇到了麻烦。我不断收到“无法打开套接字”错误。 我不知道这里出了什么问题-它曾经在我的另一台主机上工作。自从将其转移到另一台主机以来,我就无法发送电子邮件。我已经设置了配置值以匹配新的电子邮件服务器。 这是我的代码:
$config = array(\'auth\' => _config(\'mail\', \'auth\'),
        \'username\' => _config(\'mail\', \'email\'),
        \'password\' => _config(\'mail\', \'password\'));

$tr = new Zend_Mail_Transport_Smtp(_config(\'mail\', \'smtp\'), $config);

$mail = new Zend_Mail();
$mail->setDefaultTransport($tr);

$mail->setFrom(_config(\'mail\',\'email\'), _config(\'mail\',\'name\'));
$mail->addTo($account_email);

$mail->setSubject($mailTitle);
$mail->setBodyText($mailContent);
$mail->send($tr);
EDIt === 好吧,上面发布的代码是我的实际代码-我不知道它曾经在另一台主机上工作有什么问题。 以下是我遇到的确切错误
Could not open socketstring(1237) \"#0 /home/india/public_html/demo/library/Zend/Mail/Protocol/Smtp.php(167): Zend_Mail_Protocol_Abstract->_connect(\'tcp://mail.indi...\') 
#1 /home/india/public_html/demo/library/Zend/Mail/Transport/Smtp.php(199): Zend_Mail_Protocol_Smtp->connect() 
#2 /home/india/public_html/demo/library/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Smtp->_sendMail() 
#3 /home/india/public_html/demo/library/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) 
#4 /home/india/public_html/demo/application/controllers/AccountController.php(2153): Zend_Mail->send(Object(Zend_Mail_Transport_Smtp)) 
#5 /home/india/public_html/demo/library/Zend/Controller/Action.php(513): AccountController->forgetPasswordAction() 
#6 /home/india/public_html/demo/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch(\'forgetPasswordA...\') 
#7 /home/india/public_html/demo/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#8 /home/india/public_html/demo/application/bootstrap.php(26): Zend_Controller_Front->dispatch() #9 /home/india/public_html/demo/html/index.php(4): Bootstrap::run() #10 {main}\" 
    
已邀请:
玛哈巴阿里! , 挖掘Zend邮件的代码将显示http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Mail/Protocol/Abstract.php
 protected function _connect($remote)
    {
        $errorNum = 0;
        $errorStr = \'\';

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

        if ($this->_socket === false) {
            if ($errorNum == 0) {
                $errorStr = \'Could not open socket\';
            }
            /**
             * @see Zend_Mail_Protocol_Exception
             */
            require_once \'Zend/Mail/Protocol/Exception.php\';
            throw new Zend_Mail_Protocol_Exception($errorStr);
        }

        if (($result = $this->_setStreamTimeout(self::TIMEOUT_CONNECTION)) === false) {
            /**
             * @see Zend_Mail_Protocol_Exception
             */
            require_once \'Zend/Mail/Protocol/Exception.php\';
            throw new Zend_Mail_Protocol_Exception(\'Could not set stream timeout\');
        }

        return $result;
    }
通常是因为
  if ($errorNum == 0) {
                    $errorStr = \'Could not open socket\';
               }
来自:http://php.net/manual/zh/function.stream-socket-client.php   失败时,errno和errstr   参数将填充   实际的系统级错误   发生在系统级的connect()中   呼叫。如果值以errno返回   为0且函数返回FALSE,   这表明该错误   发生在connect()调用之前。   这很可能是由于问题   初始化套接字。请注意   errno和errstr参数将始终   通过引用传递。 我猜想它的某些防火墙阻止了连接的发送, 系统级或网络级错误 如果您使用更详细的信息更新您的答案,我将很乐意为您提供帮助     

要回复问题请先登录注册