2011-04-16 84 views
0

。我不斷收到「無法打開套接字」錯誤。Zend的郵件一直給我我在使用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); 

編輯===

好上面貼的代碼是我實際的代碼 - 我不知道什麼是錯用它,因爲它使用另一臺主機上運行。

以下是我得到

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}" 

回答

1

MARHABA阿里確切的錯誤! , 挖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; 
    } 

,通常錯誤號0,因爲

if ($errorNum == 0) { 
        $errorStr = 'Could not open socket'; 
       } 

來自:http://php.net/manual/en/function.stream-socket-client.php

失敗時,錯誤號和errstr 論證會可與 實際的系統級錯誤填充的 發生在系統文件直接連接() 調用。如果在錯誤號 返回的值是0,並且該函數返回FALSE, 它是指示該誤差的 connect()調用之前發生。 這是最有可能是由於初始化插座有問題 。需要注意的是 的errno和errstr參數將始終 可以通過引用傳遞。

我想它的一些防火牆阻斷連接發送出去, 系統級或網絡級的錯誤

如果您更新更多詳細信息,你的答案,我會很樂意幫助

+0

請檢查我的更新 – Ali 2011-04-17 18:32:43

相關問題