X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=class%2Fdeliver%2FDeliver_SendMail.class.php;h=f71ec6760b2d81675bea86af9522a3e77afbc99a;hp=d5c6fdbc679008d43cf3b9bb11dac820ac8f1272;hb=6872a6750379b6c17cf6a6dfec6150ade78f52a0;hpb=1f9c969d4504d0cc8f5ce836189f7d2d57cc39d6 diff --git a/class/deliver/Deliver_SendMail.class.php b/class/deliver/Deliver_SendMail.class.php index d5c6fdbc..f71ec676 100644 --- a/class/deliver/Deliver_SendMail.class.php +++ b/class/deliver/Deliver_SendMail.class.php @@ -1,46 +1,170 @@ sendmail_args = $params['sendmail_args']; + } + } + } + + /** + * Constructor (PHP4 style, kept for compatibility reasons) + * @param array configuration options. array key = option name, + * array value = option value. + * @return void + * @since 1.5.1 + */ + function Deliver_SendMail($params=array()) { + self::__construct($params); + } + + /** + * 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($message, $sendmail_path) { + + /** + * function initStream + * + * Initialise the sendmail connection. + * + * @param Message $message Message object containing the from address + * @param string $sendmail_path Location of sendmail binary + * @param mixed $ignore_x Eight extra arguments that the parent class + * requires which are not used here + * @return resource + * @access public + */ + function initStream($message, $sendmail_path, $ignore_1=0, $ignore_2='', $ignore_3='', $ignore_4='', $ignore_5='', $ignore_6=false, $ignore_7='', $ignore_8=array()) { $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); + // save executed command for future reference + $this->sendmail_command = escapeshellcmd("$sendmail_path $this->sendmail_args -f") . escapeshellarg($envelopefrom); + // open process handle for writing + $stream = popen($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; } - + + /** + * function clean_crlf + * + * Cleans each line to only end in a LF + * 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 + * + * @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); + $s = str_replace("\r", "\n", $s); + $s2 = str_replace("\n", "\r\n", $s); + return strlen($s2); + } + + } -?>