Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Saturday, October 17, 2026

Diff for mylist/backend/receiver/receiver.php between version 1.3 and 1.4

version 1.3, 2005/03/30 12:53:55 version 1.4, 2005/04/10 19:42:45
Line 4 
Line 4 
 require_once    "validator.php";  require_once    "validator.php";
 require_once    "../../mylist.config.php";  require_once    "../../mylist.config.php";
 require_once    "../shared/emailMessage.php";  require_once    "../shared/emailMessage.php";
   require_once    "../../mylist_indexer.php";
   
 // an object of CReceiver class processes an incomming message  // an object of CReceiver class processes an incomming message
 // it agregates CValidator class that returns IDs of mailinglist into which was the message sent (all conditions like senders allowed, max_message_size, etc are validated)  // it agregates CValidator class that returns IDs of mailinglist into which was the message sent (all conditions like senders allowed, max_message_size, etc are validated)
Line 18  class CReceiver {
Line 18  class CReceiver {
         // contains modified headers (prefix, signature, etc)          // contains modified headers (prefix, signature, etc)
         var $modifiedMessage;          var $modifiedMessage;
   
           var $indexer;   //      indexes message
   
         // this function decides wheter an incomming email message will be accepted or not          // this function decides wheter an incomming email message will be accepted or not
         // all conditions (senders allowed, max_message_size) must be ok          // all conditions (senders allowed, max_message_size) must be ok
Line 42  class CReceiver {
Line 42  class CReceiver {
                 for($i = 0; $i < Count($this->validator->arrAccepted); $i++)                  for($i = 0; $i < Count($this->validator->arrAccepted); $i++)
                 {               // for each mailinglist we generate queue of recipients                  {               // for each mailinglist we generate queue of recipients
                         $queue_id = $this->processMessage($this->validator->arrAccepted[$i]);                          $queue_id = $this->processMessage($this->validator->arrAccepted[$i]);
                         $this->generateRecipients($this->validator->arrAccepted[$i], $queue_id);                          if ($queue_id)
                                   $this->generateRecipients($this->validator->arrAccepted[$i], $queue_id);
                 }                  }
   
         }          }
Line 55  class CReceiver {
Line 56  class CReceiver {
   
                 global $dbh;                  global $dbh;
   
   
                 $sql = "SELECT f_archive FROM mylist_lists WHERE id = $list_id";                  $sql = "SELECT f_archive FROM mylist_lists WHERE id = $list_id";
   
                 $f_archive =& $dbh->getOne($sql);                  $f_archive =& $dbh->getOne($sql);
   
                 if ($f_archive)                  if ($f_archive)
                 {                  {
                         $this->archiveMessage($list_id);                          $archive_id = $this->archiveMessage($list_id);
                         $this->indexMessage($list_id);                          if ($archive_id)
                           {
                                   $this->setParentID($archive_id);
   
                                   $this->indexer = new CIndexer();
                                   $this->indexer->subject = $this->modifiedMessage->subject;
                                   $this->indexer->header = $this->validator->emailMessage->structure->headers;
                                   $this->indexer->body = $this->emailMessage->plain_body;
                                   $this->indexer->attachements = "";
                                   // text attachements to db, others to filesystem
                                   if ($this->messageHasAttachements())
                                           $this->processAttachements($archive_id);
   
                                   $this->indexer->indexMessage($archive_id);
                           }
                 }                  }
   
                 return $message_queue_id;                  return $message_queue_id;
         }          }
   
Line 96  class CReceiver {
Line 109  class CReceiver {
                 $_header .= "X-Mailinglist-From: ".$row["name"]."\n";                  $_header .= "X-Mailinglist-From: ".$row["name"]."\n";
                 $_header .= "To: ".$row["name"]."\n";                  $_header .= "To: ".$row["name"]."\n";
                 $_header .= "Errors-To: $errors_to\n";                  $_header .= "Errors-To: $errors_to\n";
                   if (isset($this->validator->emailMessage->structure->headers["in-reply-to"]))
                           $_header .= "In-Reply-To: ".$this->validator->emailMessage->structure->headers["in-reply-to"].$MLIST_CRLF;
   
                   if (isset($this->validator->emailMessage->structure->headers["references"]))
                           $_header .= "References: ".$this->validator->emailMessage->structure->headers["references"].$MLIST_CRLF;
   
                 if ($row["f_reply_to_mlist"])                  if ($row["f_reply_to_mlist"])
                         $_header .= "Reply-To: ".$row["name"];                          $_header .= "Reply-To: ".$row["name"];
Line 123  class CReceiver {
Line 141  class CReceiver {
   
                 // ************* PREXIF SUBJECT ***********************                  // ************* PREXIF SUBJECT ***********************
   
                   $subject = $this->validator->emailMessage->structure->headers["subject"];
   
                 if ($row["f_prefix_subject"])                  if ($row["f_prefix_subject"])
                 {                  {
                         $this->modifiedMessage->subject = "[".$row["prefix"]."] ".$this->validator->emailMessage->structure->headers["subject"];                          if (!(  ($pos=StrPos($subject,"[".$row["prefix"]."]")) || ($subject[0] == "[".$row["prefix"]."]")          ))
                                   $this->modifiedMessage->subject = "[".$row["prefix"]."] ".$subject;
                 }                  }
                 else                  else
                         $this->modifiedMessage->subject = $this->validator->emailMessage->structure->headers["subject"];                          $this->modifiedMessage->subject = $subject;
   
   
                 $_header .= $MLIST_CRLF."Subject: ".$this->modifiedMessage->subject;                  $_header .= $MLIST_CRLF."Subject: ".$this->modifiedMessage->subject;
   
   
                 $this->modifiedMessage->header = $_header;  
   
                 // ****************************************************                  // ****************************************************
                 // ****************************************************                  // ****************************************************
   
   
                   // ************** OTHERS ***************
   
                   if (isset($this->validator->emailMessage->structure->headers["mime-version"]))
                           $_header .= "MIME-Version: ".$this->validator->emailMessage->structure->headers["mime-version"].$MLIST_CRLF;
   
                   if (isset($this->validator->emailMessage->structure->headers["content-type"]))
                           $_header .= "Content-Type: ".$this->validator->emailMessage->structure->headers["content-type"].$MLIST_CRLF;
   
                   $this->modifiedMessage->header = $_header;
   
                   // *****************************************************
   
   
   
   
   
                 // ****************************************************                  // ****************************************************
                 // ************* BODY MODIFICATIONS *******************                  // ************* BODY MODIFICATIONS *******************
   
   
                 if ($row["f_append_sig"])                  if ($row["f_append_sig"])
                 {                  {
                         $this->modifiedMessage->body = $this->validator->emailMessage->body."\n_______________________________________________________________________________\n".$row["signature"];                          if (! $this->messageHasAttachements())
                           {
                                   $this->modifiedMessage->body = $this->validator->emailMessage->body."\n_______________________________________________________________________________\n".$row["signature"];
   
                                   $this->emailMessage->plain_body = $this->modifiedMessage->body;
                           }
                           else
                           {
                                   // the message has attachements
                                   $plainbody = $this->getPlainBodyText();
                                   $finalbody = $this->addSignature($row["signature"],$plainbody);
                                   $this->modifiedMessage->body = $finalbody;
                                   $this->emailMessage->plain_body = $plainbody."\r\n".$row["signature"];
   
                           }
                 }                  }
                 else                  else
                   {
                         $this->modifiedMessage->body = $this->validator->emailMessage->body;                          $this->modifiedMessage->body = $this->validator->emailMessage->body;
                           $this->emailMessage->plain_body = $this->modifiedMessage->body;
                   }
   
                 // ****************************************************                  // ****************************************************
                 // ****************************************************                  // ****************************************************
         }          }
Line 159  class CReceiver {
Line 212  class CReceiver {
         function insertMessageIntoQueue($_list_id)          function insertMessageIntoQueue($_list_id)
         {          {
                 global $dbh;                  global $dbh;
   
   
                 $sql  = "INSERT INTO mylist_queue_messages (message_header, message_body) VALUES ";                  $sql  = "INSERT INTO mylist_queue_messages (message_header, message_body) VALUES ";
                 $sql .= "('".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->body)."')";                  $sql .= "('".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->body)."')";
   
                 $res =& $dbh->query($sql);                  $res =& $dbh->query($sql);
   
                 if (PEAR::isError($res))                  if (PEAR::isError($res))
                         die($res->getMessage());                          die($res->getMessage());
   
Line 176  class CReceiver {
Line 226  class CReceiver {
                 if (PEAR::isError($res))                  if (PEAR::isError($res))
                         die($res->getMessage());                          die($res->getMessage());
   
                 $res->fetchInto($row, DB_FETCHMODE_ASSOC);                  $res->fetchInto($row);
                 return $row["id"];                  return $row["id"];
         }          }
   
Line 239  class CReceiver {
Line 289  class CReceiver {
         {          {
                 // header, body, subject was alredy set in $this->modifyMessage();                  // header, body, subject was alredy set in $this->modifyMessage();
                 $this->modifiedMessage->from = $this->validator->emailMessage->sender;                  $this->modifiedMessage->from = $this->validator->emailMessage->sender;
         //      $this->modifiedMessage->dt_header = $this->validator->emailMessage->structure->headers["date"];                  $this->modifiedMessage->dt_header = Date("Y-m-d H:i:s", StrToTime($this->validator->emailMessage->structure->headers["date"]));
                 $this->modifiedMessage->dt_received = NULL;                  $this->modifiedMessage->dt_received = Date("Y-m-d H:i:s");
                 $this->modifiedMessage->messageID = $this->validator->emailMessage->structure->headers["message-id"];                  $this->modifiedMessage->messageID = $this->validator->emailMessage->structure->headers["message-id"];
 //              print_r($this->modifiedMessage);  
 //              print_r($this->validator->emailMessage);  
   
                 global $dbh;                  global $dbh;
   
                 $sql  = "INSERT INTO mylist_messages ";                  $sql  = "INSERT INTO mylist_messages ";
                 $sql .= "(list_id, messageid, dt_header, dt_received, ";                  $sql .= "(list_id, messageid, `from`, dt_header, dt_received, ";
                 $sql .= "header, subject, body) VALUES ";                  $sql .= "header, subject, body) VALUES ";
 //              $sql .= "($_list_id, '".$this->modifiedMessage->messageID."', '".AddSlashes($this->modifiedMessage->from)."', '".$this->modifiedMessage->dt_header."', '".$this->modifiedMessage->dt_received."', '".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->subject)."', '".AddSlashes($this->modifiedMessage->body)."')";                  $sql .= "($_list_id, '".$this->modifiedMessage->messageID."', '".AddSlashes($this->modifiedMessage->from)."', '".$this->modifiedMessage->dt_header."', '".$this->modifiedMessage->dt_received."', '".AddSlashes($this->validator->emailMessage->header)."', '".AddSlashes($this->modifiedMessage->subject)."', '".AddSlashes($this->emailMessage->plain_body)."')";
                 $sql .= "($_list_id, '".$this->modifiedMessage->messageID."', '".$this->modifiedMessage->dt_header."', '".$this->modifiedMessage->dt_received."', '".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->subject)."', '".AddSlashes($this->modifiedMessage->body)."')";  
   
   
                 $res =& $dbh->query($sql);                  $res =& $dbh->query($sql);
                 if (PEAR::isError($res))                  if (PEAR::isError($res))
                                         if (StrCmp("DB Error: already exists", $res->getMessage()) != 0)                          if (StrCmp("DB Error: already exists", $res->getMessage()) != 0)
                                   die($res->getMessage());
                           else
                                   return;
   
                   $sql = "SELECT id FROM mylist_messages WHERE list_id = $_list_id AND messageid LIKE '".$this->modifiedMessage->messageID."'";
                   $res =& $dbh->query($sql);
                   if (PEAR::isError($res))
                           die($res->getMessage());
   
                   $res->fetchInto($row);
                   return $row["id"];
           }
   
   function setParentID($id)
   {
           global $dbh;
   
           $in_reply_to = $this->validator->emailMessage->structure->headers["in-reply-to"];
           if (StrLen($in_reply_to) > 0)
           {
                   $sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($in_reply_to)."'";
   
                   $res =& $dbh->getOne($sql);
                   if (PEAR::isError($res))
                         die($res->getMessage());                          die($res->getMessage());
                   if ($res != "")
                   {
                           $sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id;
                                   $res =& $dbh->query($sql);
                           if (PEAR::isError($res))
                                   die($res->getMessage());
                           return;
                   }
           }
   
           $references = Array();
           $references = explode(" ", $this->validator->emailMessage->structure->headers["references"]);
   
           for($i=Count($references); $i > 0; $i--)
           {
                   if (StrLen($references[$i-1]) > 0)
                   {
                           $sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($references[$i-1])."'";
                           $res =& $dbh->getOne($sql);
                           if (PEAR::isError($res))
                                   die($res->getMessage());
   
                           if ($res != "")
                           {
                                   $sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id;
                                   $res =& $dbh->query($sql);
                                   if (PEAR::isError($res))
                                           die($res->getMessage());
   
                           return;
                           }
                   }
           }
   
   
   }
   
   
   
   function messageHasAttachements()
   {
           if (Is_Array($this->validator->emailMessage->structure->parts))
                   return  true;
           else
                   return false;
   }
   
   
   function getPlainBodyText()
   {
   
   foreach ($this->validator->emailMessage->structure->parts as $part)
   {
   
   if (isset($part->disposition))
   {
   
   }
   else if (is_Array($part->parts))
   {
           Reset($part->parts);
           While($field = Current($part->parts))
           {
                   if (($field->ctype_primary == "text") && ($field->ctype_secondary == "plain"))
                           return $field->body;
           Next($part->parts);
         }          }
   
   }
   else if (($part->ctype_primary == "text") && ($part->ctype_secondary == "plain"))
           return $part->body;
   }
   
         function indexMessage($_list_id)  }
   
   
   function addSignature($signature,$plainbody)
   {
           $old_body = $this->validator->emailMessage->body;
           $first_sign = "Content-Type: text/plain";
   
           if (($pos=StrPos($old_body,$first_sign)) || $old_body[0] == $first_sign)
         {          {
                   $body_less = SubStr($old_body,$pos);
                   if (($pos2 = StrPos($body_less, $plainbody)) || $body_less[0] == $plain_body)
                   {
                           // teraz idem spravit vysledok
                           $result = "";
                           $part1 = SubStr($old_body, 0 , $pos  + $pos2 + StrLen($plainbody) );
                           $part2 = SubStr($old_body, $pos  + $pos2 + StrLen($plainbody));
   
                           $result = $part1."\r\n".$signature."\r\n".$part2;
                           return $result;
   
   
                   }
   
         }          }
   
   }
   
   
   function processAttachements($id)
   {
   
   global $dbh;
   
   foreach ($this->validator->emailMessage->structure->parts as $part)
   {
   
           if (isset($part->disposition) and ($part->disposition=='attachment'))
           {
                   $filename = $part->d_parameters['filename'];
                   if ($filename == "")
                           $filename = "attachement";
   
                   $sql  = "INSERT INTO mylist_message_atts ";
                   $sql .= "(message_id, atts_headers, atts_body, path, filename) ";
                   $sql .= "VALUES ";
                   $sql .= "($id, '".$part->ctype_primary."/".$part->ctype_secondary."', ";
   
                   if ($part->ctype_primary == "text")
                   {
                           $sql .= "'".AddSlashes($part->body)."', '', '$filename')";
                           $this->indexer->attachements .=  $part->body."\n\n";
                   }
                   else
                   {
                           $path = $this->copyToFilesystem($part->body);
                           $sql .= "'', '$path', '$filename')";
   
                   }
   
                   $res =& $dbh->query($sql);
                   if (PEAR::isError($res))
                           die($res->getMessage());
   
   
           }
   
   }
   
   }
   
   function copyToFilesystem($content)
   {
           global $atts_dir_backend;
   
           Srand((double) MicroTime() * 1e6);
   
           $unique  = Time();
           $unique .= "_".Rand(0,GetRandMax());
   
           while ( File_Exists($unique))
           {
                   $unique  = Time();
                   $unique .= "_".Rand(0,GetRandMax());
           }
   
           $fp = fopen($atts_dir_backend.$unique, 'w');
           fwrite($fp, $content);
           fclose($fp);
   
           return $unique;
   }
   
 function moveFile($accepted)  function moveFile($accepted)
         {          {
                 global $dir_accepted, $dir_rejected;                  global $dir_accepted, $dir_rejected;

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top