thomascube
2005-11-18 fbf77b4493f1b77c99751d8a86365c712ae3fb1b
program/steps/mail/sendmail.inc
@@ -28,7 +28,7 @@
if (!isset($_SESSION['compose']['id']))
  {
  $_action = 'list';
  rcmail_overwrite_action('list');
  return;
  }
@@ -42,14 +42,12 @@
  global $DB;
  
  // get identity record
  $sql_result = $DB->query(sprintf("SELECT *, email AS mailto
                                    FROM   %s
                                    WHERE  identity_id=%d
                                    AND    user_id=%d
                                    AND    del!='1'",
                                   get_table_name('identities'),
                                   $id,
                                   $_SESSION['user_id']));
  $sql_result = $DB->query("SELECT *, email AS mailto
                            FROM ".get_table_name('identities')."
                            WHERE  identity_id=?
                            AND    user_id=?
                            AND    del<>'1'",
                            $id,$_SESSION['user_id']);
                                   
  if ($DB->num_rows($sql_result))
    {
@@ -67,10 +65,19 @@
/****** check submission and compose message ********/
$mailto_regexp = '/,\s*$/';
if (empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message'])
  {
  show_message("sendingfailed", 'error');
  rcmail_overwrite_action('compose');
  return;
  }
// trip ending ', ' from
$mailto = preg_replace($mailto_regexp, '', $_POST['_to']);
$mailto_regexp = array('/,\s*[\r\n]+/', '/[\r\n]+/', '/,\s*$/m');
$mailto_replace = array(' ', ', ', '');
// repalce new lines and strip ending ', '
$mailto = preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_to']));
// decode address strings
$to_address_arr = $IMAP->decode_address_list($mailto);
@@ -92,10 +99,10 @@
// additional recipients
if ($_POST['_cc'])
  $headers['Cc'] = preg_replace($mailto_regexp, '', $_POST['_cc']);
  $headers['Cc'] = preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_cc']));
if ($_POST['_bcc'])
  $headers['Bcc'] = preg_replace($mailto_regexp, '', $_POST['_bcc']);
  $headers['Bcc'] = preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_bcc']));
  
if (strlen($identity_arr['bcc']))
  $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];
@@ -130,8 +137,24 @@
  $headers['User-Agent'] = $CONFIG['useragent'];
// append generic footer to all messages
if (!empty($CONFIG['generic_message_footer']))
  {
  $file = realpath($CONFIG['generic_message_footer']);
  if($fp = fopen($file, 'r'))
    {
    $content = fread($fp, filesize($file));
    fclose($fp);
    $_POST['_message'] .= "\r\n" . $content;
    }
  }
// use the configured delimiter for headers
$header_delm = $rcmail_config['mail_header_delimiter'] ? $rcmail_config['mail_header_delimiter'] : "\r\n";
// create PEAR::Mail_mime instance
$MAIL_MIME = new Mail_mime();
$MAIL_MIME = new Mail_mime($header_delm);
$MAIL_MIME->setTXTBody(stripslashes($_POST['_message']), FALSE, TRUE);
//$MAIL_MIME->setTXTBody(wordwrap(stripslashes($_POST['_message'])), FALSE, TRUE);
@@ -147,9 +170,16 @@
  foreach ($_FILES['_attachments']['tmp_name'] as $i => $filepath)
    $MAIL_MIME->addAttachment($filepath, $files['type'][$i], $files['name'][$i], TRUE);
// encoding settings for mail composing
$message_param = array('text_encoding' => '7bit',
                       'html_encoding' => 'quoted-printable',
                       'head_encoding' => 'quoted-printable',
                       'head_charset'  => $CHARSET,
                       'html_charset'  => $CHARSET,
                       'text_charset'  => $CHARSET);
// compose message body and get headers
$msg_body = $MAIL_MIME->get();
$msg_body = $MAIL_MIME->get($message_param);
$msg_subject = $headers['Subject'];
@@ -189,16 +219,19 @@
  unset($headers_php['To'], $headers_php['Subject']);
  $header_str = $MAIL_MIME->txtHeaders($headers_php);
  $sent = mail($mailto, $msg_subject, $msg_body, $header_str, "-f$from");
  if(ini_get('safe_mode'))
    $sent = mail($mailto, $msg_subject, $msg_body, $header_str);
  else
    $sent = mail($mailto, $msg_subject, $msg_body, $header_str, "-f$from");
  }
// return to compose page if sending failed
if (!$sent)
  {
  $_action = 'compose';
  $OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action));
  show_message("sendingfailed", 'error'); 
  rcmail_overwrite_action('compose');
  return;
  }
@@ -242,7 +275,7 @@
               $mailto,
               $msg_subject);
  if ($fp = fopen($INSTALL_PATH.'logs/sendmail', 'a'))
  if ($fp = fopen($CONFIG['log_dir'].'/sendmail', 'a'))
    {
    fwrite($fp, $log_entry);
    fclose($fp);