Reset(); $this->PluginDir = $dataDir.'/include/thirdparty/PHPMailer/'; $this->CharSet = 'utf-8'; $this->ContentType = 'text/html'; $this->SMTPDebug = 0; $mail_method = $this->Mail_Method(); switch($mail_method){ //smtp & smtpauth case 'smtpauth': $this->SMTPAuth = true; $this->Username = \gp\tool::ConfigValue('smtp_user',''); $this->Password = \gp\tool::ConfigValue('smtp_pass',''); case 'smtp'; $this->IsSMTP(); $this->Host = \gp\tool::ConfigValue('smtp_hosts',''); break; //sendmail case 'sendmail': $this->IsSendmail(); $this->Sendmail = $this->Sendmail_Path(); break; //mail default: $this->IsMail(); $this->Mailer = 'mail'; break; } } // Empty out the values that may be set function Reset(){ $this->ClearAddresses(); $this->ClearAllRecipients(); $this->ClearAttachments(); $this->ClearBCCs(); $this->ClearCCs(); $this->ClearCustomHeaders(); $this->ClearReplyTos(); $this->From = $this->From_Address(); $this->FromName = $this->From_Name(); } /** * * @param string|array $to Array or comma-separated list of email addresses to send message. * @param string $subject Email subject * @param string $message Message contents * @return bool Whether the email contents were sent successfully. */ function SendEmail($to,$subject,$message){ //function SendEmail($to,$subject,$message,$headers=array()){ global $config; // Set destination addresses foreach( (array)$to as $recipient){ $recipient = $this->SplitNameAddress($recipient); $this->AddAddress( $recipient['address'], $recipient['name'] ); } // Set mail's subject and body $this->Subject = $subject; $this->Body = $message; // Send! $result = @$this->Send(); $this->Reset(); return $result; } /** * Clean and prepare variables before calling \phpMailer::Send(); * */ function Send(){ $this->CleanAddresses( 'to' ); $this->CleanAddresses( 'cc' ); $this->CleanAddresses( 'bcc' ); $this->CleanAddresses( 'ReplyTo' ); $this->Subject = $this->CleanSubject( $this->Subject ); $this->Body = $this->CleanText( $this->Body ); $this->AltBody = $this->CleanText( $this->AltBody ); return parent::Send(); } /** * Overrides the default from address for the current email. Similar to phpmailer's AddAddress() method * @param string $address * @param string $name * @return void */ public function SetFrom($address, $name = '', $auto = 1) { $this->From = $this->CleanLine( $address ); $this->FromName = $this->CleanLine( $name ); } function SplitNameAddress($address){ $address_name = ''; if ( strpos($address, '<' ) !== false ) { $address_name = substr( $address, 0, strpos( $address, '<' ) - 1 ); $address_name = str_replace( '"', '', $address_name ); $address_name = trim( $address_name ); $address = substr( $address, strpos( $address, '<' ) + 1 ); $address = str_replace( '>', '', $address ); $address = trim( $address ); } else { $address = trim( $address ); } return array('name'=>$address_name,'address'=>$address); } function From_Address(){ global $config; if( !empty($config['from_address']) ){ return $config['from_address']; } $from = ini_get('sendmail_from'); if( !empty($sendmail_from) ){ return $from; } $server = \gp\tool::ServerName(true); if( $server === false ){ $server = 'localhost'; } $pos = strpos($server,':'); if( $pos > 0 ){ $port = substr($server,$pos+1); if( is_numeric($port) ){ $server = substr($server,0,$pos); } } return 'AutomatedSender@'.$server; } function From_Name(){ return \gp\tool::ConfigValue('from_name','Automated Sender'); } function Mail_Method(){ return \gp\tool::ConfigValue('mail_method','mail'); } function Sendmail_Path(){ //get value set in php.ini, remove arguments $default = ini_get('sendmail_path'); $pos = strpos($default,' '); if( $pos !== false ){ $default = substr($default,0,$pos); } if( empty($default) ){ $default = '/usr/sbin/sendmail'; } return \gp\tool::ConfigValue('sendmail_path',$default); } /** * Clean all addresses by removing newlines * */ function CleanAddresses($array){ $temp =& $this->$array; foreach($temp as $i => $name_addr){ $temp[$i][0] = $this->CleanLine( $temp[$i][0] ); $temp[$i][1] = $this->CleanLine( $temp[$i][1] ); } } /** * Cleans multi-line inputs. * From Joomla * @param string $value Multi-line string to be cleaned. * @return string Cleaned multi-line string. */ function CleanText($value){ return trim(preg_replace('/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i', '', $value)); } /** * Cleans single line inputs. * From Joomla * @param string $value String to be cleaned. * @return string Cleaned string. */ function CleanLine($value){ return trim(preg_replace('/(%0A|%0D|\n+|\r+)/i', '', $value)); } /** * Cleans any injected headers from the subject string. * From Joomla * @param string $subject email subject string. * @return string Cleaned email subject string. */ function CleanSubject($subject){ return preg_replace("/((From:|To:|Cc:|Bcc:|Content-type:) ([\S]+))/", "", $subject); } } } namespace{ class gp_phpmailer extends \gp\tool\Emailer{} global $gp_mailer; if( !is_object( $gp_mailer ) || !is_a( $gp_mailer, 'gp_phpmailer' ) ){ $gp_mailer = new gp_phpmailer(); } }