mirror of
https://github.com/gtbu/Typesetter-5.3-p8.git
synced 2024-11-25 07:39:13 +01:00
262 lines
5.8 KiB
PHP
262 lines
5.8 KiB
PHP
<?php
|
|
|
|
namespace gp\tool{
|
|
|
|
defined('is_running') or die('Not an entry point...');
|
|
|
|
includeFile('thirdparty/PHPMailer/PHPMailerAutoload.php');
|
|
|
|
|
|
/**
|
|
* An extension of phpmailer
|
|
*
|
|
* @since 1.7
|
|
*
|
|
*/
|
|
class Emailer extends \PHPMailer{
|
|
|
|
function __construct(){
|
|
global $dataDir,$config;
|
|
|
|
parent::__construct();
|
|
|
|
$this->Reset();
|
|
$this->PluginDir = $dataDir.'/include/thirdparty/PHPMailer/';
|
|
$this->CharSet = 'utf-8';
|
|
$this->ContentType = 'text/html';
|
|
|
|
$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();
|
|
}
|
|
}
|
|
|
|
|