X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=class%2Fdeliver%2FDeliver_SMTP.class.php;h=990f93c87687e22c365bc79024ddfa9435e59bcd;hb=13aa8427ea68a04e4e0b8a23fe5bc7b733bf7d0d;hp=1aecdfab566c0cdd6c54204fbfbd38a1bac4b6a8;hpb=df3a857744275a30e03cb58451317d43940037a4;p=squirrelmail.git diff --git a/class/deliver/Deliver_SMTP.class.php b/class/deliver/Deliver_SMTP.class.php index 1aecdfab..990f93c8 100644 --- a/class/deliver/Deliver_SMTP.class.php +++ b/class/deliver/Deliver_SMTP.class.php @@ -1,23 +1,23 @@ authPop($host, '', $user, $pass); } - + $rfc822_header = $message->rfc822_header; - + $from = $rfc822_header->from[0]; $to = $rfc822_header->to; $cc = $rfc822_header->cc; @@ -43,34 +43,35 @@ class Deliver_SMTP extends Deliver { $content_type = $rfc822_header->content_type; // MAIL FROM: MUST be empty in cae of MDN (RFC2298) - if ($content_type->type0 == 'multipart' && + if ($content_type->type0 == 'multipart' && $content_type->type1 == 'report' && isset($content_type->properties['report-type']) && $content_type->properties['report-type']=='disposition-notification') { $from->host = ''; $from->mailbox = ''; - } - + } + if (($use_smtp_tls == true) and (check_php_version(4,3)) and (extension_loaded('openssl'))) { - $stream = fsockopen('tls://' . $host, $port, $errorNumber, $errorString); + $stream = @fsockopen('tls://' . $host, $port, $errorNumber, $errorString); } else { - $stream = fsockopen($host, $port, $errorNumber, $errorString); + $stream = @fsockopen($host, $port, $errorNumber, $errorString); } - + if (!$stream) { $this->dlv_msg = $errorString; $this->dlv_ret_nr = $errorNumber; + $this->dlv_server_msg = _("Can't open SMTP stream."); return(0); } $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { return(0); } - - /* - * If $_SERVER['HTTP_HOST'] is set, use that in our HELO to the SMTP - * server. This should fix the DNS issues some people have had - */ + + /* + * If $_SERVER['HTTP_HOST'] is set, use that in our HELO to the SMTP + * server. This should fix the DNS issues some people have had + */ if (sqgetGlobalVar('HTTP_HOST', $HTTP_HOST, SQ_SERVER)) { // HTTP_HOST is set // optionally trim off port number if($p = strrpos($HTTP_HOST, ':')) { @@ -80,13 +81,13 @@ class Deliver_SMTP extends Deliver { } else { // For some reason, HTTP_HOST is not set - revert to old behavior $helohost = $domain; } - + /* Lets introduce ourselves */ fputs($stream, "EHLO $helohost\r\n"); $tmp = fgets($stream,1024); if ($this->errorCheck($tmp,$stream)) { // fall back to HELO if EHLO is not supported - if ($this->dlv_ret_no == '500') { + if ($this->dlv_ret_nr == '500') { fputs($stream, "HELO $helohost\r\n"); $tmp = fgets($stream,1024); if ($this->errorCheck($tmp,$stream)) { @@ -96,7 +97,7 @@ class Deliver_SMTP extends Deliver { return(0); } } - + if (( $smtp_auth_mech == 'cram-md5') or ( $smtp_auth_mech == 'digest-md5' )) { // Doing some form of non-plain auth if ($smtp_auth_mech == 'cram-md5') { @@ -104,35 +105,35 @@ class Deliver_SMTP extends Deliver { } elseif ($smtp_auth_mech == 'digest-md5') { fputs($stream, "AUTH DIGEST-MD5\r\n"); } - + $tmp = fgets($stream,1024); - + if ($this->errorCheck($tmp,$stream)) { return(0); } - + // At this point, $tmp should hold "334 " $chall = substr($tmp,4); - // Depending on mechanism, generate response string + // Depending on mechanism, generate response string if ($smtp_auth_mech == 'cram-md5') { $response = cram_md5_response($user,$pass,$chall); } elseif ($smtp_auth_mech == 'digest-md5') { $response = digest_md5_response($user,$pass,$chall,'smtp',$host); } fputs($stream, $response); - + // Let's see what the server had to say about that $tmp = fgets($stream,1024); if ($this->errorCheck($tmp,$stream)) { return(0); } - + // CRAM-MD5 is done at this point. If DIGEST-MD5, there's a bit more to go if ($smtp_auth_mech == 'digest-md5') { // $tmp contains rspauth, but I don't store that yet. (No need yet) fputs($stream,"\r\n"); $tmp = fgets($stream,1024); - + if ($this->errorCheck($tmp,$stream)) { return(0); } @@ -145,7 +146,7 @@ class Deliver_SMTP extends Deliver { // The LOGIN method fputs($stream, "AUTH LOGIN\r\n"); $tmp = fgets($stream, 1024); - + if ($this->errorCheck($tmp, $stream)) { return(0); } @@ -154,7 +155,7 @@ class Deliver_SMTP extends Deliver { if ($this->errorCheck($tmp, $stream)) { return(0); } - + fputs($stream, base64_encode($pass) . "\r\n"); $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { @@ -163,16 +164,16 @@ class Deliver_SMTP extends Deliver { } elseif ($smtp_auth_mech == "plain") { /* SASL Plain */ $auth = base64_encode("$user\0$user\0$pass"); - + $query = "AUTH PLAIN\r\n"; fputs($stream, $query); $read=fgets($stream, 1024); - + if (substr($read,0,3) == '334') { // OK so far.. fputs($stream, "$auth\r\n"); $read = fgets($stream, 1024); } - + $results=explode(" ",$read,3); $response=$results[1]; $message=$results[2]; @@ -184,16 +185,16 @@ class Deliver_SMTP extends Deliver { return(0); } } - + /* Ok, who is sending the message? */ - $fromaddress = ($from->mailbox && $from->host) ? + $fromaddress = ($from->mailbox && $from->host) ? $from->mailbox.'@'.$from->host : ''; fputs($stream, 'MAIL FROM:<'.$fromaddress.">\r\n"); $tmp = fgets($stream, 1024); if ($this->errorCheck($tmp, $stream)) { return(0); } - + /* send who the recipients are */ for ($i = 0, $cnt = count($to); $i < $cnt; $i++) { if (!$to[$i]->host) $to[$i]->host = $domain; @@ -205,8 +206,8 @@ class Deliver_SMTP extends Deliver { } } } - - for ($i = 0, $cnt = count($cc); $i < $cnt; $i++) { + + for ($i = 0, $cnt = count($cc); $i < $cnt; $i++) { if (!$cc[$i]->host) $cc[$i]->host = $domain; if ($cc[$i]->mailbox) { fputs($stream, 'RCPT TO:<'.$cc[$i]->mailbox.'@'.$cc[$i]->host.">\r\n"); @@ -216,7 +217,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) { @@ -235,7 +236,7 @@ class Deliver_SMTP extends Deliver { } return $stream; } - + function finalizeStream($stream) { fputs($stream, "\r\n.\r\n"); /* end the DATA part */ $tmp = fgets($stream, 1024); @@ -247,7 +248,7 @@ class Deliver_SMTP extends Deliver { fclose($stream); return true; } - + /* check if an SMTP reply is an error and set an error message) */ function errorCheck($line, $smtpConnection) { @@ -286,7 +287,7 @@ class Deliver_SMTP extends Deliver { case '503': $message = _("Bad sequence of commands"); break; case '504': $message = _("Command parameter not implemented"); - break; + break; case '530': $message = _("Authentication required"); break; case '534': $message = _("Authentication mechanism is too weak"); @@ -314,7 +315,7 @@ class Deliver_SMTP extends Deliver { return true; } - + function authPop($pop_server='', $pop_port='', $user, $pass) { if (!$pop_port) { $pop_port = 110; @@ -347,4 +348,4 @@ class Deliver_SMTP extends Deliver { } } -?> +?> \ No newline at end of file