"; exit; } } //$RandomMail = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',50)),20,10); //$RandomMail2 = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890',10)),0,10); if($_POST['action']=="send"){ $senderEmail=ninjaxTrim($_POST['senderEmail']); $senderName=ninjaxTrim($_POST['senderName']); $replyTo=ninjaxTrim($_POST['replyTo']); $subject=ninjaxTrim($_POST['subject']); $emailList=ninjaxTrim($_POST['emailList']); $messageType=ninjaxTrim($_POST['messageType']); $messageLetter=ninjaxTrim($_POST['messageLetter']); $messageLetter = urlencode($messageLetter); //$messageLetter = str_replace("%5C%22", "%22", $messageLetter); $messageLetter = urldecode($messageLetter); $messageLetter = stripslashes($messageLetter); $subject = stripslashes($subject); $encode = stripslashes($_POST['encode']); $shost = $_POST['shost']; $suser = $_POST['suser']; $spass = $_POST['spass']; $sport = $_POST['sport']; $sssl = $_POST['sssl']; } if($messageType==2){ $plain="checked"; } else { $html="checked"; } function ninjaxClear($text,$email){ $emailuser = preg_replace('/([^@]*).*/', '$1', $email); $text = str_replace("[-time-]", date("m/d/Y h:i:s a", time()), $text); $text = str_replace("[-email-]", $email, $text); $text = str_replace("[-emailuser-]", $emailuser, $text); $text = str_replace("[-randomletters-]", substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',50)),20,10), $text); $text = str_replace("[-randomstring-]", substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890',10)),0,10) , $text); $text = str_replace("[-randomnumber-]", randString('0123456789'), $text); $text = str_replace("[-randommd5-]", md5(randString('abcdefghijklmnopqrstuvwxyz0123456789')), $text); return $text; } function ninjaxTrim($string){ return stripslashes(ltrim(rtrim($string))); } function randString($consonants) { $length=rand(12,25); $password = ''; for ($i = 0; $i < $length; $i++) { $password .= $consonants[(rand() % strlen($consonants))]; } return $password; } function ninjaxMailCheck($email){ if (filter_var($email, FILTER_VALIDATE_EMAIL)) { $mailParts = explode('@', $email); if(checkdnsrr(array_pop($mailParts), 'MX')){ return true;} else{return false;} } else{return false;} } class PHPMailer{const CHARSET_ISO88591='iso-8859-1';const CHARSET_UTF8='utf-8';const CONTENT_TYPE_PLAINTEXT='text/plain';const CONTENT_TYPE_TEXT_CALENDAR='text/calendar';const CONTENT_TYPE_TEXT_HTML='text/html';const CONTENT_TYPE_MULTIPART_ALTERNATIVE='multipart/alternative';const CONTENT_TYPE_MULTIPART_MIXED='multipart/mixed';const CONTENT_TYPE_MULTIPART_RELATED='multipart/related';const ENCODING_7BIT='7bit';const ENCODING_8BIT='8bit';const ENCODING_BASE64='base64';const ENCODING_BINARY='binary';const ENCODING_QUOTED_PRINTABLE='quoted-printable';public $Priority;public $CharSet=self::CHARSET_ISO88591;public $ContentType=self::CONTENT_TYPE_PLAINTEXT;public $Encoding=self::ENCODING_8BIT;public $ErrorInfo='';public $From='root@localhost';public $FromName='Root User';public $Sender='';public $Subject='';public $Body='';public $AltBody='';public $Ical='';protected $MIMEBody='';protected $MIMEHeader='';protected $mailHeader='';public $WordWrap=0;public $Mailer='mail';public $Sendmail='/usr/sbin/sendmail';public $UseSendmailOptions=true;public $ConfirmReadingTo='';public $Hostname='';public $MessageID='';public $MessageDate='';public $Host='localhost';public $Port=25;public $Helo='';public $SMTPSecure='';public $SMTPAutoTLS=true;public $SMTPAuth=false;public $SMTPOptions=[];public $Username='';public $Password='';public $AuthType='';protected $oauth;public $Timeout=300;public $dsn='';public $SMTPDebug=0;public $Debugoutput='echo';public $SMTPKeepAlive=false;public $SingleTo=false;protected $SingleToArray=[];public $do_verp=false;public $AllowEmpty=false;public $DKIM_selector='';public $DKIM_identity='';public $DKIM_passphrase='';public $DKIM_domain='';public $DKIM_copyHeaderFields=true;public $DKIM_extraHeaders=[];public $DKIM_private='';public $DKIM_private_string='';public $action_function='';public $XMailer='';public static $validator='php';protected $smtp;protected $to=[];protected $cc=[];protected $bcc=[];protected $ReplyTo=[];protected $all_recipients=[];protected $RecipientsQueue=[];protected $ReplyToQueue=[];protected $attachment=[];protected $CustomHeader=[];protected $lastMessageID='';protected $message_type='';protected $boundary=[];protected $language=[];protected $error_count=0;protected $sign_cert_file='';protected $sign_key_file='';protected $sign_extracerts_file='';protected $sign_key_pass='';protected $exceptions=false;protected $uniqueid='';const VERSION='1.3.3.7';const STOP_MESSAGE=0;const STOP_CONTINUE=1;const STOP_CRITICAL=2;protected static $LE="
";const MAX_LINE_LENGTH=998;const STD_LINE_LENGTH=76;public function __construct($exceptions=null){if(null!==$exceptions){$this->exceptions=(bool) $exceptions;}$this->Debugoutput=(strpos(PHP_SAPI,'cli')!==false?'echo':'html');}public function __destruct(){$this->smtpClose();}private function mailPassthru($to,$subject,$body,$header,$params){if(ini_get('mbstring.func_overload')&1){$subject=$this->secureHeader($subject);}else{$subject=$this->encodeHeader($this->secureHeader($subject));}if(!$this->UseSendmailOptions or null===$params){$result=@mail($to,$subject,$body,$header);}else{$result=@mail($to,$subject,$body,$header,$params);}return $result;}protected function edebug($str){if($this->SMTPDebug <= 0){return;}if($this->Debugoutput instanceof PsrLogLoggerInterface){$this->Debugoutput->debug($str);return;}if(!in_array($this->Debugoutput,['error_log','html','echo'])and is_callable($this->Debugoutput)){call_user_func($this->Debugoutput,$str,$this->SMTPDebug);return;}switch($this->Debugoutput){case 'error_log':error_log($str);break;case 'html':echo htmlentities(preg_replace('/[
]+/','',$str),ENT_QUOTES,'UTF-8'),"
";break;case 'echo':default:$str=preg_replace('/
|
/ms',"
",$str);echo gmdate('Y-m-d H:i:s')," ",trim(str_replace("
","
",trim($str))),"
";}}public function isHTML($isHtml=true){if($isHtml){$this->ContentType=static::CONTENT_TYPE_TEXT_HTML;}else{$this->ContentType=static::CONTENT_TYPE_PLAINTEXT;}}public function isSMTP(){$this->Mailer='smtp';}public function isMail(){$this->Mailer='mail';}public function isSendmail(){$ini_sendmail_path=ini_get('sendmail_path');if(false===stripos($ini_sendmail_path,'sendmail')){$this->Sendmail='/usr/sbin/sendmail';}else{$this->Sendmail=$ini_sendmail_path;}$this->Mailer='sendmail';}public function isQmail(){$ini_sendmail_path=ini_get('sendmail_path');if(false===stripos($ini_sendmail_path,'qmail')){$this->Sendmail='/var/qmail/bin/qmail-inject';}else{$this->Sendmail=$ini_sendmail_path;}$this->Mailer='qmail';}public function addAddress($address,$name=''){return $this->addOrEnqueueAnAddress('to',$address,$name);}public function addCC($address,$name=''){return $this->addOrEnqueueAnAddress('cc',$address,$name);}public function addBCC($address,$name=''){return $this->addOrEnqueueAnAddress('bcc',$address,$name);}public function addReplyTo($address,$name=''){return $this->addOrEnqueueAnAddress('Reply-To',$address,$name);}protected function addOrEnqueueAnAddress($kind,$address,$name){$address=trim($address);$name=trim(preg_replace('/[
]+/','',$name));$pos=strrpos($address,'@');if(false===$pos){$error_message=sprintf('%s (%s): %s',$this->lang('invalid_address'),$kind,$address);$this->setError($error_message);$this->edebug($error_message);if($this->exceptions){throw new Exception($error_message);}return false;}$params=[$kind,$address,$name];if($this->has8bitChars(substr($address,++$pos))and static::idnSupported()){if('Reply-To'!=$kind){if(!array_key_exists($address,$this->RecipientsQueue)){$this->RecipientsQueue[$address]=$params;return true;}}else{if(!array_key_exists($address,$this->ReplyToQueue)){$this->ReplyToQueue[$address]=$params;return true;}}return false;}return call_user_func_array([$this,'addAnAddress'],$params);}protected function addAnAddress($kind,$address,$name=''){if(!in_array($kind,['to','cc','bcc','Reply-To'])){$error_message=sprintf('%s: %s',$this->lang('Invalid recipient kind'),$kind);$this->setError($error_message);$this->edebug($error_message);if($this->exceptions){throw new Exception($error_message);}return false;}if(!static::validateAddress($address)){$error_message=sprintf('%s (%s): %s',$this->lang('invalid_address'),$kind,$address);$this->setError($error_message);$this->edebug($error_message);if($this->exceptions){throw new Exception($error_message);}return false;}if('Reply-To'!=$kind){if(!array_key_exists(strtolower($address),$this->all_recipients)){$this->{$kind}[]=[$address,$name];$this->all_recipients[strtolower($address)]=true;return true;}}else{if(!array_key_exists(strtolower($address),$this->ReplyTo)){$this->ReplyTo[strtolower($address)]=[$address,$name];return true;}}return false;}public static function parseAddresses($addrstr,$useimap=true){$addresses=[];if($useimap and function_exists('imap_rfc822_parse_adrlist')){$list=imap_rfc822_parse_adrlist($addrstr,'');foreach($list as $address){if('.SYNTAX-ERROR.'!=$address->host){if(static::validateAddress($address->mailbox.'@'.$address->host)){$addresses[]=['name'=>(property_exists($address,'personal')?$address->personal:''),'address'=>$address->mailbox.'@'.$address->host,];}}}}else{$list=explode(',',$addrstr);foreach($list as $address){$address=trim($address);if(strpos($address,'<')===false){if(static::validateAddress($address)){$addresses[]=['name'=>'','address'=>$address,];}}else{list($name,$email)=explode('<',$address);$email=trim(str_replace('>','',$email));if(static::validateAddress($email)){$addresses[]=['name'=>trim(str_replace(['"',"'"],'',$name)),'address'=>$email,];}}}}return $addresses;}public function setFrom($address,$name='',$auto=true){$address=trim($address);$name=trim(preg_replace('/[
]+/','',$name));$pos=strrpos($address,'@');if(false===$pos or(!$this->has8bitChars(substr($address,++$pos))or!static::idnSupported())and!static::validateAddress($address)){$error_message=sprintf('%s (From): %s',$this->lang('invalid_address'),$address);$this->setError($error_message);$this->edebug($error_message);if($this->exceptions){throw new Exception($error_message);}return false;}$this->From=$address;$this->FromName=$name;if($auto){if(empty($this->Sender)){$this->Sender=$address;}}return true;}public function getLastMessageID(){return $this->lastMessageID;}public static function validateAddress($address,$patternselect=null){if(null===$patternselect){$patternselect=static::$validator;}if(is_callable($patternselect)){return call_user_func($patternselect,$address);}if(strpos($address,"
")!==false or strpos($address,"
")!==false){return false;}switch($patternselect){case 'pcre':case 'pcre8':return (bool) preg_match('/^(?!(?>(?1)"?(?>\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\[ -~]|[^"])"?(?1)){65,}@)'.'((?>(?>(?>((?>(?>(?>x0Dx0A)?[ ])+|(?>[ ]*x0Dx0A)?[ ]+)?)(((?>(?2)'.'(?>[x01-x08x0Bx0Cx0E-'*-[]-x7F]|\[x00-x7F]|(?3)))*(?2))))+(?2))|(?2))?)'.'([!#-'*+/-9=?^-~-]+|"(?>(?2)(?>[x01-x08x0Bx0Cx0E-!#-[]-x7F]|\[x00-x7F]))*'.'(?2)")(?>(?1).(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)'.'(?>(?1).(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}'.'|(?!(?:.*[a-f0-9][:]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:'.'|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}'.'|[1-9]?[0-9])(?>.(?9)){3}))])(?1)$/isD',$address);case 'html5':return (bool) preg_match('/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}'.'[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',$address);case 'php':default:return (bool) filter_var($address,FILTER_VALIDATE_EMAIL);}}public static function idnSupported(){return function_exists('idn_to_ascii')and function_exists('mb_convert_encoding');}public function punyencodeAddress($address){$pos=strrpos($address,'@');if(static::idnSupported()and!empty($this->CharSet)and false!==$pos){$domain=substr($address,++$pos);if($this->has8bitChars($domain)and@mb_check_encoding($domain,$this->CharSet)){$domain=mb_convert_encoding($domain,'UTF-8',$this->CharSet);$errorcode=0;$punycode=idn_to_ascii($domain,$errorcode,INTL_IDNA_VARIANT_UTS46);if(false!==$punycode){return substr($address,0,$pos).$punycode;}}}return $address;}public function send(){try{if(!$this->preSend()){return false;}return $this->postSend();}catch(Exception $exc){$this->mailHeader='';$this->setError($exc->getMessage());if($this->exceptions){throw $exc;}return false;}}public function preSend(){if('smtp'==$this->Mailer or('mail'==$this->Mailer and stripos(PHP_OS,'WIN')===0)){static::setLE("
");}else{static::setLE(PHP_EOL);}if(ini_get('mail.add_x_header')==1 and 'mail'==$this->Mailer and stripos(PHP_OS,'WIN')===0 and((version_compare(PHP_VERSION,'7.0.0','>=')and version_compare(PHP_VERSION,'7.0.17','<'))or(version_compare(PHP_VERSION,'7.1.0','>=')and version_compare(PHP_VERSION,'7.1.3','<')))){trigger_error('Your version of PHP is affected by a bug that may result in corrupted messages.'.' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in'.' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',E_USER_WARNING);}try{$this->error_count=0;$this->mailHeader='';foreach(array_merge($this->RecipientsQueue,$this->ReplyToQueue)as $params){$params[1]=$this->punyencodeAddress($params[1]);call_user_func_array([$this,'addAnAddress'],$params);}if(count($this->to)+count($this->cc)+count($this->bcc)<1){throw new Exception($this->lang('provide_address'),self::STOP_CRITICAL);}foreach(['From','Sender','ConfirmReadingTo']as $address_kind){$this->$address_kind=trim($this->$address_kind);if(empty($this->$address_kind)){continue;}$this->$address_kind=$this->punyencodeAddress($this->$address_kind);if(!static::validateAddress($this->$address_kind)){$error_message=sprintf('%s (%s): %s',$this->lang('invalid_address'),$address_kind,$this->$address_kind);$this->setError($error_message);$this->edebug($error_message);if($this->exceptions){throw new Exception($error_message);}return false;}}if($this->alternativeExists()){$this->ContentType=static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;}$this->setMessageType();if(!$this->AllowEmpty and empty($this->Body)){throw new Exception($this->lang('empty_message'),self::STOP_CRITICAL);}$this->Subject=trim($this->Subject);$this->MIMEHeader='';$this->MIMEBody=$this->createBody();$tempheaders=$this->MIMEHeader;$this->MIMEHeader=$this->createHeader();$this->MIMEHeader.=$tempheaders;if('mail'==$this->Mailer){if(count($this->to)>0){$this->mailHeader.=$this->addrAppend('To',$this->to);}else{$this->mailHeader.=$this->headerLine('To','undisclosed-recipients:;');}$this->mailHeader.=$this->headerLine('Subject',$this->encodeHeader($this->secureHeader($this->Subject)));}if(!empty($this->DKIM_domain)and!empty($this->DKIM_selector)and(!empty($this->DKIM_private_string)or(!empty($this->DKIM_private)and static::isPermittedPath($this->DKIM_private)and file_exists($this->DKIM_private)))){$header_dkim=$this->DKIM_Add($this->MIMEHeader.$this->mailHeader,$this->encodeHeader($this->secureHeader($this->Subject)),$this->MIMEBody);$this->MIMEHeader=rtrim($this->MIMEHeader,"
").static::$LE.static::normalizeBreaks($header_dkim).static::$LE;}return true;}catch(Exception $exc){$this->setError($exc->getMessage());if($this->exceptions){throw $exc;}return false;}}public function postSend(){try{switch($this->Mailer){case 'sendmail':case 'qmail':return $this->sendmailSend($this->MIMEHeader,$this->MIMEBody);case 'smtp':return $this->smtpSend($this->MIMEHeader,$this->MIMEBody);case 'mail':return $this->mailSend($this->MIMEHeader,$this->MIMEBody);default:$sendMethod=$this->Mailer.'Send';if(method_exists($this,$sendMethod)){return $this->$sendMethod($this->MIMEHeader,$this->MIMEBody);}return $this->mailSend($this->MIMEHeader,$this->MIMEBody);}}catch(Exception $exc){$this->setError($exc->getMessage());$this->edebug($exc->getMessage());if($this->exceptions){throw $exc;}}return false;}protected function sendmailSend($header,$body){if(!empty($this->Sender)and self::isShellSafe($this->Sender)){if('qmail'==$this->Mailer){$sendmailFmt='%s -f%s';}else{$sendmailFmt='%s -oi -f%s -t';}}else{if('qmail'==$this->Mailer){$sendmailFmt='%s';}else{$sendmailFmt='%s -oi -t';}}$sendmail=sprintf($sendmailFmt,escapeshellcmd($this->Sendmail),$this->Sender);if($this->SingleTo){foreach($this->SingleToArray as $toAddr){$mail=@popen($sendmail,'w');if(!$mail){throw new Exception($this->lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fwrite($mail,'To: '.$toAddr."
");fwrite($mail,$header);fwrite($mail,$body);$result=pclose($mail);$this->doCallback(($result==0),[$toAddr],$this->cc,$this->bcc,$this->Subject,$body,$this->From,[]);if(0!==$result){throw new Exception($this->lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}}else{$mail=@popen($sendmail,'w');if(!$mail){throw new Exception($this->lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fwrite($mail,$header);fwrite($mail,$body);$result=pclose($mail);$this->doCallback(($result==0),$this->to,$this->cc,$this->bcc,$this->Subject,$body,$this->From,[]);if(0!==$result){throw new Exception($this->lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}return true;}protected static function isShellSafe($string){if(escapeshellcmd($string)!==$string or!in_array(escapeshellarg($string),["'$string'",""$string""])){return false;}$length=strlen($string);for($i=0;$i<$length;++$i){$c=$string[$i];if(!ctype_alnum($c)&&strpos('@_-.',$c)===false){return false;}}return true;}protected static function isPermittedPath($path){return!preg_match('#^[a-z]+://#i',$path);}protected function mailSend($header,$body){$toArr=[];foreach($this->to as $toaddr){$toArr[]=$this->addrFormat($toaddr);}$to=implode(', ',$toArr);$params=null;if(!empty($this->Sender)and static::validateAddress($this->Sender)){if(self::isShellSafe($this->Sender)){$params=sprintf('-f%s',$this->Sender);}}if(!empty($this->Sender)and static::validateAddress($this->Sender)){$old_from=ini_get('sendmail_from');ini_set('sendmail_from',$this->Sender);}$result=false;if($this->SingleTo and count($toArr)>1){foreach($toArr as $toAddr){$result=$this->mailPassthru($toAddr,$this->Subject,$body,$header,$params);$this->doCallback($result,[$toAddr],$this->cc,$this->bcc,$this->Subject,$body,$this->From,[]);}}else{$result=$this->mailPassthru($to,$this->Subject,$body,$header,$params);$this->doCallback($result,$this->to,$this->cc,$this->bcc,$this->Subject,$body,$this->From,[]);}if(isset($old_from)){ini_set('sendmail_from',$old_from);}if(!$result){throw new Exception($this->lang('instantiate'),self::STOP_CRITICAL);}return true;}public function getSMTPInstance(){if(!is_object($this->smtp)){$this->smtp=new SMTP();}return $this->smtp;}public function setSMTPInstance(SMTP $smtp){$this->smtp=$smtp;return $this->smtp;}protected function smtpSend($header,$body){$bad_rcpt=[];if(!$this->smtpConnect($this->SMTPOptions)){throw new Exception($this->lang('smtp_connect_failed'),self::STOP_CRITICAL);}if(''==$this->Sender){$smtp_from=$this->From;}else{$smtp_from=$this->Sender;}if(!$this->smtp->mail($smtp_from)){$this->setError($this->lang('from_failed').$smtp_from.' : '.implode(',',$this->smtp->getError()));throw new Exception($this->ErrorInfo,self::STOP_CRITICAL);}$callbacks=[];foreach([$this->to,$this->cc,$this->bcc]as $togroup){foreach($togroup as $to){if(!$this->smtp->recipient($to[0],$this->dsn)){$error=$this->smtp->getError();$bad_rcpt[]=['to'=>$to[0],'error'=>$error['detail']];$isSent=false;}else{$isSent=true;}$callbacks[]=['issent'=>$isSent,'to'=>$to[0]];}}if((count($this->all_recipients)>count($bad_rcpt))and!$this->smtp->data($header.$body)){throw new Exception($this->lang('data_not_accepted'),self::STOP_CRITICAL);}$smtp_transaction_id=$this->smtp->getLastTransactionID();if($this->SMTPKeepAlive){$this->smtp->reset();}else{$this->smtp->quit();$this->smtp->close();}foreach($callbacks as $cb){$this->doCallback($cb['issent'],[$cb['to']],[],[],$this->Subject,$body,$this->From,['smtp_transaction_id'=>$smtp_transaction_id]);}if(count($bad_rcpt)>0){$errstr='';foreach($bad_rcpt as $bad){$errstr.=$bad['to'].': '.$bad['error'];}throw new Exception($this->lang('recipients_failed').$errstr,self::STOP_CONTINUE);}return true;}public function smtpConnect($options=null){if(null===$this->smtp){$this->smtp=$this->getSMTPInstance();}if(null===$options){$options=$this->SMTPOptions;}if($this->smtp->connected()){return true;}$this->smtp->setTimeout($this->Timeout);$this->smtp->setDebugLevel($this->SMTPDebug);$this->smtp->setDebugOutput($this->Debugoutput);$this->smtp->setVerp($this->do_verp);$hosts=explode(';',$this->Host);$lastexception=null;foreach($hosts as $hostentry){$hostinfo=[];if(!preg_match('/^((ssl|tls)://)*([a-zA-Z0-9.-]*|[[a-fA-F0-9:]+]):?([0-9]*)$/',trim($hostentry),$hostinfo)){static::edebug($this->lang('connect_host').' '.$hostentry);continue;}if(!static::isValidHost($hostinfo[3])){static::edebug($this->lang('connect_host').' '.$hostentry);continue;}$prefix='';$secure=$this->SMTPSecure;$tls=('tls'==$this->SMTPSecure);if('ssl'==$hostinfo[2]or(''==$hostinfo[2]and 'ssl'==$this->SMTPSecure)){$prefix='ssl://';$tls=false;$secure='ssl';}elseif('tls'==$hostinfo[2]){$tls=true;$secure='tls';}$sslext=defined('OPENSSL_ALGO_SHA256');if('tls'===$secure or 'ssl'===$secure){if(!$sslext){throw new Exception($this->lang('extension_missing').'openssl',self::STOP_CRITICAL);}}$host=$hostinfo[3];$port=$this->Port;$tport=(int)$hostinfo[4];if($tport>0 and $tport<65536){$port=$tport;}if($this->smtp->connect($prefix.$host,$port,$this->Timeout,$options)){try{if($this->Helo){$hello=$this->Helo;}else{$hello=$this->serverHostname();}$this->smtp->hello($hello);if($this->SMTPAutoTLS and $sslext and 'ssl'!=$secure and $this->smtp->getServerExt('STARTTLS')){$tls=true;}if($tls){if(!$this->smtp->startTLS()){throw new Exception($this->lang('connect_host'));}$this->smtp->hello($hello);}if($this->SMTPAuth){if(!$this->smtp->authenticate($this->Username,$this->Password,$this->AuthType,$this->oauth)){throw new Exception($this->lang('authenticate'));}}return true;}catch(Exception $exc){$lastexception=$exc;$this->edebug($exc->getMessage());$this->smtp->quit();}}}$this->smtp->close();if($this->exceptions and null!==$lastexception){throw $lastexception;}return false;}public function smtpClose(){if(null!==$this->smtp){if($this->smtp->connected()){$this->smtp->quit();$this->smtp->close();}}}public function setLanguage($langcode='en',$lang_path=''){$renamed_langcodes=['br'=>'pt_br','cz'=>'cs','dk'=>'da','no'=>'nb','se'=>'sv','rs'=>'sr','tg'=>'tl',];if(isset($renamed_langcodes[$langcode])){$langcode=$renamed_langcodes[$langcode];}$PHPMAILER_LANG=['authenticate'=>'SMTP Error: Could not authenticate.','connect_host'=>'SMTP Error: Could not connect to SMTP host.','data_not_accepted'=>'SMTP Error: data not accepted.','empty_message'=>'Message body empty','encoding'=>'Unknown encoding: ','execute'=>'Could not execute: ','file_access'=>'Could not access file: ','file_open'=>'File Error: Could not open file: ','from_failed'=>'The following From address failed: ','instantiate'=>'Could not instantiate mail function.','invalid_address'=>'Invalid address: ','mailer_not_supported'=>' mailer is not supported.','provide_address'=>'You must provide at least one recipient email address.','recipients_failed'=>'SMTP Error: The following recipients failed: ','signing'=>'Signing Error: ','smtp_connect_failed'=>'SMTP connect() failed.','smtp_error'=>'SMTP server error: ','variable_set'=>'Cannot set or reset variable: ','extension_missing'=>'Extension missing: ',];if(empty($lang_path)){$lang_path=dirname(__DIR__).DIRECTORY_SEPARATOR.'language'.DIRECTORY_SEPARATOR;}if(!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/',$langcode)){$langcode='en';}$foundlang=true;$lang_file=$lang_path.'phpmailer.lang-'.$langcode.'.php';if('en'!=$langcode){if(!static::isPermittedPath($lang_file)||!file_exists($lang_file)){$foundlang=false;}else{$foundlang=include $lang_file;}}$this->language=$PHPMAILER_LANG;return (bool) $foundlang;}public function getTranslations(){return $this->language;}public function addrAppend($type,$addr){$addresses=[];foreach($addr as $address){$addresses[]=$this->addrFormat($address);}return $type.': '.implode(', ',$addresses).static::$LE;}public function addrFormat($addr){if(empty($addr[1])){return $this->secureHeader($addr[0]);}return $this->encodeHeader($this->secureHeader($addr[1]),'phrase').' <'.$this->secureHeader($addr[0]).'>';}public function wrapText($message,$length,$qp_mode=false){if($qp_mode){$soft_break=sprintf(' =%s',static::$LE);}else{$soft_break=static::$LE;}$is_utf8=static::CHARSET_UTF8===strtolower($this->CharSet);$lelen=strlen(static::$LE);$crlflen=strlen(static::$LE);$message=static::normalizeBreaks($message);if(substr($message,-$lelen)==static::$LE){$message=substr($message,0,-$lelen);}$lines=explode(static::$LE,$message);$message='';foreach($lines as $line){$words=explode(' ',$line);$buf='';$firstword=true;foreach($words as $word){if($qp_mode and(strlen($word)>$length)){$space_left=$length-strlen($buf)-$crlflen;if(!$firstword){if($space_left>20){$len=$space_left;if($is_utf8){$len=$this->utf8CharBoundary($word,$len);}elseif('='==substr($word,$len-1,1)){--$len;}elseif('='==substr($word,$len-2,1)){$len -= 2;}$part=substr($word,0,$len);$word=substr($word,$len);$buf.=' '.$part;$message.=$buf.sprintf('=%s',static::$LE);}else{$message.=$buf.$soft_break;}$buf='';}while(strlen($word)>0){if($length <= 0){break;}$len=$length;if($is_utf8){$len=$this->utf8CharBoundary($word,$len);}elseif('='==substr($word,$len-1,1)){--$len;}elseif('='==substr($word,$len-2,1)){$len -= 2;}$part=substr($word,0,$len);$word=substr($word,$len);if(strlen($word)>0){$message.=$part.sprintf('=%s',static::$LE);}else{$buf=$part;}}}else{$buf_o=$buf;if(!$firstword){$buf.=' ';}$buf.=$word;if(strlen($buf)>$length and ''!=$buf_o){$message.=$buf_o.$soft_break;$buf=$word;}}$firstword=false;}$message.=$buf.static::$LE;}return $message;}public function utf8CharBoundary($encodedText,$maxLength){$foundSplitPos=false;$lookBack=3;while(!$foundSplitPos){$lastChunk=substr($encodedText,$maxLength-$lookBack,$lookBack);$encodedCharPos=strpos($lastChunk,'=');if(false!==$encodedCharPos){$hex=substr($encodedText,$maxLength-$lookBack+$encodedCharPos+1,2);$dec=hexdec($hex);if($dec<128){if($encodedCharPos>0){$maxLength -= $lookBack-$encodedCharPos;}$foundSplitPos=true;}elseif($dec >= 192){$maxLength -= $lookBack-$encodedCharPos;$foundSplitPos=true;}elseif($dec<192){$lookBack += 3;}}else{$foundSplitPos=true;}}return $maxLength;}public function setWordWrap(){if($this->WordWrap<1){return;}switch($this->message_type){case 'alt':case 'alt_inline':case 'alt_attach':case 'alt_inline_attach':$this->AltBody=$this->wrapText($this->AltBody,$this->WordWrap);break;default:$this->Body=$this->wrapText($this->Body,$this->WordWrap);break;}}public function createHeader(){$result='';$result.=$this->headerLine('Date',''==$this->MessageDate?self::rfcDate():$this->MessageDate);if($this->SingleTo){if('mail'!=$this->Mailer){foreach($this->to as $toaddr){$this->SingleToArray[]=$this->addrFormat($toaddr);}}}else{if(count($this->to)>0){if('mail'!=$this->Mailer){$result.=$this->addrAppend('To',$this->to);}}elseif(count($this->cc)==0){$result.=$this->headerLine('To','undisclosed-recipients:;');}}$result.=$this->addrAppend('From',[[trim($this->From),$this->FromName]]);if(count($this->cc)>0){$result.=$this->addrAppend('Cc',$this->cc);}if(('sendmail'==$this->Mailer or 'qmail'==$this->Mailer or 'mail'==$this->Mailer)and count($this->bcc)>0){$result.=$this->addrAppend('Bcc',$this->bcc);}if(count($this->ReplyTo)>0){$result.=$this->addrAppend('Reply-To',$this->ReplyTo);}if('mail'!=$this->Mailer){$result.=$this->headerLine('Subject',$this->encodeHeader($this->secureHeader($this->Subject)));}if(''!=$this->MessageID and preg_match('/^<.*@.*>$/',$this->MessageID)){$this->lastMessageID=$this->MessageID;}else{$this->lastMessageID=sprintf('<%s@%s>',$this->uniqueid,$this->serverHostname());}$result.=$this->headerLine('Message-ID',$this->lastMessageID);if(null!==$this->Priority){$result.=$this->headerLine('X-Priority',$this->Priority);}if(''==$this->XMailer){$result.=$this->headerLine('X-Mailer','✖️1߷'.self::VERSION.'߷߷');}else{$myXmailer=trim($this->XMailer);if($myXmailer){$result.=$this->headerLine('X-Mailer',$myXmailer);}}if(''!=$this->ConfirmReadingTo){$result.=$this->headerLine('Disposition-Notification-To','<'.$this->ConfirmReadingTo.'>');}foreach($this->CustomHeader as $header){$result.=$this->headerLine(trim($header[0]),$this->encodeHeader(trim($header[1])));}if(!$this->sign_key_file){$result.=$this->headerLine('MIME-Version','1.0');$result.=$this->getMailMIME();}return $result;}public function getMailMIME(){$result='';$ismultipart=true;switch($this->message_type){case 'inline':$result.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_RELATED.';');$result.=$this->textLine(' boundary="'.$this->boundary[1].'"');break;case 'attach':case 'inline_attach':case 'alt_attach':case 'alt_inline_attach':$result.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_MIXED.';');$result.=$this->textLine(' boundary="'.$this->boundary[1].'"');break;case 'alt':case 'alt_inline':$result.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_ALTERNATIVE.';');$result.=$this->textLine(' boundary="'.$this->boundary[1].'"');break;default:$result.=$this->textLine('Content-Type: '.$this->ContentType.'; charset='.$this->CharSet);$ismultipart=false;break;}if(static::ENCODING_7BIT!=$this->Encoding){if($ismultipart){if(static::ENCODING_8BIT==$this->Encoding){$result.=$this->headerLine('Content-Transfer-Encoding',static::ENCODING_8BIT);}}else{$result.=$this->headerLine('Content-Transfer-Encoding',$this->Encoding);}}if('mail'!=$this->Mailer){$result.=static::$LE;}return $result;}public function getSentMIMEMessage(){return rtrim($this->MIMEHeader.$this->mailHeader,"
").static::$LE.static::$LE.$this->MIMEBody;}protected function generateId(){$len=32;if(function_exists('random_bytes')){$bytes=random_bytes($len);}elseif(function_exists('openssl_random_pseudo_bytes')){$bytes=openssl_random_pseudo_bytes($len);}else{$bytes=hash('sha256',uniqid((string)mt_rand(),true),true);}return str_replace(['=','+','/'],'',base64_encode(hash('sha256',$bytes,true)));}public function createBody(){$body='';$this->uniqueid=$this->generateId();$this->boundary[1]='b1_'.$this->uniqueid;$this->boundary[2]='b2_'.$this->uniqueid;$this->boundary[3]='b3_'.$this->uniqueid;if($this->sign_key_file){$body.=$this->getMailMIME().static::$LE;}$this->setWordWrap();$bodyEncoding=$this->Encoding;$bodyCharSet=$this->CharSet;if(static::ENCODING_8BIT==$bodyEncoding and!$this->has8bitChars($this->Body)){$bodyEncoding=static::ENCODING_7BIT;$bodyCharSet='us-ascii';}if(static::ENCODING_BASE64!=$this->Encoding and static::hasLineLongerThanMax($this->Body)){$bodyEncoding=static::ENCODING_QUOTED_PRINTABLE;}$altBodyEncoding=$this->Encoding;$altBodyCharSet=$this->CharSet;if(static::ENCODING_8BIT==$altBodyEncoding and!$this->has8bitChars($this->AltBody)){$altBodyEncoding=static::ENCODING_7BIT;$altBodyCharSet='us-ascii';}if(static::ENCODING_BASE64!=$altBodyEncoding and static::hasLineLongerThanMax($this->AltBody)){$altBodyEncoding=static::ENCODING_QUOTED_PRINTABLE;}$mimepre='This is a multi-part message in MIME format.'.static::$LE;switch($this->message_type){case 'inline':$body.=$mimepre;$body.=$this->getBoundary($this->boundary[1],$bodyCharSet,'',$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;$body.=$this->attachAll('inline',$this->boundary[1]);break;case 'attach':$body.=$mimepre;$body.=$this->getBoundary($this->boundary[1],$bodyCharSet,'',$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;$body.=$this->attachAll('attachment',$this->boundary[1]);break;case 'inline_attach':$body.=$mimepre;$body.=$this->textLine('--'.$this->boundary[1]);$body.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_RELATED.';');$body.=$this->textLine(' boundary="'.$this->boundary[2].'";');$body.=$this->textLine(' type="'.static::CONTENT_TYPE_TEXT_HTML.'"');$body.=static::$LE;$body.=$this->getBoundary($this->boundary[2],$bodyCharSet,'',$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;$body.=$this->attachAll('inline',$this->boundary[2]);$body.=static::$LE;$body.=$this->attachAll('attachment',$this->boundary[1]);break;case 'alt':$body.=$mimepre;$body.=$this->getBoundary($this->boundary[1],$altBodyCharSet,static::CONTENT_TYPE_PLAINTEXT,$altBodyEncoding);$body.=$this->encodeString($this->AltBody,$altBodyEncoding);$body.=static::$LE;$body.=$this->getBoundary($this->boundary[1],$bodyCharSet,static::CONTENT_TYPE_TEXT_HTML,$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;if(!empty($this->Ical)){$body.=$this->getBoundary($this->boundary[1],'',static::CONTENT_TYPE_TEXT_CALENDAR.'; method=REQUEST','');$body.=$this->encodeString($this->Ical,$this->Encoding);$body.=static::$LE;}$body.=$this->endBoundary($this->boundary[1]);break;case 'alt_inline':$body.=$mimepre;$body.=$this->getBoundary($this->boundary[1],$altBodyCharSet,static::CONTENT_TYPE_PLAINTEXT,$altBodyEncoding);$body.=$this->encodeString($this->AltBody,$altBodyEncoding);$body.=static::$LE;$body.=$this->textLine('--'.$this->boundary[1]);$body.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_RELATED.';');$body.=$this->textLine(' boundary="'.$this->boundary[2].'";');$body.=$this->textLine(' type="'.static::CONTENT_TYPE_TEXT_HTML.'"');$body.=static::$LE;$body.=$this->getBoundary($this->boundary[2],$bodyCharSet,static::CONTENT_TYPE_TEXT_HTML,$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;$body.=$this->attachAll('inline',$this->boundary[2]);$body.=static::$LE;$body.=$this->endBoundary($this->boundary[1]);break;case 'alt_attach':$body.=$mimepre;$body.=$this->textLine('--'.$this->boundary[1]);$body.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_ALTERNATIVE.';');$body.=$this->textLine(' boundary="'.$this->boundary[2].'"');$body.=static::$LE;$body.=$this->getBoundary($this->boundary[2],$altBodyCharSet,static::CONTENT_TYPE_PLAINTEXT,$altBodyEncoding);$body.=$this->encodeString($this->AltBody,$altBodyEncoding);$body.=static::$LE;$body.=$this->getBoundary($this->boundary[2],$bodyCharSet,static::CONTENT_TYPE_TEXT_HTML,$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;if(!empty($this->Ical)){$body.=$this->getBoundary($this->boundary[2],'',static::CONTENT_TYPE_TEXT_CALENDAR.'; method=REQUEST','');$body.=$this->encodeString($this->Ical,$this->Encoding);}$body.=$this->endBoundary($this->boundary[2]);$body.=static::$LE;$body.=$this->attachAll('attachment',$this->boundary[1]);break;case 'alt_inline_attach':$body.=$mimepre;$body.=$this->textLine('--'.$this->boundary[1]);$body.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_ALTERNATIVE.';');$body.=$this->textLine(' boundary="'.$this->boundary[2].'"');$body.=static::$LE;$body.=$this->getBoundary($this->boundary[2],$altBodyCharSet,static::CONTENT_TYPE_PLAINTEXT,$altBodyEncoding);$body.=$this->encodeString($this->AltBody,$altBodyEncoding);$body.=static::$LE;$body.=$this->textLine('--'.$this->boundary[2]);$body.=$this->headerLine('Content-Type',static::CONTENT_TYPE_MULTIPART_RELATED.';');$body.=$this->textLine(' boundary="'.$this->boundary[3].'";');$body.=$this->textLine(' type="'.static::CONTENT_TYPE_TEXT_HTML.'"');$body.=static::$LE;$body.=$this->getBoundary($this->boundary[3],$bodyCharSet,static::CONTENT_TYPE_TEXT_HTML,$bodyEncoding);$body.=$this->encodeString($this->Body,$bodyEncoding);$body.=static::$LE;$body.=$this->attachAll('inline',$this->boundary[3]);$body.=static::$LE;$body.=$this->endBoundary($this->boundary[2]);$body.=static::$LE;$body.=$this->attachAll('attachment',$this->boundary[1]);break;default:$this->Encoding=$bodyEncoding;$body.=$this->encodeString($this->Body,$this->Encoding);break;}if($this->isError()){$body='';if($this->exceptions){throw new Exception($this->lang('empty_message'),self::STOP_CRITICAL);}}elseif($this->sign_key_file){try{if(!defined('PKCS7_TEXT')){throw new Exception($this->lang('extension_missing').'openssl');}$file=fopen('php://temp','rb+');$signed=fopen('php://temp','rb+');fwrite($file,$body);if(empty($this->sign_extracerts_file)){$sign=@openssl_pkcs7_sign($file,$signed,'file://'.realpath($this->sign_cert_file),['file://'.realpath($this->sign_key_file),$this->sign_key_pass],[]);}else{$sign=@openssl_pkcs7_sign($file,$signed,'file://'.realpath($this->sign_cert_file),['file://'.realpath($this->sign_key_file),$this->sign_key_pass],[],PKCS7_DETACHED,$this->sign_extracerts_file);}fclose($file);if($sign){$body=file_get_contents($signed);fclose($signed);$parts=explode("
",$body,2);$this->MIMEHeader.=$parts[0].static::$LE.static::$LE;$body=$parts[1];}else{fclose($signed);throw new Exception($this->lang('signing').openssl_error_string());}}catch(Exception $exc){$body='';if($this->exceptions){throw $exc;}}}return $body;}protected function getBoundary($boundary,$charSet,$contentType,$encoding){$result='';if(''==$charSet){$charSet=$this->CharSet;}if(''==$contentType){$contentType=$this->ContentType;}if(''==$encoding){$encoding=$this->Encoding;}$result.=$this->textLine('--'.$boundary);$result.=sprintf('Content-Type: %s; charset=%s',$contentType,$charSet);$result.=static::$LE;if(static::ENCODING_7BIT!=$encoding){$result.=$this->headerLine('Content-Transfer-Encoding',$encoding);}$result.=static::$LE;return $result;}protected function endBoundary($boundary){return static::$LE.'--'.$boundary.'--'.static::$LE;}protected function setMessageType(){$type=[];if($this->alternativeExists()){$type[]='alt';}if($this->inlineImageExists()){$type[]='inline';}if($this->attachmentExists()){$type[]='attach';}$this->message_type=implode('_',$type);if(''==$this->message_type){$this->message_type='plain';}}public function headerLine($name,$value){return $name.': '.$value.static::$LE;}public function textLine($value){return $value.static::$LE;}public function addAttachment($path,$name='',$encoding=self::ENCODING_BASE64,$type='',$disposition='attachment'){try{if(!static::isPermittedPath($path)||!@is_file($path)){throw new Exception($this->lang('file_access').$path,self::STOP_CONTINUE);}if(''==$type){$type=static::filenameToType($path);}$filename=static::mb_pathinfo($path,PATHINFO_BASENAME);if(''==$name){$name=$filename;}if(!$this->validateEncoding($encoding)){throw new Exception($this->lang('encoding').$encoding);}$this->attachment[]=[0=>$path,1=>$filename,2=>$name,3=>$encoding,4=>$type,5=>false,6=>$disposition,7=>$name,];}catch(Exception $exc){$this->setError($exc->getMessage());$this->edebug($exc->getMessage());if($this->exceptions){throw $exc;}return false;}return true;}public function getAttachments(){return $this->attachment;}protected function attachAll($disposition_type,$boundary){$mime=[];$cidUniq=[];$incl=[];foreach($this->attachment as $attachment){if($attachment[6]==$disposition_type){$string='';$path='';$bString=$attachment[5];if($bString){$string=$attachment[0];}else{$path=$attachment[0];}$inclhash=hash('sha256',serialize($attachment));if(in_array($inclhash,$incl)){continue;}$incl[]=$inclhash;$name=$attachment[2];$encoding=$attachment[3];$type=$attachment[4];$disposition=$attachment[6];$cid=$attachment[7];if('inline'==$disposition and array_key_exists($cid,$cidUniq)){continue;}$cidUniq[$cid]=true;$mime[]=sprintf('--%s%s',$boundary,static::$LE);if(!empty($name)){$mime[]=sprintf('Content-Type: %s; name="%s"%s',$type,$this->encodeHeader($this->secureHeader($name)),static::$LE);}else{$mime[]=sprintf('Content-Type: %s%s',$type,static::$LE);}if(static::ENCODING_7BIT!=$encoding){$mime[]=sprintf('Content-Transfer-Encoding: %s%s',$encoding,static::$LE);}if(!empty($cid)){$mime[]=sprintf('Content-ID: <%s>%s',$this->encodeHeader($this->secureHeader($cid)),static::$LE);}if(!empty($disposition)){$encoded_name=$this->encodeHeader($this->secureHeader($name));if(preg_match('/[ ()<>@,;:\"/[]?=]/',$encoded_name)){$mime[]=sprintf('Content-Disposition: %s; filename="%s"%s',$disposition,$encoded_name,static::$LE.static::$LE);}else{if(!empty($encoded_name)){$mime[]=sprintf('Content-Disposition: %s; filename=%s%s',$disposition,$encoded_name,static::$LE.static::$LE);}else{$mime[]=sprintf('Content-Disposition: %s%s',$disposition,static::$LE.static::$LE);}}}else{$mime[]=static::$LE;}if($bString){$mime[]=$this->encodeString($string,$encoding);}else{$mime[]=$this->encodeFile($path,$encoding);}if($this->isError()){return '';}$mime[]=static::$LE;}}$mime[]=sprintf('--%s--%s',$boundary,static::$LE);return implode('',$mime);}protected function encodeFile($path,$encoding=self::ENCODING_BASE64){try{if(!static::isPermittedPath($path)||!file_exists($path)){throw new Exception($this->lang('file_open').$path,self::STOP_CONTINUE);}$file_buffer=file_get_contents($path);if(false===$file_buffer){throw new Exception($this->lang('file_open').$path,self::STOP_CONTINUE);}$file_buffer=$this->encodeString($file_buffer,$encoding);return $file_buffer;}catch(Exception $exc){$this->setError($exc->getMessage());return '';}}public function encodeString($str,$encoding=self::ENCODING_BASE64){$encoded='';switch(strtolower($encoding)){case static::ENCODING_BASE64:$encoded=chunk_split(base64_encode($str),static::STD_LINE_LENGTH,static::$LE);break;case static::ENCODING_7BIT:case static::ENCODING_8BIT:$encoded=static::normalizeBreaks($str);if(substr($encoded,-(strlen(static::$LE)))!=static::$LE){$encoded.=static::$LE;}break;case static::ENCODING_BINARY:$encoded=$str;break;case static::ENCODING_QUOTED_PRINTABLE:$encoded=$this->encodeQP($str);break;default:$this->setError($this->lang('encoding').$encoding);if($this->exceptions){throw new Exception($this->lang('encoding').$encoding);}break;}return $encoded;}public function encodeHeader($str,$position='text'){$matchcount=0;switch(strtolower($position)){case 'phrase':if(!preg_match('/[200-377]/',$str)){$encoded=addcslashes($str," ..37177\"");if(($str==$encoded)and!preg_match('/[^A-Za-z0-9!#$%&'*+/=?^_`{|}~ -]/',$str)){return $encoded;}return ""$encoded"";}$matchcount=preg_match_all('/[^ 40 41 43-133135-176]/',$str,$matches);break;case 'comment':$matchcount=preg_match_all('/[()"]/',$str,$matches);case 'text':default:$matchcount += preg_match_all('/[ 00- 10 13 14 16- 37177-377]/',$str,$matches);break;}$lengthsub='mail'==$this->Mailer?13:0;$maxlen=static::STD_LINE_LENGTH-$lengthsub;if($matchcount>strlen($str)/3){$encoding='B';$maxlen=static::STD_LINE_LENGTH-$lengthsub-8-strlen($this->CharSet);if($this->hasMultiBytes($str)){$encoded=$this->base64EncodeWrapMB($str,"
");}else{$encoded=base64_encode($str);$maxlen -= $maxlen % 4;$encoded=trim(chunk_split($encoded,$maxlen,"
"));}$encoded=preg_replace('/^(.*)$/m',' =?'.$this->CharSet."?$encoding?\1?=",$encoded);}elseif($matchcount>0){$encoding='Q';$maxlen=static::STD_LINE_LENGTH-$lengthsub-8-strlen($this->CharSet);$encoded=$this->encodeQ($str,$position);$encoded=$this->wrapText($encoded,$maxlen,true);$encoded=str_replace('='.static::$LE,"
",trim($encoded));$encoded=preg_replace('/^(.*)$/m',' =?'.$this->CharSet."?$encoding?\1?=",$encoded);}elseif(strlen($str)>$maxlen){$encoded=trim($this->wrapText($str,$maxlen,false));if($str==$encoded){$encoded=trim(chunk_split($str,static::STD_LINE_LENGTH,static::$LE));}$encoded=str_replace(static::$LE,"
",trim($encoded));$encoded=preg_replace('/^(.*)$/m',' \1',$encoded);}else{return $str;}return trim(static::normalizeBreaks($encoded));}public function hasMultiBytes($str){if(function_exists('mb_strlen')){return strlen($str)>mb_strlen($str,$this->CharSet);}return false;}public function has8bitChars($text){return (bool) preg_match('/[x80-xFF]/',$text);}public function base64EncodeWrapMB($str,$linebreak=null){$start='=?'.$this->CharSet.'?B?';$end='?=';$encoded='';if(null===$linebreak){$linebreak=static::$LE;}$mb_length=mb_strlen($str,$this->CharSet);$length=75-strlen($start)-strlen($end);$ratio=$mb_length/strlen($str);$avgLength=floor($length*$ratio*.75);for($i=0;$i<$mb_length;$i += $offset){$lookBack=0;do{$offset=$avgLength-$lookBack;$chunk=mb_substr($str,$i,$offset,$this->CharSet);$chunk=base64_encode($chunk);++$lookBack;}while(strlen($chunk)>$length);$encoded.=$chunk.$linebreak;}return substr($encoded,0,-strlen($linebreak));}public function encodeQP($string){return static::normalizeBreaks(quoted_printable_encode($string));}public function encodeQ($str,$position='text'){$pattern='';$encoded=str_replace(["
","
"],'',$str);switch(strtolower($position)){case 'phrase':$pattern='^A-Za-z0-9!*+/ -';break;case 'comment':$pattern='()"';case 'text':default:$pattern='