A.L.E.C <[email protected]> wrote:

> I propose to add 'smtp_conn_options' option where you could specify the
> whole options array as above. In comments we should provide an example
> and link to http://us1.php.net/manual/en/context.ssl.php

Here is the patch to do it. It took me some time to discover that certificate
validation does not work with socket timeout set to 0. Hence, while there, 
I fixed smtp_timeout that was not honoured. 

--- program/include/rcube_smtp.php.orig
+++ program/include/rcube_smtp.php
@@ -70,8 +70,9 @@
       'smtp_auth_pw'   => $RCMAIL->config->get('smtp_auth_pw'),
       'smtp_auth_type' => $RCMAIL->config->get('smtp_auth_type'),
       'smtp_helo_host' => $RCMAIL->config->get('smtp_helo_host'),
       'smtp_timeout'   => $RCMAIL->config->get('smtp_timeout'),
+      'smtp_conn_options' => $RCMAIL->config->get('smtp_conn_options'),
       'smtp_auth_callbacks' => array(),
     ));
 
     $smtp_host = rcube_parse_host($CONFIG['smtp_server']);
@@ -106,9 +107,13 @@
 
     // IDNA Support
     $smtp_host = rcube_idn_to_ascii($smtp_host);
 
-    $this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host);
+    if (!empty($CONFIG['smtp_conn_options'])) {
+        $this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host, false, 
0, $CONFIG['smtp_conn_options']);
+    } else {
+        $this->conn = new Net_SMTP($smtp_host, $smtp_port, $helo_host);
+    }
 
     if ($RCMAIL->config->get('smtp_debug'))
       $this->conn->setDebug(true, array($this, 'debug_handler'));
 
@@ -135,9 +140,9 @@
       }
     }
 
     // try to connect to server and exit on failure
-    $result = $this->conn->connect($smtp_timeout);
+    $result = $this->conn->connect($CONFIG['smtp_timeout']);
 
     if (PEAR::isError($result)) {
       $this->response[] = "Connection failed: ".$result->getMessage();
       $this->error = array('label' => 'smtpconnerror', 'vars' => array('code' 
=> $this->conn->_code));
--- config/main.inc.php.dist.orig 
+++ config/main.inc.php.dist 
 
 // SMTP connection timeout, in seconds. Default: 0 (no limit)
 $rcmail_config['smtp_timeout'] = 0;
 
+// SMTP socket contect options
+// See http://us1.php.net/manual/en/context.ssl.php
+// The example below enable server certificate validation, and
+// requires $rcmail_config['smtp_timeout'] to be non zero.
+// $rcmail_config['smtp_conn_options'] = array(
+//   'ssl'         => array( 
+//     'verify_peer'     => TRUE,
+//     'verify_depth     => 3,
+//     'cafile'          => '/etc/openssl/certs/ca.crt',
+//   ),
+// );
+
 // ----------------------------------
 // SYSTEM
 // ----------------------------------
 


-- 
Emmanuel Dreyfus
http://hcpnet.free.fr/pubz
[email protected]
_______________________________________________
Roundcube Development discussion mailing list
[email protected]
http://lists.roundcube.net/mailman/listinfo/dev

Reply via email to