X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=class%2Fdeliver%2FDeliver_SMTP.class.php;h=5ac04372047de524ff5a7872807e8230ec9b613b;hp=6461d77212a98858b90b55c78bcfb7e564be4674;hb=da0135f62f730728c0c08c1ce5786c6332a366f2;hpb=a15f9d9379cebc62fa39b6cb10d2195f95ed5081 diff --git a/class/deliver/Deliver_SMTP.class.php b/class/deliver/Deliver_SMTP.class.php index 6461d772..5ac04372 100644 --- a/class/deliver/Deliver_SMTP.class.php +++ b/class/deliver/Deliver_SMTP.class.php @@ -5,7 +5,7 @@ * * SMTP delivery backend for the Deliver class. * - * @copyright © 1999-2006 The SquirrelMail Project Team + * @copyright © 1999-2007 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package squirrelmail @@ -82,6 +82,10 @@ class Deliver_SMTP extends Deliver { $content_type->type1 == 'report' && isset($content_type->properties['report-type']) && $content_type->properties['report-type']=='disposition-notification') { + // reinitialize the from object because otherwise the from header somehow + // is affected. This $from var is used for smtp command MAIL FROM which + // is not the same as what we put in the rfc822 header. + $from = new AddressStructure(); $from->host = ''; $from->mailbox = ''; } @@ -136,8 +140,8 @@ class Deliver_SMTP extends Deliver { // Read ehlo response $tmp = $this->parse_ehlo_response($stream); if ($this->errorCheck($tmp,$stream)) { - // fall back to HELO if EHLO is not supported - if ($this->dlv_ret_nr == '500') { + // fall back to HELO if EHLO is not supported (error 5xx) + if ($this->dlv_ret_nr{0} == '5') { fputs($stream, "HELO $helohost\r\n"); $tmp = fgets($stream,1024); if ($this->errorCheck($tmp,$stream)) { @@ -152,7 +156,7 @@ class Deliver_SMTP extends Deliver { * Implementing SMTP STARTTLS (rfc2487) in php 5.1.0+ * http://www.php.net/stream-socket-enable-crypto */ - if ($use_smtp_tls == 2) { + if ($use_smtp_tls === 2) { if (function_exists('stream_socket_enable_crypto')) { // don't try starting tls, when client thinks that it is already active if ($this->tls_enabled) { @@ -290,7 +294,7 @@ class Deliver_SMTP extends Deliver { } /* Ok, who is sending the message? */ - $fromaddress = ($from->mailbox && $from->host) ? + $fromaddress = (strlen($from->mailbox) && $from->host) ? $from->mailbox.'@'.$from->host : ''; fputs($stream, 'MAIL FROM:<'.$fromaddress.">\r\n"); $tmp = fgets($stream, 1024); @@ -301,7 +305,7 @@ class Deliver_SMTP extends Deliver { /* send who the recipients are */ for ($i = 0, $cnt = count($to); $i < $cnt; $i++) { if (!$to[$i]->host) $to[$i]->host = $domain; - if ($to[$i]->mailbox) { + if (strlen($to[$i]->mailbox)) { fputs($stream, 'RCPT TO:<'.$to[$i]->mailbox.'@'.$to[$i]->host.">\r\n"); $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { @@ -312,7 +316,7 @@ class Deliver_SMTP extends Deliver { for ($i = 0, $cnt = count($cc); $i < $cnt; $i++) { if (!$cc[$i]->host) $cc[$i]->host = $domain; - if ($cc[$i]->mailbox) { + if (strlen($cc[$i]->mailbox)) { fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n"); $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { @@ -323,7 +327,7 @@ class Deliver_SMTP extends Deliver { for ($i = 0, $cnt = count($bcc); $i < $cnt; $i++) { if (!$bcc[$i]->host) $bcc[$i]->host = $domain; - if ($bcc[$i]->mailbox) { + if (strlen($bcc[$i]->mailbox)) { fputs($stream, 'RCPT TO:<'.$bcc[$i]->mailbox.'@'.$bcc[$i]->host.">\r\n"); $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { @@ -426,28 +430,30 @@ class Deliver_SMTP extends Deliver { if (!$pop_server) { $pop_server = 'localhost'; } - $popConnection = fsockopen($pop_server, $pop_port, $err_no, $err_str); + $popConnection = @fsockopen($pop_server, $pop_port, $err_no, $err_str); if (!$popConnection) { error_log("Error connecting to POP Server ($pop_server:$pop_port)" . " $err_no : $err_str"); + return false; } else { $tmp = fgets($popConnection, 1024); /* banner */ if (substr($tmp, 0, 3) != '+OK') { - return(0); + return false; } fputs($popConnection, "USER $user\r\n"); $tmp = fgets($popConnection, 1024); if (substr($tmp, 0, 3) != '+OK') { - return(0); + return false; } fputs($popConnection, 'PASS ' . $pass . "\r\n"); $tmp = fgets($popConnection, 1024); if (substr($tmp, 0, 3) != '+OK') { - return(0); + return false; } fputs($popConnection, "QUIT\r\n"); /* log off */ fclose($popConnection); } + return true; } /** @@ -510,5 +516,3 @@ class Deliver_SMTP extends Deliver { return $ret; } } - -?> \ No newline at end of file