X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=class%2Fdeliver%2FDeliver_SendMail.class.php;h=658e7a9a7e7085ff8be6a2c77639f5b1371d7e16;hp=57e92ae34df9fa973c8623f6affce48385bd334f;hb=cc201b463e7d240bd4656795e5a3f0af14fb05c8;hpb=88e471addf4ca6bfbf53bd89a1e3f3724a72dcf7 diff --git a/class/deliver/Deliver_SendMail.class.php b/class/deliver/Deliver_SendMail.class.php index 57e92ae3..658e7a9a 100644 --- a/class/deliver/Deliver_SendMail.class.php +++ b/class/deliver/Deliver_SendMail.class.php @@ -1,16 +1,20 @@ sendmail_args = $params['sendmail_args']; + } + } + } + + /** + * function preWriteToStream + * + * Sendmail needs LF's as line endings instead of CRLF. + * This function translates the line endings to LF and should be called + * before each line is written to the stream. + * + * @param string $s Line to process + * @return void + * @access private + */ function preWriteToStream(&$s) { if ($s) { - $s = str_replace("\r\n", "\n", $s); + $s = str_replace("\r\n", "\n", $s); } } - + + /** + * function initStream + * + * Initialise the sendmail connection. + * + * @param Message $message Message object containing the from address + * @param string $sendmail_path Location of sendmail binary + * @return resource + * @access public + */ function initStream($message, $sendmail_path) { $rfc822_header = $message->rfc822_header; - $from = $rfc822_header->from[0]; - $envelopefrom = trim($from->mailbox.'@'.$from->host); - $envelopefrom = str_replace(array("\0","\n"),array('',''),$envelopefrom); - if (strstr($sendmail_path, "qmail-inject")) { - $stream = popen (escapeshellcmd("$sendmail_path -i -f$envelopefrom"), "w"); - } else { - $stream = popen (escapeshellcmd("$sendmail_path -i -t -f$envelopefrom"), "w"); - } - return $stream; + $from = $rfc822_header->from[0]; + $envelopefrom = trim($from->mailbox.'@'.$from->host); + $envelopefrom = str_replace(array("\0","\n"),array('',''),$envelopefrom); + // save executed command for future reference + $this->sendmail_command = "$sendmail_path $this->sendmail_args -f$envelopefrom"; + // open process handle for writing + $stream = popen (escapeshellcmd($this->sendmail_command), "w"); + return $stream; } - + + /** + * Closes process handle. + * + * @param resource $stream + * @return boolean + * @access public + */ function finalizeStream($stream) { - pclose($stream); - return true; + $ret = true; + $status = pclose($stream); + // check pclose() status. + if ($status!=0) { + $ret = false; + $this->dlv_msg=_("Email delivery error"); + $this->dlv_ret_nr=$status; + // we can get better error messsage only if we switch to php 4.3+ and proc_open(). + $this->dlv_server_msg=sprintf(_("Can't execute command '%s'."),$this->sendmail_command); + } + return $ret; } - + + /** + * function getBcc + * + * In case of sendmail, the rfc822header must contain the bcc header. + * + * @return boolean true if rfc822header should include the bcc header. + * @access private + */ function getBcc() { return true; } @@ -52,12 +138,14 @@ class Deliver_SendMail extends Deliver { * function clean_crlf * * Cleans each line to only end in a LF - * Returns the length of the line including a CR, + * Returns the length of the line including a CR, * so that length is correct when the message is saved to imap - * Implemented to fix sendmail->postfix rejection of messages with attachments because of stray LF's + * Implemented to fix sendmail->postfix rejection of messages with + * attachments because of stray LF's * - * @param string $s string to strip of CR's - * @return integer length of string including a CR for each LF + * @param string $s string to strip of CR's + * @return integer length of string including a CR for each LF + * @access private */ function clean_crlf(&$s) { $s = str_replace("\r\n", "\n", $s); @@ -65,6 +153,6 @@ class Deliver_SendMail extends Deliver { $s2 = str_replace("\n", "\r\n", $s); return strlen($s2); } - + + } -?>