Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1044131
in-portal
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, Jun 24, 11:28 PM
Size
31 KB
Mime Type
text/x-diff
Expires
Thu, Jun 26, 11:28 PM (3 h, 58 m)
Engine
blob
Format
Raw Data
Handle
675311
Attached To
rINP In-Portal
in-portal
View Options
Index: branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php
===================================================================
--- branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php (revision 6137)
@@ -0,0 +1,1006 @@
+<?php
+class clsEmailMessage extends clsParsedItem
+{
+ var $Event = "";
+ var $Item;
+ var $headers = array();
+ var $subject = "";
+ var $body = "";
+ var $TemplateParsed = FALSE;
+ var $recipient = NULL;
+ var $fromuser = NULL;
+
+ function clsEmailMessage($MessageId=NULL,$Item=NULL)
+ {
+ $this->clsParsedItem();
+ $this->tablename = GetTablePrefix()."EmailMessage";
+ $this->Item = $Item;
+ $this->BasePermission = "EMAIL";
+ $this->id_field = "EmailMessageId";
+ $this->TagPrefix = "email";
+ $this->NoResourceId=1;
+ if($MessageId)
+ $this->LoadFromDatabase($MessageId);
+ }
+
+ function LoadEvent($event,$language=NULL)
+ {
+ global $objConfig, $objLanguages;
+
+ if(!strlen($language))
+ $language = $objLanguages->GetPrimary();
+ $sql = "SELECT * FROM ".$this->tablename." WHERE EventId = $event AND LanguageId=$language";
+ $rs = $this->adodbConnection->Execute($sql);
+ if($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $this->SetFromArray($data);
+ $this->Clean();
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+ function LoadFromDatabase($MessageId)
+ {
+ global $Errors;
+
+ $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$MessageId);
+ $result = $this->adodbConnection->Execute($sql);
+ if ($result === FALSE)
+ {
+ $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
+ return FALSE;
+ }
+ $data = $result->fields;
+ $this->SetFromArray($data);
+ return TRUE;
+ }
+
+ function EditTemplate()
+ {
+ }
+
+ /* read the template, split into peices */
+ function ReadTemplate()
+ {
+ if (!$this->TemplateParsed) {
+ $this->headers = Array();
+
+ // add footer: begin
+ $sql = 'SELECT em.Template
+ FROM '.$this->tablename.' em
+ LEFT JOIN '.TABLE_PREFIX.'Events e ON e.EventId = em.EventId
+ WHERE em.LanguageId = '.$this->Get('LanguageId').' AND e.Event = "COMMON.FOOTER"';
+ $footer = explode("\n\n", $this->Conn->GetOne($sql));
+
+ $email_object = &$this->Application->recallObject('kEmailMessage');
+ $email_object->Clear();
+
+ $footer = $this->Get('MessageType') == 'text' ? $email_object->convertHTMLtoPlain($footer[1]) : '<br/>'.$footer[1];
+
+ $template = $this->Get('Template')."\r\n".$footer;
+ // add footer: end
+
+ $template = str_replace("\r", '', $template);
+ $lines = explode("\n", $template);
+ $header_end = false;
+ $i = 0;
+ while(!$header_end && $i<count($lines))
+ {
+ $h = $lines[$i];
+ if (strlen(trim($h))==0 || ($h==".")) {
+ $header_end = true;
+ }
+ else {
+ $parts = explode(":",$h,2);
+
+ if (strtolower($parts[0])=="subject") {
+ $this->subject = $h;
+ }
+ else {
+ $this->headers[] = $h;
+ }
+ }
+ $i++;
+ }
+ while ($i<count($lines)) {
+ $this->body .= trim($lines[$i++])."\r\n";
+ }
+
+// $this->body .= "\r".$footer;
+ $this->TemplateParsed = true;
+
+
+ }
+ }
+
+ function ParseSection($text, $parser=null)
+ {
+ global $objUsers, $objTemplate;
+
+ $res = $this->ParseTemplateText($text);
+
+ /* parse email class tags */
+ if(!is_object($this->fromuser))
+ {
+ $this->fromuser = $objUsers->GetItem($this->Get("FromUserId"));
+ $this->fromuser->TagPrefix = "fromuser";
+ }
+
+ /* parse from user object */
+ if(is_object($this->fromuser))
+ {
+ $res = $this->fromuser->ParseTemplateText($res);
+ }
+
+ /* parse recipient user object */
+ if(is_object($this->recipient))
+ {
+ $res = $this->recipient->ParseTemplateText($res);
+ }
+
+ //print_pre($this->Item);
+ if(is_object($this->Item))
+ {
+ $res = $this->Item->ParseTemplateText($res);
+ }
+ else
+ {
+
+ if(!is_object($objTemplate))
+ $objTemplate = new clsTemplateList(" ");
+ $res = $objTemplate->ParseTemplateText($res);
+ }
+
+ return $res;
+ }
+
+ function SendToGroup($GroupId)
+ {
+ global $objUsers;
+
+ $users = $objUsers->Query_GroupPortalUser("GroupId=$GroupId");
+ if(is_array($users))
+ {
+ foreach($users as $u)
+ {
+ $this->SendToUser($u->Get("PortalUserId"));
+ }
+ }
+ }
+
+ function SendToAddress($EmailAddress,$name="")
+ {
+ global $objUsers, $objEmailQueue,$objConfig;
+
+ $conn = &GetADODBConnection();
+ //$this->recipient = $objUsers->GetUser($UserId);
+ //$this->recipient->TagPrefix="touser";
+ if(strlen($EmailAddress))
+ {
+ $to_addr = $EmailAddress;
+ $this->ReadTemplate();
+
+ $subject = $this->ParseSection($this->subject);
+ $body = $this->ParseSection($this->body);
+
+ if(is_object($this->fromuser))
+ {
+ $FromAddr = $this->fromuser->Get("Email");
+ $FromName = trim($this->fromuser->Get("FirstName")." ".$this->fromuser->Get("LastName"));
+ }
+ if(!strlen($FromAddr))
+ {
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+
+ $charset = "ascii-us";
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = nl2br($body);
+// $body = str_replace("<br />","\n",$body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /*$time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To', '$subject', $time, '')";
+ $conn->Execute($sql); */
+
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+
+ function SendToUser($UserId)
+ {
+ global $objUsers, $objEmailQueue, $objConfig;
+
+ $conn = &GetADODBConnection();
+ //echo "Handling Event ".$this->Get("Event")." for user $UserId <br>\n";
+ $this->recipient = new clsPortalUser($UserId); // $objUsers->GetItem($UserId);
+ //echo "<PRE>";print_r($this->recipient); echo "</PRE>";
+ $this->recipient->TagPrefix="touser";
+ if($this->recipient->Get("PortalUserId")==$UserId)
+ {
+ $to_addr = $this->recipient->Get("Email");
+ $To = trim($this->recipient->Get("FirstName")." ".$this->recipient->Get("LastName"));
+
+ $this->ReadTemplate();
+
+ $subject = $this->ParseSection($this->subject, $this->recipient);
+ $body = $this->ParseSection($this->body);
+
+ if(!is_object($this->fromuser))
+ {
+ $this->fromuser = $objUsers->GetItem($this->Get("FromUserId"));
+ }
+ if(is_object($this->fromuser))
+ {
+ $FromAddr = $this->fromuser->Get("Email");
+ $FromName = trim($this->fromuser->Get("FirstName")." ".$this->fromuser->Get("LastName"));
+
+ $charset = "ascii-us";
+ }
+
+ if(!strlen($FromAddr))
+ {
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+// echo $this->Event;
+
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = str_replace("\r", "", $body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /*$time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
+ $conn->Execute($sql); */
+
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ function SendAdmin()
+ {
+ global $objUsers, $objConfig, $objEmailQueue;
+
+ $conn = &GetADODBConnection();
+
+ $this->recipient = $objUsers->GetUser($this->Get("FromUserId"));
+ $this->recipient->TagPrefix="touser";
+
+ if($this->recipient->Get("PortalUserId")==$this->Get("FromUserId") || strlen($this->recipient->Get("PortalUserId")) == 0)
+ {
+ $to_addr = $this->recipient->Get("Email");
+ $To = trim($this->recipient->Get("FirstName")." ".$this->recipient->Get("LastName"));
+ $this->ReadTemplate();
+
+ if (strlen($to_addr) == 0) {
+ $to_addr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+
+ $subject = $this->ParseSection($this->subject);
+ $body = $this->ParseSection($this->body);
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ if(strlen($FromAddr))
+ {
+ $charset = "ascii-us";
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset,$this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = str_replace("\r", "", $body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /* $time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
+ $conn->Execute($sql);
+ */
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ function ParseTemplateText($text)
+ {
+ $html = $text;
+ $search = "<inp:";
+ //$search = "<inp:".$this->TagPrefix;
+ //$next_tag = strpos($html,"<inp:");
+ $next_tag = strpos($html,$search);
+
+ while($next_tag)
+ {
+ $closer = strpos(strtolower($html),">",$next_tag);
+ $end_tag = strpos($html,"/>",$next_tag);
+ if($end_tag < $closer || $closer == 0)
+ {
+ $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2);
+ $pre = substr($html,0,$next_tag);
+ $post = substr($html,$end_tag+2);
+ $inner = $this->ParseElement($tagtext);
+ $html = $pre.$inner.$post;
+ }
+ else
+ {
+
+ $OldTagStyle = "</inp>";
+
+ ## Try to find end of TagName
+ $TagNameEnd = strpos($html, " ", $next_tag);
+
+ ## Support Old version
+// $closer = strpos(strtolower($html),"</inp>",$next_tag);
+ if ($TagNameEnd)
+ {
+ $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag));
+ $TagName = explode(":", $Tag);
+ if (strlen($TagName[1]))
+ $CloserTag = "</inp:".$TagName[1].">";
+ }
+ else
+ {
+ $CloserTag = $OldTagStyle;
+ }
+
+ $closer = strpos(strtolower($html), $CloserTag, $next_tag);
+
+ ## Try to find old tag closer
+ if (!$closer && ($CloserTag != $OldTagStyle))
+ {
+ $CloserTag = $OldTagStyle;
+ $closer = strpos(strtolower($html), $CloserTag, $next_tag);
+ }
+
+ $end_tag = strpos($html,">",$next_tag);
+ $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+1);
+ $pre = substr($html,0,$next_tag);
+ $inner = substr($html,$end_tag+1,$closer-($end_tag+1));
+ $post = substr($html,$end_tag+1+strlen($inner) + strlen($CloserTag));
+ //echo "PRE:". htmlentities($pre,ENT_NOQUOTES);
+ //echo "INNER:". htmlentities($inner,ENT_NOQUOTES);
+ //echo "POST:". htmlentities($post,ENT_NOQUOTES);
+
+ $parsed = $this->ParseElement($tagtext);
+ if(strlen($parsed))
+ {
+ $html = $pre.$this->ParseTemplateText($inner).$post;
+ }
+ else
+ $html = $pre.$post;
+ }
+ $next_tag = strpos($html,$search);
+ }
+ return $html;
+ }
+
+ function ParseElement($raw, $inner_html ="")
+ {
+ $tag = new clsHtmlTag($raw);
+ $tag->inner_html = $inner_html;
+
+ if($tag->parsed)
+ {
+ if($tag->name=="include" || $tag->name=="perm_include" || $tag->name=="lang_include")
+ {
+ $output = $this->Parser->IncludeTemplate($tag);
+ }
+ else
+ {
+ if (is_object($this->Item)) {
+ $this->Item->TagPrefix = $tag->name;
+ $output = $this->Item->ParseObject($tag);
+ }
+ else {
+ $output = $this->ParseObject($tag);
+ }
+
+ if(substr($output,0,9)=="Undefined")
+ {
+ $output = $tag->Execute();
+ // if(substr($output,0,8)="{Unknown")
+ // $output = $raw;
+ } return $output;
+ }
+ }
+ else
+ return "";
+ }
+}
+
+class clsEmailMessageList extends clsItemCollection
+{
+ function clsEmailMessageList()
+ {
+ $this->clsItemCollection();
+ $this->classname = "clsEmailMessage";
+ $this->SourceTable = GetTablePrefix()."EmailMessage";
+ $this->PerPageVar = "Perpage_EmailEvents";
+ $this->AdminSearchFields = array("Template","Description", "Module","Event");
+ }
+
+ function LoadLanguage($LangId=NULL)
+ {
+ global $objLanguages;
+
+ if(!$LangId)
+ $LangId = $objLanguages->GetPrimary();
+
+ $sql = "SELECT * FROM ".$this->SourceTable." WHERE LanguageId=$LangId";
+ $this->Clear();
+ return $this->Query_Item($sql);
+ }
+
+ function &AddEmailEvent($Template, $Type, $LangId, $EventId)
+ {
+ $e = new clsEmailMessage();
+ $e->tablename = $this->SourceTable;
+ $e->Set(array("Template","MessageType","LanguageId","EventId"),
+ array($Template,$Type,$LangId,$EventId));
+ $e->Dirty();
+ $e->Create();
+
+ return $e;
+ }
+
+ function DeleteLanguage($LangId)
+ {
+ $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId=$LangId OR LanguageId = 0";
+ if( $GLOBALS['debuglevel'] ) echo $sql."<br>\n";
+
+ $this->adodbConnection->Execute($sql);
+ }
+
+ function &GetMessage($EventId,$LangId,$LoadFromDB=TRUE)
+ {
+ $found=FALSE;
+
+ if(is_array($this->Items))
+ {
+ for($x=0;$x<count($this->Items);$x++)
+ {
+ $i =& $this->GetItemRefByIndex($x);
+ if(is_object($i))
+ {
+ if($i->Get("EventId")==$EventId && $i->Get("LanguageId")==$LangId)
+ {
+ $found=TRUE;
+ break;
+ }
+ }
+ }
+ }
+ if(!$found)
+ {
+ if($LoadFromDB)
+ {
+ $n = NULL;
+ $n = new $this->classname();
+ $n->tablename = $this->SourceTable;
+ if($n->LoadEvent($EventId,$LangId))
+ {
+ array_push($this->Items, $n);
+ $i =& $this->Items[count($this->Items)-1];
+ }
+ else
+ $i = FALSE;
+ }
+ else
+ $i = FALSE;
+ }
+ return $i;
+ }
+
+ function CreateEmptyEditTable($IdList, $use_parent = false)
+ {
+ global $objSession;
+
+ if (!$use_parent) {
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ $query = "SELECT * FROM ".$this->SourceTable." WHERE 0";
+ $insert = "CREATE TABLE ".$edit_table." ".$query;
+ if($objSession->HasSystemPermission("DEBUG.LIST"))
+ echo htmlentities($insert,ENT_NOQUOTES)."<br>\n";
+ $this->adodbConnection->Execute($insert);
+ $this->LoadLanguage();
+ $idvalue = -1;
+ for($i=0;$i<$this->NumItems();$i++)
+ {
+ $e =& $this->Items[$i];
+ $e->SourceTable = $edit_table;
+ if(is_array($IdList))
+ {
+ foreach($IdList as $id)
+ {
+ $e->UnsetIdField();
+ $e->Set("EmailMessageId",$idvalue--);
+ $e->Set("LanguageId",$id);
+// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$id));
+ $e->Create();
+ }
+ }
+ else
+ {
+ $e->UnsetIdField();
+ $e->Set("EmailMessageId",$idvalue--);
+ $e->Set("LanguageId",$IdList);
+// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$LangId));
+ $e->Create();
+ }
+ }
+ $this->Clear();
+ }
+ else {
+ parent::CreateEmptyEditTable($IdList);
+ }
+ }
+
+ function CopyFromEditTable()
+ {
+ global $objSession;
+ $GLOBALS['_CopyFromEditTable']=1;
+
+ $idfield = "EmailMessageId";
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ $sql = "SELECT * FROM $edit_table WHERE LanguageId <> 0";
+ $rs = $this->adodbConnection->Execute($sql);
+ while($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $c = new $this->classname;
+ $c->SetFromArray($data);
+ //$c->idfield = $idfield;
+ if($c->Get($idfield)<1)
+ {
+ $old_id = $c->Get($idfield);
+ $c->Dirty();
+ $c->UnsetIdField();
+ $c->Create();
+ }
+ else
+ {
+ $c->Dirty();
+ $c->Update();
+ }
+ $rs->MoveNext();
+ }
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ unset($GLOBALS['_CopyFromEditTable']);
+ }
+
+ function PurgeEditTable()
+ {
+ global $objSession;
+
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ }
+
+ function &GetEmailEventObject($EventName,$Type=0,$LangId=NULL)
+ {
+ global $objLanguages;
+
+ if(!$LangId)
+ $LangId = $objLanguages->GetPrimary();
+ $EmailTable = $this->SourceTable;
+ $EventTable = GetTablePrefix()."Events";
+ $sql = "SELECT * FROM $EventTable INNER JOIN $EmailTable ON ($EventTable.EventId = $EmailTable.EventId) ";
+ $sql .="WHERE Event='$EventName' AND LanguageId=$LangId AND Type=$Type";
+ $result = $this->adodbConnection->Execute($sql);
+
+ if ($result === FALSE)
+ {
+ //$Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"","clsEvent","GetEmailEventObject");
+ return FALSE;
+ }
+ $data = $result->fields;
+ $e = new clsEmailMessage();
+ $e->SetFromArray($data);
+ $e->Clean();
+ return $e;
+ }
+
+ function ReadImportTable($TableName,$Overwrite=FALSE, $MaxInserts=100,$Offset=0)
+ {
+ $eml = new clsEmailMessageList();
+ $this->Clear();
+ $Inserts = 0;
+ $sql = "SELECT * FROM $TableName LIMIT $Offset,$MaxInserts";
+ $this->Query_Item($sql);
+ if($this->NumItems()>0)
+ {
+ foreach($this->Items as $i)
+ {
+ $e = $eml->GetMessage($i->Get("EventId"),$i->Get("LanguageId"));
+ if(is_object($e))
+ {
+ if($Overwrite)
+ {
+ $e->Set("MessageType",$i->Get("MessageType"));
+ $e->Set("Template",$i->Get("Template"));
+ $e->Update();
+ }
+ }
+ else
+ {
+ $i->Create();
+ }
+ $Inserts++;
+ }
+ }
+ $Offset = $Offset + $Inserts;
+ return $Offset;
+ }
+}
+
+function EventEnabled($e)
+{
+ global $objConfig;
+
+ $var = "Email_".$e."_Enabled";
+
+ return ($objConfig->Get($var)=="1");
+}
+
+class clsEmailQueue
+{
+ var $SourceTable;
+ var $MessagesAtOnce;
+ var $MessagesSent=0;
+ var $LogLevel = 0;
+ var $HLB = "\n"; // Headers Line Break
+ var $BLB = "\n"; // Body Line Break
+
+ function clsEmailQueue($SourceTable=NULL,$MessagesAtOnce=NULL)
+ {
+ global $objConfig;
+
+ $this->HLB = chr(10);
+ $this->BLB = chr(10);
+
+ if($SourceTable)
+ {
+ $this->SourceTable=$SourceTable;
+ }
+ else
+ $this->SourceTable = GetTablePrefix()."EmailQueue";
+ if(!$MessagesAtOnce)
+ $MessagesAtOnce = (int)$objConfig->Get("Email_MaxSend");
+ if($MessagesAtOnce<1)
+ $MessagesAtOnce=1;
+ $this->MessagesAtOnce = $MessagesAtOnce;
+ $this->LogLevel = (int)$objConfig->Get("Smtp_LogLevel");
+ }
+
+ function WriteToMailLog($text)
+ {
+ global $pathtoroot,$admin;
+ //echo htmlentities($text)."<br>\n";
+ if($this->LogLevel>0)
+ {
+ $Logfile = $pathtoroot.$admin."/email/log.txt";
+ if(is_writable($Logfile))
+ {
+ $fp = fopen($Logfile,"a");
+ if($fp)
+ {
+ fputs($fp,$text."\n");
+ fclose($fp);
+ }
+ }
+ }
+ }
+
+ function AllowSockets()
+ {
+ $minver = explode(".", "4.3.0");
+ $curver = explode(".", phpversion());
+ if (($curver[0] < $minver[0])
+ || (($curver[0] == $minver[0])
+ && ($curver[1] < $minver[1]))
+ || (($curver[0] == $minver[0]) && ($curver[1] == $minver[1])
+ && ($curver[2][0] < $minver[2][0])))
+ return false;
+ else
+ return true;
+ }
+
+ function DeliverMail($To,$From,$Subject,$Msg,$headers, $ForceSend=0)
+ {
+ global $MessagesSent,$objConfig;
+
+ if(($this->MessagesSent >$this->MessagesAtOnce) && !$ForceSend)
+ {
+ $this->EnqueueMail($To,$From,$Subject,$Msg,$headers);
+ return TRUE;
+ }
+ else
+ {
+ $this->MessagesSent++;
+
+ $time = adodb_mktime();
+ $conn = &GetADODBConnection();
+
+ /* $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '".htmlspecialchars($From)."', '".htmlspecialchars($To)."', '$Subject', $time, '')";
+ $conn->Execute($sql);*/
+
+
+ $headers = "Date: ".adodb_date("r")."\n".$headers;
+ $headers = "Return-Path: ".$objConfig->Get("Smtp_AdminMailFrom")."\n".$headers;
+
+ /* ensure headers are using \r\n instead of \n */
+ $headers = str_replace("\n\n","\r\n\r\n",$headers);
+ $headers = str_replace("\r\n","\n",$headers);
+ $headers = str_replace("\n","\r\n",$headers);
+
+ // if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
+ $Msg = str_replace("\n\n","\r\n\r\n",$Msg);
+ $Msg = str_replace("\r\n","\n",$Msg);
+ $Msg = str_replace("\n","\r\n",$Msg);
+ // }
+
+ //echo "<PRE>"; print_r(htmlentities($headers)); echo "</PRE>";
+ //echo "<PRE>"; print_r(htmlentities($Msg)); echo "</PRE>";
+ $ver = phpversion();
+ if(substr($Subject,0,9)=="Subject: ")
+ $Subject = substr($Subject,9);
+ if(!strlen($objConfig->Get("Smtp_Server")) || !$this->AllowSockets())
+ {
+ return mail($To,trim($Subject),$Msg, $headers);
+ }
+
+ $headers = "To: <".$To.">"."\r\n".$headers;
+ $headers = "Subject: ".trim($Subject)."\r\n".$headers;
+
+ if (strpos($To, ',') !== false) {
+ $To = str_replace(' ', '', $this->To);
+ $send_params['recipients'] = explode(',', $this->To);
+ }
+ else {
+ $send_params['recipients'] = array($To); // The recipients (can be multiple)
+ }
+ $send_params['from'] = $From; // This is used as in the MAIL FROM: cmd
+ $send_params['headers'] = explode("\r\n",$headers);
+ // It should end up as the Return-Path: header
+ $send_params['body'] = $Msg; // The body of the email
+
+ $params['host'] = $objConfig->Get("Smtp_Server"); // The smtp server host/ip
+
+ $params['port'] = 25; // The smtp server port
+ $params['hello'] = 'INPORTAL'; // What to use when sending the helo command. Typically, your domain/hostname
+ if($objConfig->Get("Smtp_Authenticate")) // Whether to use basic authentication or not
+ {
+ $params['auth'] = TRUE;
+ $params['user'] = $objConfig->Get("Smtp_User");
+ $params['pass'] = $objConfig->get("Smtp_Pass");
+ }
+ else
+ $params['auth'] = FALSE;
+ $this->LogLevel=0;
+ $SmtpServer = new smtp($params);
+ if($this->LogLevel>0)
+ {
+ $SmtpServer->debug=1;
+ foreach($params as $key=>$value)
+ {
+ $this->WriteToMailLog($key."=".$value);
+ }
+ }
+ else
+ {
+ //$SmtpServer->debug = 1;
+ }
+ $connected = $SmtpServer->connect();
+
+ if($connected)
+ {
+ if($this->LogLevel>1)
+ {
+ $this->WriteToMailLog("Connected to ".$params['host']);
+ }
+ $res = $SmtpServer->send($send_params);
+ }
+ $SmtpServer->disconnect();
+
+ if($this->LogLevel>1)
+ {
+ foreach($SmtpServer->buffer as $l)
+ {
+ $this->WriteToMailLog($l);
+ }
+ }
+
+ if($this->LogLevel>0)
+ {
+ if(count($SmtpServer->errors)>0)
+ {
+ foreach($SmtpServer->errors as $e)
+ {
+ $this->WriteToMailLog($e);
+ }
+ }
+ else
+ $this->WriteToMailLog("Message to $From Delivered Successfully");
+ }
+ unset($SmtpServer);
+ return $res;
+ }
+ }
+
+ function EnqueueMail($To,$From,$Subject,$Msg,$headers)
+ {
+ global $objSession;
+
+ $ado = &GetADODBConnection();
+ $To = mysql_escape_string($To);
+ $From = mysql_escape_string($From);
+ $Msg = mysql_escape_string($Msg);
+ $headers = mysql_escape_string($headers);
+ $Subject = mysql_escape_string($Subject);
+ $sql = "INSERT INTO ".$this->SourceTable." (toaddr,fromaddr,subject,message,headers) VALUES ('$To','$From','$Subject','$Msg','$headers')";
+ $ado->Execute($sql);
+ }
+
+ function SendMailQeue()
+ {
+ global $objConfig, $objSession, $TotalMessagesSent;
+
+ $ado = &GetADODBConnection();
+ $MaxAllowed = $this->MessagesAtOnce;
+
+ $del_sql = array();
+
+ $NumToSend = $MaxAllowed - $this->MessagesSent;
+ if($NumToSend < 0) $NumToSend=1; // Don't really know why, but this could happend, so issued this temp fix
+ $sql = "SELECT * FROM ".$this->SourceTable." ORDER BY queued ASC LIMIT $NumToSend";
+ $rs = $ado->Execute($sql);
+
+ while($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $this->DeliverMail($data["toaddr"],$data["fromaddr"],$data["Subject"],$data["message"],$data["headers"],1);
+
+ $del_sql[] = "DELETE FROM ".$this->SourceTable." WHERE queued='".$data["queued"]."'";
+ $rs->MoveNext();
+ }
+
+ $numdel = count($del_sql);
+ for($i=0;$i<$numdel;$i++)
+ {
+ $sql = $del_sql[$i];
+ if(strlen($sql))
+ $ado->Execute($sql);
+ if($objSession->HasSystemPermission("DEBUG.ITEM"))
+ echo htmlentities($sql,ENT_NOQUOTES)."<br>\n";
+ }
+ }
+
+ function SendMail($From, $FromName, $ToAddr, $ToName, $Subject, $Text, $Html, $charset, $SendEvent,$FileName="",$FileLoc="",$QueueOnly=0,$extra_headers = array())
+ {
+ $HasFile = FALSE;
+ $HasFile = (strlen($FileName)>0);
+ $OB="----=_OuterBoundary_000".md5( uniqid (rand()));
+ $boundary = "-----=".md5( uniqid (rand()));
+ $f = "\"$FromName\" <".$From.">";
+ $headers = "From: $f"."\n";
+ $headers .= "MIME-Version: 1.0"."\n";
+
+ $conn = &GetADODBConnection();
+ $time = adodb_mktime();
+
+ $sendTo = $ToName;
+
+ if (strlen($sendTo) > 0) {
+ $sendTo .= "($ToAddr)";
+ }
+ else {
+ $sendTo = $ToAddr;
+ }
+ $sendTo=addslashes($sendTo);
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', ".$conn->qstr($FromName).", ".$conn->qstr($sendTo).", ".$conn->qstr( str_replace("Subject:", "", $Subject) ).", $time, '$SendEvent')";
+ $conn->Execute($sql);
+
+ if(is_array($extra_headers))
+ {
+ foreach ($extra_headers as $h)
+ {
+ $headers .= $h."\n";
+ }
+ }
+
+ $msg .="This is a multi-part message in MIME format."."\n"."\n";
+ if($HasFile)
+ {
+ //Messages start with text/html alternatives in OB
+ $headers.="Content-Type: multipart/mixed;"."\n"."\tboundary=\"".$OB."\""."\n"."\n";
+ $msg.="--".$OB."\n";
+ $msg.="Content-Type: multipart/alternative; boundary=\"$boundary\""."\n"."\n"."\n";
+ }
+ else {
+ $headers .= "Content-Type: multipart/alternative; boundary=\"$boundary\""."\n";
+ }
+
+ $application =& kApplication::Instance();
+ $db =& $application->GetADODBConnection();
+
+ if (!$Text) {
+ $Text = strip_tags($Html);
+ }
+ else {
+ $Text = strip_tags($Text);
+ }
+
+ $msg .= "--" . $boundary . "\n";
+ $msg .= "Content-Type: text/plain; charset=\"$charset\""."\n";
+ $msg .= "Content-Transfer-Encoding: 8bit"."\n"."\n";
+ $msg .= stripslashes($Text);
+ $msg .= "\n"."\n";
+
+ if(strlen($Html)>0)
+ {
+ $msg .= "--" . $boundary . "\n";
+ $msg .= "Content-Type: text/html; charset=\"iso-8859-1\""."\n";
+ $msg .= "Content-Transfer-Encoding: 8bit"."\n"."\n";
+ $msg .= stripslashes($Html);
+ $msg .= "\n"."\n";
+ }
+ $msg .= "--" . $boundary . "--"."\n";
+ if($HasFile)
+ {
+ if(!strlen($FileLoc)) {
+ $FileLoc = $FileName;
+ }
+ $FileName = basename($FileName);
+ $msg .= "\n"."--".$OB."\n";
+ $msg.="Content-Type: application/octetstream;"."\n"."\tname=\"".$FileName."\""."\n";
+ $msg.="Content-Transfer-Encoding: base64"."\n";
+ $msg.="Content-Disposition: attachment;"."\n"."\tfilename=\"".$FileName."\""."\n"."\n";
+
+ //file goes here
+ $fd=fopen ($FileLoc, "r");
+ if($fd)
+ {
+ $FileContent=fread($fd,filesize($FileLoc));
+ fclose ($fd);
+ }
+ $FileContent=chunk_split(base64_encode($FileContent));
+ $msg .= $FileContent."\n";
+ $msg .= "--".$OB."--"."\n";
+ }
+
+ if($this->MessagesSent>$this->MessagesAtOnce || $QueueOnly==1)
+ {
+ $this->EnqueueMail($ToAddr,$From,$Subject,$msg,$headers);
+ }
+ else
+ {
+ $this->DeliverMail($ToAddr,$From,$Subject,$msg,$headers);
+ }
+ }
+
+}
+?>
Property changes on: branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.58
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Event Timeline
Log In to Comment