Source for file compose.php

Documentation is available at compose.php

  1. <?php
  2.  
  3. /**
  4.  * compose.php
  5.  *
  6.  * Functions for message compositon: writing a message, attaching files etc.
  7.  *
  8.  * @author Thijs Kinkhorst <kink at squirrelmail.org>
  9.  * @copyright 1999-2014 The SquirrelMail Project Team
  10.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  11.  * @version $Id: compose.php 14420 2014-01-01 20:33:20Z pdontthink $
  12.  * @package squirrelmail
  13.  */
  14.  
  15.  
  16. /**
  17.  * Get a new file to write an attachment to.
  18.  * This function makes sure it doesn't overwrite other attachments,
  19.  * preventing collisions and race conditions.
  20.  *
  21.  * @return filename of the tempfile only (not full path)
  22.  * @since 1.5.2
  23.  */
  24. {
  25.     global $username$attachment_dir;
  26.  
  27.     $hashed_attachment_dir getHashedDir($username$attachment_dir);
  28.  
  29.     // using PHP >= 4.3.2 we can be truly atomic here
  30.     $filemods check_php_version 4,3,'x' 'w';
  31.  
  32.     // give up after 1000 tries
  33.     $TMP_MAX 1000;
  34.     for ($try=0$try<$TMP_MAX++$try{
  35.  
  36.         $localfilename GenerateRandomString(32''7);
  37.         $full_localfilename "$hashed_attachment_dir/$localfilename";
  38.  
  39.         // filename collision. try again
  40.         if file_exists($full_localfilename) ) {
  41.             continue;
  42.         }
  43.  
  44.         // try to open for (binary) writing
  45.         $fp @fopen$full_localfilename$filemods);
  46.  
  47.         if $fp !== FALSE {
  48.             // success! make sure it's not readable, close and return filename
  49.             chmod($full_localfilename0600);
  50.             fclose($fp);
  51.             return $localfilename;
  52.         }
  53.     }
  54.  
  55.     // we tried 1000 times but didn't succeed.
  56.     error_box_("Could not open temporary file to store attachment. Contact your system administrator to resolve this issue.") );
  57.     return FALSE;
  58. }
  59.  
  60.  
  61. /**
  62.   * Send a simple mail message using SquirrelMail's API.
  63.   *
  64.   * Until SquirrelMail is sufficiently redesigned, this
  65.   * function is a stand-in for a simple mail delivery
  66.   * call.  Currently, it only sends plaintext messages
  67.   * (unless the caller uses the $message parameter).
  68.   *
  69.   * @param string $to      The destination recipient.
  70.   * @param string $subject The message subject.
  71.   * @param string $body    The message body.
  72.   * @param string $from    The sender.
  73.   * @param string $cc      The destination carbon-copy recipient.
  74.   *                         (OPTIONAL; default no Cc:)
  75.   * @param string $bcc     The destination blind carbon-copy recipient.
  76.   *                         (OPTIONAL; default no Bcc:)
  77.   * @param object $message If the caller wants to construct a more
  78.   *                         complicated message themselves and pass
  79.   *                         it here, this function will take care
  80.   *                         of the rest - handing it over to SMTP
  81.   *                         or Sendmail.  If this parameter is non-
  82.   *                         empty, all other parameters are ignored.
  83.   *                         (OPTIONAL: default is empty)
  84.   *
  85.   * @return array A two-element array, the first element being a
  86.   *                boolean value indicating if the message was successfully
  87.   *                sent or not, and the second element being the message's
  88.   *                assigned Message-ID, if available (only available as of
  89.   *                SquirrelMail 1.4.14 and 1.5.2)
  90.   *
  91.   */
  92. function sq_send_mail($to$subject$body$from$cc=''$bcc=''$message='')
  93. {
  94.  
  95.    require_once(SM_PATH 'functions/mime.php');
  96.    require_once(SM_PATH 'class/mime.class.php');
  97.  
  98.    if (empty($message))
  99.    {
  100.       $message new Message();
  101.       $header  new Rfc822Header();
  102.  
  103.       $message->setBody($body);
  104.       $content_type new ContentType('text/plain');
  105.       global $special_encoding$default_charset;
  106.       if ($special_encoding)
  107.          $header->encoding $special_encoding;
  108.       else
  109.          $header->encoding '8bit';
  110.       if ($default_charset)
  111.          $content_type->properties['charset']=$default_charset;
  112.       $header->content_type $content_type;
  113.  
  114.       $header->parseField('To'$to);
  115.       $header->parseField('Cc'$cc);
  116.       $header->parseField('Bcc'$bcc);
  117.       $header->parseField('From'$from);
  118.       $header->parseField('Subject'$subject);
  119.       $message->rfc822_header $header;
  120.    }
  121. //sm_print_r($message);exit;
  122.  
  123.  
  124.    global $useSendmail;
  125.  
  126.  
  127.    // ripped from src/compose.php - based on both 1.5.2 and 1.4.14
  128.    //
  129.    if (!$useSendmail{
  130.       require_once(SM_PATH 'class/deliver/Deliver_SMTP.class.php');
  131.       $deliver new Deliver_SMTP();
  132.              $domain$pop_before_smtp_host;
  133.  
  134.       $authPop (isset($pop_before_smtp&& $pop_before_smtptrue false;
  135.       if (empty($pop_before_smtp_host)) $pop_before_smtp_host $smtpServerAddress;
  136.       $user '';
  137.       $pass '';
  138.       get_smtp_user($user$pass);
  139.       $stream $deliver->initStream($message,$domain,0,
  140.                 $smtpServerAddress$smtpPort$user$pass$authPop$pop_before_smtp_host);
  141.    else {
  142.       require_once(SM_PATH 'class/deliver/Deliver_SendMail.class.php');
  143.       global $sendmail_path$sendmail_args;
  144.       // Check for outdated configuration
  145.       if (!isset($sendmail_args)) {
  146.          if ($sendmail_path=='/var/qmail/bin/qmail-inject'{
  147.             $sendmail_args '';
  148.          else {
  149.             $sendmail_args '-i -t';
  150.          }
  151.       }
  152.       $deliver new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
  153.       $stream $deliver->initStream($message,$sendmail_path);
  154.    }
  155.  
  156.  
  157.    $success false;
  158.    $message_id '';
  159.    if ($stream{
  160.       $deliver->mail($message$stream);
  161.       if (!empty($message->rfc822_header->message_id)) {
  162.          $message_id $message->rfc822_header->message_id;
  163.       }
  164.  
  165.       $success $deliver->finalizeStream($stream);
  166.    }
  167.  
  168.    return array($success$message_id);
  169.  
  170. }

Documentation generated on Mon, 22 Dec 2014 04:17:27 +0100 by phpDocumentor 1.4.3