whoami7 - Manager
:
/
home
/
kckglobal
/
.trash
/
php
/
Upload File:
files >> /home/kckglobal/.trash/php/class.simple_mail.php
<?php /** * Simple Mail * * A simple PHP wrapper class for sending email using the mail() method. * * PHP version > 5.2 * * LICENSE: This source file is subject to the MIT license, which is * available through the world-wide-web at the following URI: * http://github.com/eoghanobrien/php-simple-mail/LICENCE.txt * * @category SimpleMail * @package SimpleMail * @author Eoghan O'Brien <eoghan@eoghanobrien.com> * @copyright 2009 - 2017 Eoghan O'Brien * @license http://github.com/eoghanobrien/php-simple-mail/LICENCE.txt MIT * @version 1.7.1 * @link http://github.com/eoghanobrien/php-simple-mail */ /** * Simple Mail class. * * @category SimpleMail * @package SimpleMail * @author Eoghan O'Brien <eoghan@eoghanobrien.com> * @copyright 2009 - 2017 Eoghan O'Brien * @license http://github.com/eoghanobrien/php-simple-mail/LICENCE.txt MIT * @version 1.7.1 * @link http://github.com/eoghanobrien/php-simple-mail */ class SimpleMail { /** * @var int $_wrap */ protected $_wrap = 78; /** * @var array $_to */ protected $_to = array(); /** * @var string $_subject */ protected $_subject; /** * @var string $_message */ protected $_message; /** * @var array $_headers */ protected $_headers = array(); /** * @var string $_parameters */ protected $_params; /** * @var array $_attachments */ protected $_attachments = array(); /** * @var string $_uid */ protected $_uid; /** * Named constructor. * * @return static */ public static function make() { return new SimpleMail(); } /** * __construct * * Resets the class properties. */ public function __construct() { $this->reset(); } /** * reset * * Resets all properties to initial state. * * @return self */ public function reset() { $this->_to = array(); $this->_headers = array(); $this->_subject = null; $this->_message = null; $this->_wrap = 78; $this->_params = null; $this->_attachments = array(); $this->_uid = $this->getUniqueId(); return $this; } /** * setTo * * @param string $email The email address to send to. * @param string $name The name of the person to send to. * * @return self */ public function setTo($email, $name) { $this->_to[] = $this->formatHeader((string) $email, (string) $name); return $this; } /** * getTo * * Return an array of formatted To addresses. * * @return array */ public function getTo() { return $this->_to; } /** * setFrom * * @param string $email The email to send as from. * @param string $name The name to send as from. * * @return self */ public function setFrom($email, $name) { $this->addMailHeader('From', (string) $email, (string) $name); return $this; } /** * setCc * * @param array $pairs An array of name => email pairs. * * @return self */ public function setCc(array $pairs) { return $this->addMailHeaders('Cc', $pairs); } /** * setBcc * * @param array $pairs An array of name => email pairs. * * @return self */ public function setBcc(array $pairs) { return $this->addMailHeaders('Bcc', $pairs); } /** * setReplyTo * * @param string $email * @param string $name * * @return self */ public function setReplyTo($email, $name = null) { return $this->addMailHeader('Reply-To', $email, $name); } /** * setHtml * * @return self */ public function setHtml() { return $this->addGenericHeader( 'Content-Type', 'text/html; charset="utf-8"' ); } /** * setSubject * * @param string $subject The email subject * * @return self */ public function setSubject($subject) { $this->_subject = $this->encodeUtf8( $this->filterOther((string) $subject) ); return $this; } /** * getSubject function. * * @return string */ public function getSubject() { return $this->_subject; } /** * setMessage * * @param string $message The message to send. * * @return self */ public function setMessage($message) { $this->_message = str_replace("\n.", "\n..", (string) $message); return $this; } /** * getMessage * * @return string */ public function getMessage() { return $this->_message; } /** * addAttachment * * @param string $path The file path to the attachment. * @param string $filename The filename of the attachment when emailed. * @param null $data * * @return self */ public function addAttachment($path, $filename = null, $data = null) { $filename = empty($filename) ? basename($path) : $filename; $filename = $this->encodeUtf8($this->filterOther((string) $filename)); $data = empty($data) ? $this->getAttachmentData($path) : $data; $this->_attachments[] = array( 'path' => $path, 'file' => $filename, 'data' => chunk_split(base64_encode($data)) ); return $this; } /** * getAttachmentData * * @param string $path The path to the attachment file. * * @return string */ public function getAttachmentData($path) { $filesize = filesize($path); $handle = fopen($path, "r"); $attachment = fread($handle, $filesize); fclose($handle); return $attachment; } /** * addMailHeader * * @param string $header The header to add. * @param string $email The email to add. * @param string $name The name to add. * * @return self */ public function addMailHeader($header, $email, $name = null) { $address = $this->formatHeader((string) $email, (string) $name); $this->_headers[] = sprintf('%s: %s', (string) $header, $address); return $this; } /** * addMailHeaders * * @param string $header The header to add. * @param array $pairs An array of name => email pairs. * * @return self */ public function addMailHeaders($header, array $pairs) { if (count($pairs) === 0) { throw new InvalidArgumentException( 'You must pass at least one name => email pair.' ); } $addresses = array(); foreach ($pairs as $name => $email) { $name = is_numeric($name) ? null : $name; $addresses[] = $this->formatHeader($email, $name); } $this->addGenericHeader($header, implode(',', $addresses)); return $this; } /** * addGenericHeader * * @param string $header The generic header to add. * @param mixed $value The value of the header. * * @return self */ public function addGenericHeader($header, $value) { $this->_headers[] = sprintf( '%s: %s', (string) $header, (string) $value ); return $this; } /** * getHeaders * * Return the headers registered so far as an array. * * @return array */ public function getHeaders() { return $this->_headers; } /** * setAdditionalParameters * * Such as "-fyouremail@yourserver.com * * @param string $additionalParameters The addition mail parameter. * * @return self */ public function setParameters($additionalParameters) { $this->_params = (string) $additionalParameters; return $this; } /** * getAdditionalParameters * * @return string */ public function getParameters() { return $this->_params; } /** * setWrap * * @param int $wrap The number of characters at which the message will wrap. * * @return self */ public function setWrap($wrap = 78) { $wrap = (int) $wrap; if ($wrap < 1) { $wrap = 78; } $this->_wrap = $wrap; return $this; } /** * getWrap * * @return int */ public function getWrap() { return $this->_wrap; } /** * hasAttachments * * Checks if the email has any registered attachments. * * @return bool */ public function hasAttachments() { return !empty($this->_attachments); } /** * assembleAttachment * * @return string */ public function assembleAttachmentHeaders() { $head = array(); $head[] = "MIME-Version: 1.0"; $head[] = "Content-Type: multipart/mixed; boundary=\"{$this->_uid}\""; return join(PHP_EOL, $head); } /** * assembleAttachmentBody * * @return string */ public function assembleAttachmentBody() { $body = array(); $body[] = "This is a multi-part message in MIME format."; $body[] = "--{$this->_uid}"; $body[] = "Content-Type: text/html; charset=\"utf-8\""; $body[] = "Content-Transfer-Encoding: quoted-printable"; $body[] = ""; $body[] = quoted_printable_encode($this->_message); $body[] = ""; $body[] = "--{$this->_uid}"; foreach ($this->_attachments as $attachment) { $body[] = $this->getAttachmentMimeTemplate($attachment); } return implode(PHP_EOL, $body) . '--'; } /** * getAttachmentMimeTemplate * * @param array $attachment An array containing 'file' and 'data' keys. * * @return string */ public function getAttachmentMimeTemplate($attachment) { $file = $attachment['file']; $data = $attachment['data']; $head = array(); $head[] = "Content-Type: application/octet-stream; name=\"{$file}\""; $head[] = "Content-Transfer-Encoding: base64"; $head[] = "Content-Disposition: attachment; filename=\"{$file}\""; $head[] = ""; $head[] = $data; $head[] = ""; $head[] = "--{$this->_uid}"; return implode(PHP_EOL, $head); } /** * send * * @return boolean * @throws \RuntimeException on no 'To: ' address to send to. */ public function send() { $to = $this->getToForSend(); $headers = $this->getHeadersForSend(); if (empty($to)) { throw new \RuntimeException( 'Unable to send, no To address has been set.' ); } if ($this->hasAttachments()) { $message = $this->assembleAttachmentBody(); $headers .= PHP_EOL . $this->assembleAttachmentHeaders(); } else { $message = $this->getWrapMessage(); } return mail($to, $this->_subject, $message, $headers, $this->_params); } /** * debug * * @return string */ public function debug() { return '<pre>' . print_r($this, true) . '</pre>'; } /** * magic __toString function * * @return string */ public function __toString() { return print_r($this, true); } /** * formatHeader * * Formats a display address for emails according to RFC2822 e.g. * Name <address@domain.tld> * * @param string $email The email address. * @param string $name The display name. * * @return string */ public function formatHeader($email, $name = null) { $email = $this->filterEmail((string) $email); if (empty($name)) { return $email; } $name = $this->encodeUtf8($this->filterName((string) $name)); return sprintf('"%s" <%s>', $name, $email); } /** * encodeUtf8 * * @param string $value The value to encode. * * @return string */ public function encodeUtf8($value) { $value = trim($value); if (preg_match('/(\s)/', $value)) { return $this->encodeUtf8Words($value); } return $this->encodeUtf8Word($value); } /** * encodeUtf8Word * * @param string $value The word to encode. * * @return string */ public function encodeUtf8Word($value) { return sprintf('=?UTF-8?B?%s?=', base64_encode($value)); } /** * encodeUtf8Words * * @param string $value The words to encode. * * @return string */ public function encodeUtf8Words($value) { $words = explode(' ', $value); $encoded = array(); foreach ($words as $word) { $encoded[] = $this->encodeUtf8Word($word); } return join($this->encodeUtf8Word(' '), $encoded); } /** * filterEmail * * Removes any carriage return, line feed, tab, double quote, comma * and angle bracket characters before sanitizing the email address. * * @param string $email The email to filter. * * @return string */ public function filterEmail($email) { $rule = array( "\r" => '', "\n" => '', "\t" => '', '"' => '', ',' => '', '<' => '', '>' => '' ); $email = strtr($email, $rule); $email = filter_var($email, FILTER_SANITIZE_EMAIL); return $email; } /** * filterName * * Removes any carriage return, line feed or tab characters. Replaces * double quotes with single quotes and angle brackets with square * brackets, before sanitizing the string and stripping out html tags. * * @param string $name The name to filter. * * @return string */ public function filterName($name) { $rule = array( "\r" => '', "\n" => '', "\t" => '', '"' => "'", '<' => '[', '>' => ']', ); $filtered = filter_var( $name, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES ); return trim(strtr($filtered, $rule)); } /** * filterOther * * Removes ASCII control characters including any carriage return, line * feed or tab characters. * * @param string $data The data to filter. * * @return string */ public function filterOther($data) { return filter_var($data, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW); } /** * getHeadersForSend * * @return string */ public function getHeadersForSend() { if (empty($this->_headers)) { return ''; } return join(PHP_EOL, $this->_headers); } /** * getToForSend * * @return string */ public function getToForSend() { if (empty($this->_to)) { return ''; } return join(', ', $this->_to); } /** * getUniqueId * * @return string */ public function getUniqueId() { return md5(uniqid(time())); } /** * getWrapMessage * * @return string */ public function getWrapMessage() { return wordwrap($this->_message, $this->_wrap); } }
Copyright ©2021 || Defacer Indonesia