fgets()在Swiftmailer

时间:2015-06-02 13:24:07

标签: php laravel-4 fgets swiftmailer

我正在尝试在Laravel 4.2(Windows 7,IIS 6.1)中生成测试电子邮件,我遇到了静默终止 - 它只是失败,没有返回我的视图,也没有返回错误或例外。我设法通过Laravel代码库暴力破解并在Swift \ Transport \ AbstractSmtpTransport :: _ getFullResponse()中定位终止,特别是行$line = $this->_buffer->readLine($seq);

protected function _getFullResponse($seq)
{
    $response = '';
    try {
        do {
            $line = $this->_buffer->readLine($seq);
            $response .= $line;
        } while (null !== $line && false !== $line && ' ' != $line{3});
    } catch (Swift_IoException $e) {
        $this->_throwException(
            new Swift_TransportException(
                $e->getMessage())
            );
    } catch (Swift_TransportException $e) {
        $this->_throwException($e);
    }

    return $response;
}

那个循环执行两次。第一次为$line分配值* OK The Microsoft Exchange IMAP4 service is ready.,这很好,显然我正在访问服务器。不幸的是,第二次迭代在第$line = fgets($this->_out);行的Swift \ Transport \ StreamBuffer :: readLine()中失败:

public function readLine($sequence)
{
    if (isset($this->_out) && !feof($this->_out)) {
        $line = fgets($this->_out);
        if (strlen($line)==0) {
            $metas = stream_get_meta_data($this->_out);
            if ($metas['timed_out']) {
                throw new Swift_IoException(
                    'Connection to ' .
                        $this->_getReadConnectionDescription() .
                    ' Timed Out'
                );
            }
        }

        return $line;
    }
}

我已尝试在try / catch中包装该行,并且没有任何反应,代码只是暂停,没有关于do循环的第二次迭代的信息。所以,关于a)如何从停止中挤出更多信息或b)什么可能导致fgets()停止这种方式的任何建议?

1 个答案:

答案 0 :(得分:0)

好的,进展:在将我的搜索扩展到Swiftmailer后,我能够发现在Swiftmailer中特定行发生的超时。通过扩展php.ini中的max_execution_time,我得到了一个实际的异常:

预期的响应代码220,但得到代码“”,带有消息“*确定Microsoft Exchange IMAP4服务已准备好。* BYE连接已关闭.13”

我认为在这种情况下我会关闭这个问题并继续弄清楚为什么我没有得到220.