Zend Mail продолжает сообщать мне об ошибке Socket - PullRequest
0 голосов
/ 16 апреля 2011

У меня проблемы с отправкой электронной почты с использованием Zend Framework.Я получаю сообщение об ошибке «Не удалось открыть сокет».

Я не знаю, что здесь не так - раньше он работал на моем другом хосте.С тех пор как я перенес его на другой хост, я не могу отправлять электронные письма.Я настроил значения конфигурации в соответствии с новым почтовым сервером.

Вот мой код:

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

1 Ответ

1 голос
/ 17 апреля 2011

Мархаба Али!при копировании кода Zend mail показывается 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

При сбое аргументы errno и errstr будут заполнены фактической ошибкой системного уровня, возникшей в вызове connect () системного уровня.Если значение, возвращаемое в errno, равно 0, а функция вернула FALSE, это указывает на то, что ошибка произошла до вызова connect ().Скорее всего, это связано с проблемой инициализации сокета.Обратите внимание, что аргументы errno и errstr всегда будут передаваться по ссылке.

Я полагаю, что это какой-то брандмауэр, блокирующий отправляемое соединение, ошибка системного или сетевого уровня

Если вы обновите свой ответ более подробной информацией, я буду рад помочь

...