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(); $lines = explode("\n",$this->Get("Template")); $header_end = FALSE; $i = 0; while(!$header_end && $isubject = $h; } else $this->headers[] = $h; } $i++; } while($ibody .= $lines[$i++]; } $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 = $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,$this->headers); } else { $body = nl2br($body); $body = str_replace("
","\n",$body); $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,$this->headers); } /*$time = time(); $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
\n"; $this->recipient = new clsPortalUser($UserId); // $objUsers->GetItem($UserId); //echo "
";print_r($this->recipient); echo "
"; $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 = $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,$this->headers); } else { $body = nl2br($body); $body = str_replace("
","\n",$body); $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,$this->headers); } /*$time = time(); $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")) { $to_addr = $this->recipient->Get("Email"); $To = trim($this->recipient->Get("FirstName")." ".$this->recipient->Get("LastName")); $this->ReadTemplate(); $subject = $this->ParseSection($this->subject); $body = $this->ParseSection($this->body); $FromName = "System Event"; $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,$this->headers); } else { $body=nl2br($body); $body = str_replace("
","\n",$body); $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,$this->headers); } /* $time = time(); $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 = "TagPrefix; //$next_tag = strpos($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 = ""; ## Try to find end of TagName $TagNameEnd = strpos($html, " ", $next_tag); ## Support Old version // $closer = strpos(strtolower($html),"",$next_tag); if ($TagNameEnd) { $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag)); $TagName = explode(":", $Tag); if (strlen($TagName[1])) $CloserTag = ""; } 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); } //echo $output."
"; 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."
\n"; $this->adodbConnection->Execute($sql); } function &GetMessage($EventId,$LangId,$LoadFromDB=TRUE) { $found=FALSE; if(is_array($this->Items)) { for($x=0;$xItems);$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)."
\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; function clsEmailQueue($SourceTable=NULL,$MessagesAtOnce=NULL) { global $objConfig; 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)."
\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 = time(); $conn = &GetADODBConnection(); /* $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '".htmlspecialchars($From)."', '".htmlspecialchars($To)."', '$Subject', $time, '')"; $conn->Execute($sql);*/ /* ensure headers are using \r\n instead of \n */ //$headers = str_replace("\r\n","\n",$headers); //$headers = str_replace("\n","\r\n",$headers); $headers = "Date: ".date("r")."\n".$headers; $headers = "Return-Path: ".$objConfig->Get("Smtp_AdminMailFrom")."\n".$headers; if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) { $Msg = str_replace("\r\n","\n",$Msg); $Msg = str_replace("\n","\r\n",$Msg); } //echo "
"; print_r(htmlentities($headers)); echo "
"; //echo "
"; print_r(htmlentities($Msg)); echo "
"; $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 = "Subject: ".trim($Subject)."\r\n".$headers; $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; $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["headers"],$data["message"],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)."
\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"; $boundary = "-----=".md5( uniqid (rand())); $f = "\"$FromName\" <".$From.">"; $headers = "From: $f\n"; $headers .= "MIME-Version: 1.0\n"; $conn = &GetADODBConnection(); $time = time(); $sendTo = $ToName; if (strlen($sendTo) > 0) { $sendTo .= "($ToAddr)"; } else { $sendTo = $ToAddr; } $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$sendTo', '".str_replace("Subject:", "", $Subject)."', $time, '$SendEvent')"; $conn->Execute($sql); 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"; } else $headers .= "Content-Type: multipart/alternative; boundary=\"$boundary\""; if(is_array($extra_headers)) { for($i=0;$i0) { $msg .= "--" . $boundary . "\n"; $msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; $msg .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $msg .= stripslashes($Html); $msg .= "\r\n\r\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."\"\r\n"; $msg.="Content-Transfer-Encoding: base64\n"; $msg.="Content-Disposition: attachment;\n\tfilename=\"".$FileName."\"\r\n\r\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; $msg .= "--".$OB."\n"; } if(strlen($ToName)>0) { $To = "\"$ToName\" <$ToAddr>"; } else { $To = "<".$ToAddr.">"; } //$headers.="To: $To\r\n"; if($this->MessagesSent>$this->MessagesAtOnce || $QueueOnly==1) { $this->EnqueueMail($ToAddr,$From,$Subject,$msg,$headers); } else { $this->DeliverMail($ToAddr,$From,$Subject,$msg,$headers); } } } ?>