- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)

release-0.6
alecpl 13 years ago
parent f62468d3ec
commit 462de2d202

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#1487843)
- Added plugin hook for request token creation
- Replace LDAP vars in group queries (#1487837)
- Fix vcard folding with uncode characters (#1487868)
@ -17,7 +18,6 @@ CHANGELOG Roundcube Webmail
- Enable TinyMCE's contextmenu (#1487014)
- TinyMCE 3.4.1
- Stateless request tokens. No keep-alive necessary on login page (#1487829)
- PEAR::Net_SMTP 1.5.1
- Allow multiple concurrent compose sessions
- Force names of unique constraints in PostgreSQL DDL
- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly

@ -105,7 +105,7 @@ class rcube_smtp
$this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host);
if($RCMAIL->config->get('smtp_debug'))
if ($RCMAIL->config->get('smtp_debug'))
$this->conn->setDebug(true, array($this, 'debug_handler'));
// try to connect to server and exit on failure
@ -118,6 +118,13 @@ class rcube_smtp
return false;
}
// workaround for timeout bug in Net_SMTP 1.5.[0-1] (#1487843)
if (method_exists($this->conn, 'setTimeout')
&& ($timeout = ini_get('default_socket_timeout'))
) {
$this->conn->setTimeout($timeout);
}
$smtp_user = str_replace('%u', $_SESSION['username'], $CONFIG['smtp_user']);
$smtp_pass = str_replace('%p', $RCMAIL->decrypt($_SESSION['password']), $CONFIG['smtp_pass']);
$smtp_auth_type = empty($CONFIG['smtp_auth_type']) ? NULL : $CONFIG['smtp_auth_type'];

@ -105,6 +105,14 @@ class Net_SMTP
*/
var $_socket = null;
/**
* Array of socket options that will be passed to Net_Socket::connect().
* @see stream_context_create()
* @var array
* @access private
*/
var $_socket_options = null;
/**
* The socket I/O timeout value in seconds.
* @var int
@ -156,12 +164,13 @@ class Net_SMTP
* @param string $localhost The value to give when sending EHLO or HELO.
* @param boolean $pipeling Use SMTP command pipelining
* @param integer $timeout Socket I/O timeout in seconds.
* @param array $socket_options Socket stream_context_create() options.
*
* @access public
* @since 1.0
*/
function Net_SMTP($host = null, $port = null, $localhost = null,
$pipelining = false, $timeout = 0)
$pipelining = false, $timeout = 0, $socket_options = null)
{
if (isset($host)) {
$this->host = $host;
@ -175,6 +184,7 @@ class Net_SMTP
$this->pipelining = $pipelining;
$this->_socket = new Net_Socket();
$this->_socket_options = $socket_options;
$this->_timeout = $timeout;
/* Include the Auth_SASL package. If the package is not
@ -405,7 +415,8 @@ class Net_SMTP
{
$this->_greeting = null;
$result = $this->_socket->connect($this->host, $this->port,
$persistent, $timeout);
$persistent, $timeout,
$this->_socket_options);
if (PEAR::isError($result)) {
return PEAR::raiseError('Failed to connect socket: ' .
$result->getMessage());
@ -417,8 +428,10 @@ class Net_SMTP
* timeout values for the initial connection (our $timeout parameter)
* and all other socket operations.
*/
if (PEAR::isError($error = $this->setTimeout($this->_timeout))) {
return $error;
if ($this->_timeout > 0) {
if (PEAR::isError($error = $this->setTimeout($this->_timeout))) {
return $error;
}
}
if (PEAR::isError($error = $this->_parseResponse(220))) {

Loading…
Cancel
Save