%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/libs/ |
| Current File : //home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/libs/gmailer.php |
<?php
namespace GCore\Libs;
/* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access');
defined("GCORE_SITE") or die;
class GMailer{
protected $_wrap = 70;
protected $_to = NULL;
protected $_subject = NULL;
protected $_message = NULL;
protected $_headers = array();
protected $_additionalParameters = NULL;
protected $_throwExceptions = FALSE;
protected $_attachment = array();
protected $_attachmentPath = array();
protected $_attachmentFilename = array();
public function __construct($throwExceptions = FALSE){
$this->_headers = array();
$this->setThrowExceptions($throwExceptions);
}
public function setThrowExceptions($bool = FALSE){
if ( ! is_bool($bool) && $this->_throwExceptions) {
throw new InvalidArgumentException('First parameter must be boolean');
}
$this->_throwExceptions = $bool;
}
public function setTo($email, $name, $addHeader = FALSE){
if ( ! is_string($email) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_string($name) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_bool($addHeader) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_to = $this->_formatHeader($email, $name);
if ( $addHeader ) $this->addMailHeader('To', $email, $name);
return $this;
}
public function setSubject($subject){
if ( ! is_string($subject) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_subject = $this->_filterOther($subject);
return $this;
}
public function setMessage($message){
if ( ! is_string($message) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_message = str_replace("\n.", "\n..", $message);
return $this;
}
public function addAttachment($path, $filename = NULL){
$this->_attachmentPath[] = $path;
$this->_attachmentFilename[] = empty($filename) ? basename($path) : $filename;
$fileSize = filesize($path);
$handle = fopen($path, "r");
$attachment = fread($handle, $fileSize);
fclose($handle);
$this->_attachment[] = chunk_split(base64_encode($attachment));
return $this;
}
public function setFrom($email, $name){
if ( ! is_string($email) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_string($name) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->addMailHeader('From', $email, $name);
return $this;
}
public function addMailHeader($header, $email = NULL, $name = NULL){
if ( ! is_string($header) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_string($email) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_string($name) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_headers[] = "$header: " . $this->_formatHeader($email, $name);
return $this;
}
public function addGenericHeader($header, $value){
if ( ! is_string($header) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
if ( ! is_string($value) || ! is_string($value) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_headers[] = "$header: $value";
return $this;
}
public function setAdditionalParameters($additionalParameters){
if ( ! is_string($additionalParameters) && $this->_throwExceptions) {
throw new InvalidArgumentException();
}
$this->_additionalParameters = $additionalParameters;
return $this;
}
public function setWrap($wrap = 70){
if ( ! is_int($wrap) && $wrap < 1 && $this->_throwExceptions) {
throw new InvalidArgumentException('Wrap must be an integer larger than 0');
}
$this->_wrap = $wrap;
return $this;
}
public function send(){
$headers = ( !empty($this->_headers) ) ? join("\r\n", $this->_headers) : array();
if ( ! empty($this->_attachment)) {
$uid = md5(uniqid(time()));
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$headers .= "This is a multi-part message in MIME format.\r\n";
$headers .= "--".$uid."\r\n";
$headers .= "Content-type:text/html; charset=\"utf-8\"\r\n";
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$headers .= $this->_message."\r\n\r\n";
$headers .= "--".$uid."\r\n";
foreach ($this->_attachmentFilename as $key => $value) {
$headers .= "Content-Type: application/octet-stream; name=\"".$value."\"\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; filename=\"".$value."\"\r\n\r\n";
$headers .= $this->_attachment[$key]."\r\n\r\n";
$headers .= "--".$uid."\r\n";
}
$send = mail($this->_to, $this->_subject, "", $headers, $this->_additionalParameters);
}
else {
$send = mail($this->_to, $this->_subject, wordwrap($this->_message, $this->_wrap), $headers, $this->_additionalParameters);
}
if ( ! $send && $this->_throwExceptions) {
throw new Exception('Email failed to send');
}
if ( ! $send) {
return false;
}
return true;
}
protected function _formatHeader($email, $name){
$name = $this->_filterName($name);
$email = $this->_filterEmail($email);
return sprintf('%s <%s>', $name, $email);
}
protected function _filterEmail($email){
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
'"' => '',
',' => '',
'<' => '',
'>' => '',
);
$email = strtr($email, $rule);
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
return $email;
}
protected function _filterName($name){
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
'"' => "'",
'<' => '[',
'>' => ']',
);
return trim(strtr(filter_var($name, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH), $rule));
}
protected function _filterOther($data){
$rule = array("\r" => '',
"\n" => '',
"\t" => '',
);
return strtr(filter_var($data, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH), $rule);
}
}