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-2020 The SquirrelMail Project Team
  10.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  11.  * @version $Id: compose.php 14845 2020-01-07 08:09:34Z 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.   * @param boolean $only_build_message_object When TRUE, only builds the
  85.   *                                            message object that it
  86.   *                                            intends to send and returns
  87.   *                                            it (returned success code
  88.   *                                            will be -1 and message ID
  89.   *                                            emtpy) (OPTIONAL; default
  90.   *                                            is FALSE)
  91.   *
  92.   * @return array A three-element array, the first element being a
  93.   *                boolean value indicating if the message was successfully
  94.   *                sent or not, the second element being the message's
  95.   *                assigned Message-ID, if available (only available as of
  96.   *                SquirrelMail 1.4.14 and 1.5.2), and the third element
  97.   *                being the message object itself.
  98.   *                If $only_build_message_object is TRUE, only the third
  99.   *                element is useful; first two should be ignored - the
  100.   *                message is never sent in this case.
  101.   *
  102.   */
  103. function sq_send_mail($to$subject$body$from$cc=''$bcc='',
  104.                       $message=''$only_build_message_object=FALSE)
  105. {
  106.  
  107.    require_once(SM_PATH 'functions/mime.php');
  108.    require_once(SM_PATH 'class/mime.class.php');
  109.  
  110.    if (empty($message))
  111.    {
  112.       $message new Message();
  113.       $header  new Rfc822Header();
  114.  
  115.       $message->setBody($body);
  116.       $content_type new ContentType('text/plain');
  117.       global $special_encoding$default_charset;
  118.       if ($special_encoding)
  119.          $header->encoding $special_encoding;
  120.       else
  121.          $header->encoding '8bit';
  122.       if ($default_charset)
  123.          $content_type->properties['charset']=$default_charset;
  124.       $header->content_type $content_type;
  125.  
  126.       $header->parseField('To'$to);
  127.       $header->parseField('Cc'$cc);
  128.       $header->parseField('Bcc'$bcc);
  129.       $header->parseField('From'$from);
  130.       $header->parseField('Subject'$subject);
  131.       $message->rfc822_header $header;
  132.    }
  133. //sm_print_r($message);exit;
  134.  
  135.  
  136.    if ($only_build_message_object)
  137.       return array(-1''$message);
  138.  
  139.  
  140.    global $useSendmail;
  141.  
  142.  
  143.    // ripped from src/compose.php - based on both 1.5.2 and 1.4.14
  144.    //
  145.    if (!$useSendmail{
  146.       require_once(SM_PATH 'class/deliver/Deliver_SMTP.class.php');
  147.       $deliver new Deliver_SMTP();
  148.              $domain$pop_before_smtp_host$smtp_stream_options;
  149.  
  150.       $authPop (isset($pop_before_smtp&& $pop_before_smtptrue false;
  151.       if (empty($pop_before_smtp_host)) $pop_before_smtp_host $smtpServerAddress;
  152.       $user '';
  153.       $pass '';
  154.       get_smtp_user($user$pass);
  155.       $stream $deliver->initStream($message,$domain,0,
  156.                 $smtpServerAddress$smtpPort$user$pass$authPop$pop_before_smtp_host$smtp_stream_options);
  157.    else {
  158.       require_once(SM_PATH 'class/deliver/Deliver_SendMail.class.php');
  159.       global $sendmail_path$sendmail_args;
  160.       // Check for outdated configuration
  161.       if (!isset($sendmail_args)) {
  162.          if ($sendmail_path=='/var/qmail/bin/qmail-inject'{
  163.             $sendmail_args '';
  164.          else {
  165.             $sendmail_args '-i -t';
  166.          }
  167.       }
  168.       $deliver new Deliver_SendMail(array('sendmail_args'=>$sendmail_args));
  169.       $stream $deliver->initStream($message,$sendmail_path);
  170.    }
  171.  
  172.  
  173.    $success false;
  174.    $message_id '';
  175.    if ($stream{
  176.       $deliver->mail($message$stream);
  177.       if (!empty($message->rfc822_header->message_id)) {
  178.          $message_id $message->rfc822_header->message_id;
  179.       }
  180.  
  181.       $success $deliver->finalizeStream($stream);
  182.    }
  183.  
  184.    return array($success$message_id$message);
  185.  
  186. }

Documentation generated on Mon, 13 Jan 2020 04:22:09 +0100 by phpDocumentor 1.4.3