mirror of
				https://github.com/gtbu/Typesetter-5.3-p8.git
				synced 2025-11-04 14:58:28 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			263 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace gp\tool{
 | 
						|
	defined('is_running') or die('Not an entry point...');
 | 
						|
    includeFile('thirdparty/PHPMailer/PHPMailerAutoload.php');
 | 
						|
    includeFile('thirdparty/PHPMailer/PHPMailer.php');
 | 
						|
	includeFile('thirdparty/PHPMailer/SMTP.php');
 | 
						|
	includeFile('thirdparty/PHPMailer/Exception.php'); 
 | 
						|
	use PHPMailer\PHPMailer\PHPMailer;
 | 
						|
    use PHPMailer\PHPMailer\Exception;
 | 
						|
	use PHPMailer\PHPMailer\SMTP;
 | 
						|
	/**
 | 
						|
	 * An extension of phpmailer
 | 
						|
	 * $obj = new namespace\Another; // instantiates object of class foo\Another
 | 
						|
	 * @since 1.7
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
#[\AllowDynamicProperties]		
 | 
						|
	class Emailer extends \PHPMailer\PHPMailer\PHPMailer{
 | 
						|
 | 
						|
		function __construct(){
 | 
						|
			global $dataDir,$config;
 | 
						|
 | 
						|
			parent::__construct();
 | 
						|
 | 
						|
			$this->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();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 |