From b4a7ab3ba7624094266a8dee278a68ea679b8f8f Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Thu, 24 Apr 2014 23:31:48 +0200 Subject: [PATCH] issue #55: adding xhr functionality to controllers --- .gitignore | 1 + Makefile | 5 + README.rst | 6 + composer.json | 10 + composer.lock | 133 + composer.phar | Bin 0 -> 960311 bytes docs/install.rst | 9 + src/bootstrap.php | 26 +- src/includes/functions.inc.php | 6 +- src/psm/Module/AbstractController.class.php | 141 +- src/psm/Router.class.php | 9 +- src/psm/Util/Mailer.class.php | 55 - static/js/scripts.js | 18 + vendor/PHPMailer/class.phpmailer.php | 2949 ------------------- vendor/PHPMailer/class.smtp.php | 1092 ------- 15 files changed, 295 insertions(+), 4165 deletions(-) create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 composer.phar delete mode 100644 src/psm/Util/Mailer.class.php delete mode 100644 vendor/PHPMailer/class.phpmailer.php delete mode 100644 vendor/PHPMailer/class.smtp.php diff --git a/.gitignore b/.gitignore index 838a0a8a..4404b7d9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /config.php /build /docs/_build +/vendor/ diff --git a/Makefile b/Makefile index e54754a6..64bc1ed7 100755 --- a/Makefile +++ b/Makefile @@ -12,6 +12,11 @@ export: @echo 'Testing on syntax errors (thats all the automated testing your are going to get for now..) ' find ./build/phpservermon -name "*.php" | xargs -I file php -l file find ./build/phpservermon -name "*.php" -exec sed -i "" "s/@package_version@/$(tag)/" {} \; + @echo 'Downloading dependencies' + cd ./build/phpservermon; php composer.phar install; cd ../../; + rm -f ./build/phpservermon/composer.phar + rm -f ./build/phpservermon/composer.json + rm -f ./build/phpservermon/composer.lock @echo 'Building HTML documentation' cd ./build/phpservermon/docs; make BUILDDIR=. html; cd ../../../; @echo 'Cleaning up docs dir' diff --git a/README.rst b/README.rst index 58d058c6..ede3ac83 100755 --- a/README.rst +++ b/README.rst @@ -70,6 +70,12 @@ Install Please see docs/install.rst. In a nutshell: unzip, upload, run install.php, enjoy. +If you have downloaded the source from GitHub (and not a pre-built package), the dependencies are not included. +To be able to run an installation from the repo, you need to run the following command to install the dependencies:: + + php composer.phar install + + Documentation ------------- diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..35e8e53d --- /dev/null +++ b/composer.json @@ -0,0 +1,10 @@ +{ + "name": "phpservermon/phpservermon", + "description": "PHP Server Monitor", + "homepage": "http://www.phpservermonitor.org", + "require": { + "php": ">=5.3.7", + "phpmailer/phpmailer": "5.2.6", + "symfony/http-foundation": "2.4.*" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..e34ceb9a --- /dev/null +++ b/composer.lock @@ -0,0 +1,133 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" + ], + "hash": "63c9618391ed04b38b098c0139b50570", + "packages": [ + { + "name": "phpmailer/phpmailer", + "version": "v5.2.6", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "4d9434e394496a5bb7acd9e73046587184b413df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/4d9434e394496a5bb7acd9e73046587184b413df", + "reference": "4d9434e394496a5bb7acd9e73046587184b413df", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpdocumentor/phpdocumentor": "*", + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "class.phpmailer.php", + "class.pop3.php", + "class.smtp.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "time": "2013-04-11 16:45:39" + }, + { + "name": "symfony/http-foundation", + "version": "v2.4.3", + "target-dir": "Symfony/Component/HttpFoundation", + "source": { + "type": "git", + "url": "https://github.com/symfony/HttpFoundation.git", + "reference": "11ad7352c7bfa12145a0df8e1c4c303c585ce169" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/11ad7352c7bfa12145a0df8e1c4c303c585ce169", + "reference": "11ad7352c7bfa12145a0df8e1c4c303c585ce169", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/expression-language": "~2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Symfony/Component/HttpFoundation/Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "http://symfony.com", + "time": "2014-03-26 11:35:33" + } + ], + "packages-dev": [ + + ], + "aliases": [ + + ], + "minimum-stability": "stable", + "stability-flags": [ + + ], + "platform": { + "php": ">=5.3.7" + }, + "platform-dev": [ + + ] +} diff --git a/composer.phar b/composer.phar new file mode 100644 index 0000000000000000000000000000000000000000..1e9ca731cdc54c4d739ea83f24603ba9368bd578 GIT binary patch literal 960311 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

G{P!1kAgyS>NLr3vlt6|Bk-+JaY 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 literal 0 HcmV?d00001 diff --git a/docs/install.rst b/docs/install.rst index 930468e4..3ae4d74f 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -64,6 +64,15 @@ One of the new features introduced in 3.0 is a user authentication system. Becau For that reason the upgrade script will ask you to create a new account during the upgrade, which you can then use to change the password for the existing accounts. If, for whatever reason this does not work, the upgrade script automatically changes the username of all existing users to their email addresses, which you could use for the forgot password screen. + +Installing from GitHub +++++++++++++++++++++++ +If you have downloaded the source from GitHub (and not a pre-built package), the dependencies are not included. +To be able to run an installation from the repo, you need to run the following command to install the dependencies:: + + php composer.phar install + + Setting up a cronjob ++++++++++++++++++++ diff --git a/src/bootstrap.php b/src/bootstrap.php index 2d338091..ee81a02f 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -28,7 +28,6 @@ // Include paths define('PSM_PATH_SRC', dirname(__FILE__) . DIRECTORY_SEPARATOR); -define('PSM_PATH_VENDOR', PSM_PATH_SRC . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR); define('PSM_PATH_INC', PSM_PATH_SRC . 'includes' . DIRECTORY_SEPARATOR); define('PSM_PATH_TPL', PSM_PATH_SRC . 'templates' . DIRECTORY_SEPARATOR); define('PSM_PATH_LANG', PSM_PATH_SRC . 'lang' . DIRECTORY_SEPARATOR); @@ -56,29 +55,28 @@ if(defined('PSM_DEBUG') && PSM_DEBUG) { ini_set('display_errors', 0); } +$vendor_autoload = PSM_PATH_SRC . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; +if(!file_exists($vendor_autoload)) { + die('No dependencies found in vendor dir. Did you install the dependencies? Please run "php composer.phar install".'); +} +require_once $vendor_autoload; + // set autoloader, make sure to set $prepend = true so that our autoloader is called first -function __autoload($class) { +spl_autoload_register(function($class) { // remove leading \ $class = ltrim($class, '\\'); $path_parts = explode('\\', $class); $filename = array_pop($path_parts); - $path = implode(DIRECTORY_SEPARATOR, $path_parts) . + $path = PSM_PATH_SRC . implode(DIRECTORY_SEPARATOR, $path_parts) . DIRECTORY_SEPARATOR . $filename . '.class.php' ; - // search in these dirs: - $basedirs = array( - PSM_PATH_SRC, - PSM_PATH_VENDOR - ); - foreach($basedirs as $dir) { - if(file_exists($dir . $path)) { - require_once $dir . $path; - return; - } + if(file_exists($path)) { + require_once $path; + return; } -} +}); // auto-find all include files $includes = glob(PSM_PATH_INC . '*.inc.php'); diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 8c98168b..4b8260ed 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -373,15 +373,15 @@ function psm_update_available() { } /** - * Prepare a new Mailer util. + * Prepare a new phpmailer instance. * * If the from name and email are left blank they will be prefilled from the config. * @param string $from_name * @param string $from_email - * @return \psm\Util\Mailer + * @return \PHPMailer */ function psm_build_mail($from_name = null, $from_email = null) { - $phpmailer = new \psm\Util\Mailer(); + $phpmailer = new \PHPMailer(); $phpmailer->Encoding = "base64"; $phpmailer->SMTPDebug = false; diff --git a/src/psm/Module/AbstractController.class.php b/src/psm/Module/AbstractController.class.php index 57253363..92bde95a 100644 --- a/src/psm/Module/AbstractController.class.php +++ b/src/psm/Module/AbstractController.class.php @@ -28,6 +28,7 @@ namespace psm\Module; use psm\Service\Database; use psm\Service\Template; +use Symfony\Component\HttpFoundation\Response; abstract class AbstractController implements ControllerInterface { @@ -124,22 +125,37 @@ abstract class AbstractController implements ControllerInterface { */ protected $user_level_required_actions = array(); + /** + * XHR mode? + * @var boolean $xhr + * @see isXHR() + */ + protected $xhr = false; + function __construct(Database $db, Template $tpl) { $this->db = $db; $this->tpl = $tpl; } /** - * Initialize the module + * Initialize the controller. + * + * @return \Symfony\Component\HttpFoundation\Response */ public function initialize() { $action = psm_GET('action', psm_POST('action', $this->action_default)); + $this->xhr = (bool) psm_GET('xhr', psm_POST('xhr', false)); - if(!in_array($action, $this->actions) || !$this->initializeAction($action)) { - $this->initializeAction($this->action_default); + if(!in_array($action, $this->actions) || !($result = $this->initializeAction($action))) { + $result = $this->initializeAction($this->action_default); } - $this->createHTML(); + if($result instanceof Response) { + return $result; + } + + // no response returned from execute, create regular HTML + return $this->createHTML(); } /** @@ -147,7 +163,7 @@ abstract class AbstractController implements ControllerInterface { * * For it to run, the "execute$action" method must exist. * @param string $action - * @return boolean whether action has been initialized successfully + * @return mixed FALSE when action couldnt be initialized, response otherwise */ protected function initializeAction($action) { if(isset($this->user_level_required_actions[$action])) { @@ -161,63 +177,80 @@ abstract class AbstractController implements ControllerInterface { $method = 'execute' . ucfirst($action); if(method_exists($this, $method)) { $this->action = $action; - $this->$method(); - return true; + $result = $this->$method(); + // if result from execute is null, no return value given so return true to indicate a successful execute + return ($result === null) ? true : $result; } return false; } /** * Create the HTML code for the module. + * * First the createHTMLLabels() will be called to add all labels to the template, - * Then the tpl_id set in $this->getTemplateId() will be added to the main template automatically + * Then the tpl_id set in $this->getTemplateId() will be added to the main template automatically. + * If XHR is on, no main template will be added. + * + * @return \Symfony\Component\HttpFoundation\Response */ protected function createHTML() { - $tpl_data = array(); - - if(!empty($this->messages)) { - $this->tpl->addTemplateDataRepeat('main', 'messages', $this->messages); - } - // add menu to page? - if($this->add_menu) { - $tpl_data['html_menu'] = $this->createHTMLMenu(); - } - // add modal dialog to page ? - if(sizeof($this->modal)) { - $html_modal = ''; - foreach ($this->modal as $modal) - { - $html_modal .= $modal->createHTML(); - } - $tpl_data['html_modal'] = $html_modal; - } - // add sidebar to page? - if($this->sidebar !== null) { - $tpl_data['html_sidebar'] = $this->sidebar->createHTML(); - } - // add footer to page? - if($this->add_footer) { - $this->tpl->newTemplate('main_footer', 'main.tpl.html'); - $tpl_data['html_footer'] = $this->tpl->getTemplate('main_footer'); - $tpl_data['version'] = 'v' . PSM_VERSION; - } - $tpl_id_content = $this->getTemplateId(); - if($tpl_id_content) { - $tpl_data['content'] = $this->tpl->getTemplate($tpl_id_content); + $html = ''; + + if($this->xhr) { + // in XHR mode, we will not add the main template + if($tpl_id_content) { + $this->createHTMLLabels(); + $html = $this->tpl->display($tpl_id_content); + } + } else { + // regular request, add main frame + $tpl_data = array(); + + if(!empty($this->messages)) { + $this->tpl->addTemplateDataRepeat('main', 'messages', $this->messages); + } + // add menu to page? + if($this->add_menu) { + $tpl_data['html_menu'] = $this->createHTMLMenu(); + } + // add modal dialog to page ? + if(sizeof($this->modal)) { + $html_modal = ''; + foreach($this->modal as $modal) { + $html_modal .= $modal->createHTML(); + } + $tpl_data['html_modal'] = $html_modal; + } + // add sidebar to page? + if($this->sidebar !== null) { + $tpl_data['html_sidebar'] = $this->sidebar->createHTML(); + } + // add footer to page? + if($this->add_footer) { + $this->tpl->newTemplate('main_footer', 'main.tpl.html'); + $tpl_data['html_footer'] = $this->tpl->getTemplate('main_footer'); + $tpl_data['version'] = 'v' . PSM_VERSION; + } + + if($tpl_id_content) { + $tpl_data['content'] = $this->tpl->getTemplate($tpl_id_content); + } + + if(psm_update_available()) { + $tpl_data['update_available'] = str_replace('{version}', 'v'.psm_get_conf('version_update_check'), psm_get_lang('system', 'update_available')); + } + + // add the module's custom template to the main template to get some content + $this->setTemplateId('main'); + $this->tpl->addTemplatedata($this->getTemplateId(), $tpl_data); + $this->createHTMLLabels(); + $html = $this->tpl->display($this->getTemplateId()); } - if(psm_update_available()) { - $tpl_data['update_available'] = str_replace('{version}', 'v'.psm_get_conf('version_update_check'), psm_get_lang('system', 'update_available')); - } + $response = new Response($html); - // add the module's custom template to the main template to get some content - $this->setTemplateId('main'); - $this->tpl->addTemplatedata($this->getTemplateId(), $tpl_data); - $this->createHTMLLabels(); - - // display main template - echo $this->tpl->display($this->getTemplateId()); + return $response; } /** @@ -280,8 +313,6 @@ abstract class AbstractController implements ControllerInterface { * @see createHTML() */ protected function createHTMLLabels() { - global $type; - $this->tpl->addTemplateData( 'main', array( @@ -465,4 +496,12 @@ abstract class AbstractController implements ControllerInterface { $this->modal[$modal->getModalID()] = $modal; return $this; } + + /** + * Check if XHR is on + * @return boolean + */ + public function isXHR() { + return $this->xhr; + } } diff --git a/src/psm/Router.class.php b/src/psm/Router.class.php index 378f302a..40cbf4b9 100644 --- a/src/psm/Router.class.php +++ b/src/psm/Router.class.php @@ -27,6 +27,7 @@ **/ namespace psm; +use Symfony\Component\HttpFoundation\Response; /** * The router class opens the controller and initializes the module. @@ -97,6 +98,7 @@ class Router { * If no mod is given it will attempt to load the default module. * @param string $mod if empty, the mod getvar will be used, or fallback to default * @throws \InvalidArgumentException + * @throws \LogicException */ public function run($mod = null) { if($mod === null) { @@ -127,7 +129,12 @@ class Router { $controller->setUser($this->services['user']); // let the module prepare it's HTML code - $controller->initialize(); + $response = $controller->initialize(); + + if(!($response instanceof Response)) { + throw new \LogicException('Controller did not return a Response object.'); + } + $response->send(); } /** diff --git a/src/psm/Util/Mailer.class.php b/src/psm/Util/Mailer.class.php deleted file mode 100644 index 18f369dd..00000000 --- a/src/psm/Util/Mailer.class.php +++ /dev/null @@ -1,55 +0,0 @@ -. - * - * @package phpservermon - * @author Pepijn Over - * @copyright Copyright (c) 2008-2014 Pepijn Over - * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 - * @version Release: @package_version@ - * @link http://www.phpservermonitor.org/ - * @since phpservermon 3.0.0 - **/ - -namespace psm\Util; - -/** - * PHPMailer is not using namespaces so unable to load files in autoloader. - */ -require_once(PSM_PATH_VENDOR . '/PHPMailer/class.phpmailer.php'); -require_once(PSM_PATH_VENDOR . '/PHPMailer/class.smtp.php'); - -/** - * PSM Mailer utility - * - * The PHPMailer is an open source lib that can be found in vendor/PHPMailer. - * - * @see \PHPMailer - */ -class Mailer extends \PHPMailer { - - /** - * Open new PHPMailer - * - * @param boolean $exceptions - */ - function __construct($exceptions = false) { - parent::__construct($exceptions); - - } -} diff --git a/static/js/scripts.js b/static/js/scripts.js index ff690cb8..e3676c24 100755 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -33,6 +33,24 @@ $().ready(function() { psm_tooltips(); }); +function psm_xhr(mod, params, method, on_complete, options) { + method = (typeof method == 'undefined') ? 'GET' : method; + + var xhr_options = { + data: params, + type: method, + success: on_complete, + error: function(jqjqXHR, textStatus, errorThrown) { + psm_flash_message(errorThrown); + } + }; + $.extend(xhr_options, options); + + var result = $.ajax('index.php?xhr=1&mod=' + mod, xhr_options); + + return result; +} + function psm_tooltips() { $('input[data-toggle="tooltip"]').tooltip({ 'trigger':'hover', diff --git a/vendor/PHPMailer/class.phpmailer.php b/vendor/PHPMailer/class.phpmailer.php deleted file mode 100644 index bfb8ecad..00000000 --- a/vendor/PHPMailer/class.phpmailer.php +++ /dev/null @@ -1,2949 +0,0 @@ -UseSendmailOptions) ) { - $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header); - } else { - $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($subject)), $body, $header, $params); - } - return $rt; - } - - /** - * Outputs debugging info via user-defined method - * @param string $str - */ - protected function edebug($str) { - switch ($this->Debugoutput) { - case 'error_log': - error_log($str); - break; - case 'html': - //Cleans up output a bit for a better looking display that's HTML-safe - echo htmlentities(preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, $this->CharSet)."
\n"; - break; - case 'echo': - default: - //Just echoes exactly what was received - echo $str; - } - } - - /** - * Constructor - * @param boolean $exceptions Should we throw external exceptions? - */ - public function __construct($exceptions = false) { - $this->exceptions = ($exceptions == true); - } - - /** - * Destructor - */ - public function __destruct() { - if ($this->Mailer == 'smtp') { //Close any open SMTP connection nicely - $this->SmtpClose(); - } - } - - /** - * Sets message type to HTML. - * @param bool $ishtml - * @return void - */ - public function IsHTML($ishtml = true) { - if ($ishtml) { - $this->ContentType = 'text/html'; - } else { - $this->ContentType = 'text/plain'; - } - } - - /** - * Sets Mailer to send message using SMTP. - * @return void - */ - public function IsSMTP() { - $this->Mailer = 'smtp'; - } - - /** - * Sets Mailer to send message using PHP mail() function. - * @return void - */ - public function IsMail() { - $this->Mailer = 'mail'; - } - - /** - * Sets Mailer to send message using the $Sendmail program. - * @return void - */ - public function IsSendmail() { - if (!stristr(ini_get('sendmail_path'), 'sendmail')) { - $this->Sendmail = '/var/qmail/bin/sendmail'; - } - $this->Mailer = 'sendmail'; - } - - /** - * Sets Mailer to send message using the qmail MTA. - * @return void - */ - public function IsQmail() { - if (stristr(ini_get('sendmail_path'), 'qmail')) { - $this->Sendmail = '/var/qmail/bin/sendmail'; - } - $this->Mailer = 'sendmail'; - } - - ///////////////////////////////////////////////// - // METHODS, RECIPIENTS - ///////////////////////////////////////////////// - - /** - * Adds a "To" address. - * @param string $address - * @param string $name - * @return boolean true on success, false if address already used - */ - public function AddAddress($address, $name = '') { - return $this->AddAnAddress('to', $address, $name); - } - - /** - * Adds a "Cc" address. - * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. - * @param string $address - * @param string $name - * @return boolean true on success, false if address already used - */ - public function AddCC($address, $name = '') { - return $this->AddAnAddress('cc', $address, $name); - } - - /** - * Adds a "Bcc" address. - * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. - * @param string $address - * @param string $name - * @return boolean true on success, false if address already used - */ - public function AddBCC($address, $name = '') { - return $this->AddAnAddress('bcc', $address, $name); - } - - /** - * Adds a "Reply-to" address. - * @param string $address - * @param string $name - * @return boolean - */ - public function AddReplyTo($address, $name = '') { - return $this->AddAnAddress('Reply-To', $address, $name); - } - - /** - * Adds an address to one of the recipient arrays - * Addresses that have been added already return false, but do not throw exceptions - * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo' - * @param string $address The email address to send to - * @param string $name - * @throws phpmailerException - * @return boolean true on success, false if address already used or invalid in some way - * @access protected - */ - protected function AddAnAddress($kind, $address, $name = '') { - if (!preg_match('/^(to|cc|bcc|Reply-To)$/', $kind)) { - $this->SetError($this->Lang('Invalid recipient array').': '.$kind); - if ($this->exceptions) { - throw new phpmailerException('Invalid recipient array: ' . $kind); - } - if ($this->SMTPDebug) { - $this->edebug($this->Lang('Invalid recipient array').': '.$kind); - } - return false; - } - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - if (!$this->ValidateAddress($address)) { - $this->SetError($this->Lang('invalid_address').': '. $address); - if ($this->exceptions) { - throw new phpmailerException($this->Lang('invalid_address').': '.$address); - } - if ($this->SMTPDebug) { - $this->edebug($this->Lang('invalid_address').': '.$address); - } - return false; - } - if ($kind != 'Reply-To') { - if (!isset($this->all_recipients[strtolower($address)])) { - array_push($this->$kind, array($address, $name)); - $this->all_recipients[strtolower($address)] = true; - return true; - } - } else { - if (!array_key_exists(strtolower($address), $this->ReplyTo)) { - $this->ReplyTo[strtolower($address)] = array($address, $name); - return true; - } - } - return false; -} - - /** - * Set the From and FromName properties - * @param string $address - * @param string $name - * @param boolean $auto Whether to also set the Sender address, defaults to true - * @throws phpmailerException - * @return boolean - */ - public function SetFrom($address, $name = '', $auto = true) { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - if (!$this->ValidateAddress($address)) { - $this->SetError($this->Lang('invalid_address').': '. $address); - if ($this->exceptions) { - throw new phpmailerException($this->Lang('invalid_address').': '.$address); - } - if ($this->SMTPDebug) { - $this->edebug($this->Lang('invalid_address').': '.$address); - } - return false; - } - $this->From = $address; - $this->FromName = $name; - if ($auto) { - if (empty($this->Sender)) { - $this->Sender = $address; - } - } - return true; - } - - /** - * Check that a string looks roughly like an email address should - * Static so it can be used without instantiation, public so people can overload - * Conforms to RFC5322: Uses *correct* regex on which FILTER_VALIDATE_EMAIL is - * based; So why not use FILTER_VALIDATE_EMAIL? Because it was broken to - * not allow a@b type valid addresses :( - * @link http://squiloople.com/2009/12/20/email-address-validation/ - * @copyright regex Copyright Michael Rushton 2009-10 | http://squiloople.com/ | Feel free to use and redistribute this code. But please keep this copyright notice. - * @param string $address The email address to check - * @return boolean - * @static - * @access public - */ - public static function ValidateAddress($address) { - if (defined('PCRE_VERSION')) { //Check this instead of extension_loaded so it works when that function is disabled - if (version_compare(PCRE_VERSION, '8.0') >= 0) { - return (boolean)preg_match('/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\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); - } else { - //Fall back to an older regex that doesn't need a recent PCRE - return (boolean)preg_match('/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!(?>"?(?>\\\[ -~]|[^"])"?){65,}@)(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*")(?>\.(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*"))*@(?>(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)){0,126}|\[(?:(?>IPv6:(?>(?>[a-f0-9]{1,4})(?>:[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\]]){8,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?::(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?))|(?>(?>IPv6:(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4})?::(?>(?:[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4}):)?))?(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\])$/isD', $address); - } - } else { - //No PCRE! Do something _very_ approximate! - //Check the address is 3 chars or longer and contains an @ that's not the first or last char - return (strlen($address) >= 3 and strpos($address, '@') >= 1 and strpos($address, '@') != strlen($address) - 1); - } - } - - ///////////////////////////////////////////////// - // METHODS, MAIL SENDING - ///////////////////////////////////////////////// - - /** - * Creates message and assigns Mailer. If the message is - * not sent successfully then it returns false. Use the ErrorInfo - * variable to view description of the error. - * @throws phpmailerException - * @return bool - */ - public function Send() { - try { - if(!$this->PreSend()) return false; - return $this->PostSend(); - } catch (phpmailerException $e) { - $this->mailHeader = ''; - $this->SetError($e->getMessage()); - if ($this->exceptions) { - throw $e; - } - return false; - } - } - - /** - * Prep mail by constructing all message entities - * @throws phpmailerException - * @return bool - */ - public function PreSend() { - try { - $this->mailHeader = ""; - if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { - throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); - } - - // Set whether the message is multipart/alternative - if(!empty($this->AltBody)) { - $this->ContentType = 'multipart/alternative'; - } - - $this->error_count = 0; // reset errors - $this->SetMessageType(); - //Refuse to send an empty message unless we are specifically allowing it - if (!$this->AllowEmpty and empty($this->Body)) { - throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); - } - - $this->MIMEHeader = $this->CreateHeader(); - $this->MIMEBody = $this->CreateBody(); - - // To capture the complete message when using mail(), create - // an extra header list which CreateHeader() doesn't fold in - if ($this->Mailer == 'mail') { - 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(trim($this->Subject)))); - } - - // digitally sign with DKIM if enabled - if (!empty($this->DKIM_domain) && !empty($this->DKIM_private) && !empty($this->DKIM_selector) && !empty($this->DKIM_domain) && file_exists($this->DKIM_private)) { - $header_dkim = $this->DKIM_Add($this->MIMEHeader . $this->mailHeader, $this->EncodeHeader($this->SecureHeader($this->Subject)), $this->MIMEBody); - $this->MIMEHeader = str_replace("\r\n", "\n", $header_dkim) . $this->MIMEHeader; - } - - return true; - - } catch (phpmailerException $e) { - $this->SetError($e->getMessage()); - if ($this->exceptions) { - throw $e; - } - return false; - } - } - - /** - * Actual Email transport function - * Send the email via the selected mechanism - * @throws phpmailerException - * @return bool - */ - public function PostSend() { - try { - // Choose the mailer and send through it - switch($this->Mailer) { - case 'sendmail': - 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: - return $this->MailSend($this->MIMEHeader, $this->MIMEBody); - } - } catch (phpmailerException $e) { - $this->SetError($e->getMessage()); - if ($this->exceptions) { - throw $e; - } - if ($this->SMTPDebug) { - $this->edebug($e->getMessage()."\n"); - } - } - return false; - } - - /** - * Sends mail using the $Sendmail program. - * @param string $header The message headers - * @param string $body The message body - * @throws phpmailerException - * @access protected - * @return bool - */ - protected function SendmailSend($header, $body) { - if ($this->Sender != '') { - $sendmail = sprintf("%s -oi -f%s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); - } else { - $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); - } - if ($this->SingleTo === true) { - foreach ($this->SingleToArray as $val) { - if(!@$mail = popen($sendmail, 'w')) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fputs($mail, "To: " . $val . "\n"); - fputs($mail, $header); - fputs($mail, $body); - $result = pclose($mail); - // implement call back function if it exists - $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); - if($result != 0) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - } else { - if(!@$mail = popen($sendmail, 'w')) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fputs($mail, $header); - fputs($mail, $body); - $result = pclose($mail); - // implement call back function if it exists - $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent, $this->to, $this->cc, $this->bcc, $this->Subject, $body); - if($result != 0) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - return true; - } - - /** - * Sends mail using the PHP mail() function. - * @param string $header The message headers - * @param string $body The message body - * @throws phpmailerException - * @access protected - * @return bool - */ - protected function MailSend($header, $body) { - $toArr = array(); - foreach($this->to as $t) { - $toArr[] = $this->AddrFormat($t); - } - $to = implode(', ', $toArr); - - if (empty($this->Sender)) { - $params = " "; - } else { - $params = sprintf("-f%s", $this->Sender); - } - if ($this->Sender != '' and !ini_get('safe_mode')) { - $old_from = ini_get('sendmail_from'); - ini_set('sendmail_from', $this->Sender); - } - $rt = false; - if ($this->SingleTo === true && count($toArr) > 1) { - foreach ($toArr as $val) { - $rt = $this->mail_passthru($val, $this->Subject, $body, $header, $params); - // implement call back function if it exists - $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent, $val, $this->cc, $this->bcc, $this->Subject, $body); - } - } else { - $rt = $this->mail_passthru($to, $this->Subject, $body, $header, $params); - // implement call back function if it exists - $isSent = ($rt == 1) ? 1 : 0; - $this->doCallback($isSent, $to, $this->cc, $this->bcc, $this->Subject, $body); - } - if (isset($old_from)) { - ini_set('sendmail_from', $old_from); - } - if(!$rt) { - throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL); - } - return true; - } - - /** - * Sends mail via SMTP using PhpSMTP - * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. - * @param string $header The message headers - * @param string $body The message body - * @throws phpmailerException - * @uses SMTP - * @access protected - * @return bool - */ - protected function SmtpSend($header, $body) { - require_once $this->PluginDir . 'class.smtp.php'; - $bad_rcpt = array(); - - if(!$this->SmtpConnect()) { - throw new phpmailerException($this->Lang('smtp_connect_failed'), self::STOP_CRITICAL); - } - $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; - if(!$this->smtp->Mail($smtp_from)) { - $this->SetError($this->Lang('from_failed') . $smtp_from . ' : ' .implode(',', $this->smtp->getError())); - throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL); - } - - // Attempt to send attach all recipients - foreach($this->to as $to) { - if (!$this->smtp->Recipient($to[0])) { - $bad_rcpt[] = $to[0]; - // implement call back function if it exists - $isSent = 0; - $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); - } else { - // implement call back function if it exists - $isSent = 1; - $this->doCallback($isSent, $to[0], '', '', $this->Subject, $body); - } - } - foreach($this->cc as $cc) { - if (!$this->smtp->Recipient($cc[0])) { - $bad_rcpt[] = $cc[0]; - // implement call back function if it exists - $isSent = 0; - $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); - } else { - // implement call back function if it exists - $isSent = 1; - $this->doCallback($isSent, '', $cc[0], '', $this->Subject, $body); - } - } - foreach($this->bcc as $bcc) { - if (!$this->smtp->Recipient($bcc[0])) { - $bad_rcpt[] = $bcc[0]; - // implement call back function if it exists - $isSent = 0; - $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); - } else { - // implement call back function if it exists - $isSent = 1; - $this->doCallback($isSent, '', '', $bcc[0], $this->Subject, $body); - } - } - - - if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses - $badaddresses = implode(', ', $bad_rcpt); - throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses); - } - if(!$this->smtp->Data($header . $body)) { - throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL); - } - if($this->SMTPKeepAlive == true) { - $this->smtp->Reset(); - } else { - $this->smtp->Quit(); - $this->smtp->Close(); - } - return true; - } - - /** - * Initiates a connection to an SMTP server. - * Returns false if the operation failed. - * @param array $options An array of options compatible with stream_context_create() - * @uses SMTP - * @access public - * @throws phpmailerException - * @return bool - */ - public function SmtpConnect($options = array()) { - if(is_null($this->smtp)) { - $this->smtp = new SMTP; - } - - //Already connected? - if ($this->smtp->Connected()) { - return true; - } - - $this->smtp->Timeout = $this->Timeout; - $this->smtp->do_debug = $this->SMTPDebug; - $this->smtp->Debugoutput = $this->Debugoutput; - $this->smtp->do_verp = $this->do_verp; - $index = 0; - $tls = ($this->SMTPSecure == 'tls'); - $ssl = ($this->SMTPSecure == 'ssl'); - $hosts = explode(';', $this->Host); - $lastexception = null; - - foreach ($hosts as $hostentry) { - $hostinfo = array(); - $host = $hostentry; - $port = $this->Port; - if (preg_match('/^(.+):([0-9]+)$/', $hostentry, $hostinfo)) { //If $hostentry contains 'address:port', override default - $host = $hostinfo[1]; - $port = $hostinfo[2]; - } - if ($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout, $options)) { - try { - if ($this->Helo) { - $hello = $this->Helo; - } else { - $hello = $this->ServerHostname(); - } - $this->smtp->Hello($hello); - - if ($tls) { - if (!$this->smtp->StartTLS()) { - throw new phpmailerException($this->Lang('connect_host')); - } - //We must resend HELO after tls negotiation - $this->smtp->Hello($hello); - } - if ($this->SMTPAuth) { - if (!$this->smtp->Authenticate($this->Username, $this->Password, $this->AuthType, $this->Realm, $this->Workstation)) { - throw new phpmailerException($this->Lang('authenticate')); - } - } - return true; - } catch (phpmailerException $e) { - $lastexception = $e; - //We must have connected, but then failed TLS or Auth, so close connection nicely - $this->smtp->Quit(); - } - } - } - //If we get here, all connection attempts have failed, so close connection hard - $this->smtp->Close(); - //As we've caught all exceptions, just report whatever the last one was - if ($this->exceptions and !is_null($lastexception)) { - throw $lastexception; - } - return false; - } - - /** - * Closes the active SMTP session if one exists. - * @return void - */ - public function SmtpClose() { - if ($this->smtp !== null) { - if($this->smtp->Connected()) { - $this->smtp->Quit(); - $this->smtp->Close(); - } - } - } - - /** - * Sets the language for all class error messages. - * Returns false if it cannot load the language file. The default language is English. - * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br") - * @param string $lang_path Path to the language file directory - * @return bool - * @access public - */ - function SetLanguage($langcode = 'en', $lang_path = 'language/') { - //Define full set of translatable strings - $PHPMAILER_LANG = array( - '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: ' - ); - //Overwrite language-specific strings. This way we'll never have missing translations - no more "language string failed to load"! - $l = true; - if ($langcode != 'en') { //There is no English translation file - $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php'; - } - $this->language = $PHPMAILER_LANG; - return ($l == true); //Returns false if language not found - } - - /** - * Return the current array of language strings - * @return array - */ - public function GetTranslations() { - return $this->language; - } - - ///////////////////////////////////////////////// - // METHODS, MESSAGE CREATION - ///////////////////////////////////////////////// - - /** - * Creates recipient headers. - * @access public - * @param string $type - * @param array $addr - * @return string - */ - public function AddrAppend($type, $addr) { - $addr_str = $type . ': '; - $addresses = array(); - foreach ($addr as $a) { - $addresses[] = $this->AddrFormat($a); - } - $addr_str .= implode(', ', $addresses); - $addr_str .= $this->LE; - - return $addr_str; - } - - /** - * Formats an address correctly. - * @access public - * @param string $addr - * @return string - */ - public function AddrFormat($addr) { - if (empty($addr[1])) { - return $this->SecureHeader($addr[0]); - } else { - return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; - } - } - - /** - * Wraps message for use with mailers that do not - * automatically perform wrapping and for quoted-printable. - * Original written by philippe. - * @param string $message The message to wrap - * @param integer $length The line length to wrap to - * @param boolean $qp_mode Whether to run in Quoted-Printable mode - * @access public - * @return string - */ - public function WrapText($message, $length, $qp_mode = false) { - $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; - // If utf-8 encoding is used, we will need to make sure we don't - // split multibyte characters when we wrap - $is_utf8 = (strtolower($this->CharSet) == "utf-8"); - $lelen = strlen($this->LE); - $crlflen = strlen(self::CRLF); - - $message = $this->FixEOL($message); - if (substr($message, -$lelen) == $this->LE) { - $message = substr($message, 0, -$lelen); - } - - $line = explode($this->LE, $message); // Magic. We know FixEOL uses $LE - $message = ''; - for ($i = 0 ;$i < count($line); $i++) { - $line_part = explode(' ', $line[$i]); - $buf = ''; - for ($e = 0; $e $length)) { - $space_left = $length - strlen($buf) - $crlflen; - if ($e != 0) { - 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", self::CRLF); - } 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", self::CRLF); - } else { - $buf = $part; - } - } - } else { - $buf_o = $buf; - $buf .= ($e == 0) ? $word : (' ' . $word); - - if (strlen($buf) > $length and $buf_o != '') { - $message .= $buf_o . $soft_break; - $buf = $word; - } - } - } - $message .= $buf . self::CRLF; - } - - return $message; - } - - /** - * Finds last character boundary prior to maxLength in a utf-8 - * quoted (printable) encoded string. - * Original written by Colin Brown. - * @access public - * @param string $encodedText utf-8 QP text - * @param int $maxLength find last character boundary prior to this length - * @return int - */ - public function UTF8CharBoundary($encodedText, $maxLength) { - $foundSplitPos = false; - $lookBack = 3; - while (!$foundSplitPos) { - $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); - $encodedCharPos = strpos($lastChunk, "="); - if ($encodedCharPos !== false) { - // Found start of encoded character byte within $lookBack block. - // Check the encoded byte value (the 2 chars after the '=') - $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); - $dec = hexdec($hex); - if ($dec < 128) { // Single byte character. - // If the encoded char was found at pos 0, it will fit - // otherwise reduce maxLength to start of the encoded char - $maxLength = ($encodedCharPos == 0) ? $maxLength : - $maxLength - ($lookBack - $encodedCharPos); - $foundSplitPos = true; - } elseif ($dec >= 192) { // First byte of a multi byte character - // Reduce maxLength to split at start of character - $maxLength = $maxLength - ($lookBack - $encodedCharPos); - $foundSplitPos = true; - } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back - $lookBack += 3; - } - } else { - // No encoded character found - $foundSplitPos = true; - } - } - return $maxLength; - } - - - /** - * Set the body wrapping. - * @access public - * @return void - */ - 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; - } - } - - /** - * Assembles message header. - * @access public - * @return string The assembled header - */ - public function CreateHeader() { - $result = ''; - - // Set the boundaries - $uniq_id = md5(uniqid(time())); - $this->boundary[1] = 'b1_' . $uniq_id; - $this->boundary[2] = 'b2_' . $uniq_id; - $this->boundary[3] = 'b3_' . $uniq_id; - - if ($this->MessageDate == '') { - $result .= $this->HeaderLine('Date', self::RFCDate()); - } else { - $result .= $this->HeaderLine('Date', $this->MessageDate); - } - - if ($this->ReturnPath) { - $result .= $this->HeaderLine('Return-Path', '<'.trim($this->ReturnPath).'>'); - } elseif ($this->Sender == '') { - $result .= $this->HeaderLine('Return-Path', '<'.trim($this->From).'>'); - } else { - $result .= $this->HeaderLine('Return-Path', '<'.trim($this->Sender).'>'); - } - - // To be created automatically by mail() - if($this->Mailer != 'mail') { - if ($this->SingleTo === true) { - foreach($this->to as $t) { - $this->SingleToArray[] = $this->AddrFormat($t); - } - } else { - if(count($this->to) > 0) { - $result .= $this->AddrAppend('To', $this->to); - } elseif (count($this->cc) == 0) { - $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); - } - } - } - - $from = array(); - $from[0][0] = trim($this->From); - $from[0][1] = $this->FromName; - $result .= $this->AddrAppend('From', $from); - - // sendmail and mail() extract Cc from the header before sending - if(count($this->cc) > 0) { - $result .= $this->AddrAppend('Cc', $this->cc); - } - - // sendmail and mail() extract Bcc from the header before sending - if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) { - $result .= $this->AddrAppend('Bcc', $this->bcc); - } - - if(count($this->ReplyTo) > 0) { - $result .= $this->AddrAppend('Reply-To', $this->ReplyTo); - } - - // mail() sets the subject itself - if($this->Mailer != 'mail') { - $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); - } - - if($this->MessageID != '') { - $result .= $this->HeaderLine('Message-ID', $this->MessageID); - } else { - $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); - } - $result .= $this->HeaderLine('X-Priority', $this->Priority); - if ($this->XMailer == '') { - $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (https://github.com/PHPMailer/PHPMailer/)'); - } else { - $myXmailer = trim($this->XMailer); - if ($myXmailer) { - $result .= $this->HeaderLine('X-Mailer', $myXmailer); - } - } - - if($this->ConfirmReadingTo != '') { - $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); - } - - // Add custom headers - for($index = 0; $index < count($this->CustomHeader); $index++) { - $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); - } - if (!$this->sign_key_file) { - $result .= $this->HeaderLine('MIME-Version', '1.0'); - $result .= $this->GetMailMIME(); - } - - return $result; - } - - /** - * Returns the message MIME. - * @access public - * @return string - */ - public function GetMailMIME() { - $result = ''; - switch($this->message_type) { - case 'inline': - $result .= $this->HeaderLine('Content-Type', 'multipart/related;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1].'"'); - break; - case 'attach': - case 'inline_attach': - case 'alt_attach': - case 'alt_inline_attach': - $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1].'"'); - break; - case 'alt': - case 'alt_inline': - $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); - $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1].'"'); - break; - default: - // Catches case 'plain': and case '': - $result .= $this->TextLine('Content-Type: '.$this->ContentType.'; charset='.$this->CharSet); - break; - } - //RFC1341 part 5 says 7bit is assumed if not specified - if ($this->Encoding != '7bit') { - $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); - } - - if($this->Mailer != 'mail') { - $result .= $this->LE; - } - - return $result; - } - - /** - * Returns the MIME message (headers and body). Only really valid post PreSend(). - * @access public - * @return string - */ - public function GetSentMIMEMessage() { - return $this->MIMEHeader . $this->mailHeader . self::CRLF . $this->MIMEBody; - } - - - /** - * Assembles the message body. Returns an empty string on failure. - * @access public - * @throws phpmailerException - * @return string The assembled message body - */ - public function CreateBody() { - $body = ''; - - if ($this->sign_key_file) { - $body .= $this->GetMailMIME().$this->LE; - } - - $this->SetWordWrap(); - - switch($this->message_type) { - case 'inline': - $body .= $this->GetBoundary($this->boundary[1], '', '', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->AttachAll('inline', $this->boundary[1]); - break; - case 'attach': - $body .= $this->GetBoundary($this->boundary[1], '', '', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->AttachAll('attachment', $this->boundary[1]); - break; - case 'inline_attach': - $body .= $this->TextLine('--' . $this->boundary[1]); - $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); - $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2].'"'); - $body .= $this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', '', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->AttachAll('inline', $this->boundary[2]); - $body .= $this->LE; - $body .= $this->AttachAll('attachment', $this->boundary[1]); - break; - case 'alt': - $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); - $body .= $this->EncodeString($this->AltBody, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - if(!empty($this->Ical)) { - $body .= $this->GetBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', ''); - $body .= $this->EncodeString($this->Ical, $this->Encoding); - $body .= $this->LE.$this->LE; - } - $body .= $this->EndBoundary($this->boundary[1]); - break; - case 'alt_inline': - $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); - $body .= $this->EncodeString($this->AltBody, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->TextLine('--' . $this->boundary[1]); - $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); - $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2].'"'); - $body .= $this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->AttachAll('inline', $this->boundary[2]); - $body .= $this->LE; - $body .= $this->EndBoundary($this->boundary[1]); - break; - case 'alt_attach': - $body .= $this->TextLine('--' . $this->boundary[1]); - $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); - $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2].'"'); - $body .= $this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); - $body .= $this->EncodeString($this->AltBody, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->EndBoundary($this->boundary[2]); - $body .= $this->LE; - $body .= $this->AttachAll('attachment', $this->boundary[1]); - break; - case 'alt_inline_attach': - $body .= $this->TextLine('--' . $this->boundary[1]); - $body .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); - $body .= $this->TextLine("\tboundary=\"" . $this->boundary[2].'"'); - $body .= $this->LE; - $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', ''); - $body .= $this->EncodeString($this->AltBody, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->TextLine('--' . $this->boundary[2]); - $body .= $this->HeaderLine('Content-Type', 'multipart/related;'); - $body .= $this->TextLine("\tboundary=\"" . $this->boundary[3].'"'); - $body .= $this->LE; - $body .= $this->GetBoundary($this->boundary[3], '', 'text/html', ''); - $body .= $this->EncodeString($this->Body, $this->Encoding); - $body .= $this->LE.$this->LE; - $body .= $this->AttachAll('inline', $this->boundary[3]); - $body .= $this->LE; - $body .= $this->EndBoundary($this->boundary[2]); - $body .= $this->LE; - $body .= $this->AttachAll('attachment', $this->boundary[1]); - break; - default: - // catch case 'plain' and case '' - $body .= $this->EncodeString($this->Body, $this->Encoding); - break; - } - - if ($this->IsError()) { - $body = ''; - } elseif ($this->sign_key_file) { - try { - if (!defined('PKCS7_TEXT')) { - throw new phpmailerException($this->Lang('signing').' OpenSSL extension missing.'); - } - $file = tempnam(sys_get_temp_dir(), 'mail'); - file_put_contents($file, $body); //TODO check this worked - $signed = tempnam(sys_get_temp_dir(), 'signed'); - if (@openssl_pkcs7_sign($file, $signed, 'file://'.realpath($this->sign_cert_file), array('file://'.realpath($this->sign_key_file), $this->sign_key_pass), null)) { - @unlink($file); - $body = file_get_contents($signed); - @unlink($signed); - } else { - @unlink($file); - @unlink($signed); - throw new phpmailerException($this->Lang('signing').openssl_error_string()); - } - } catch (phpmailerException $e) { - $body = ''; - if ($this->exceptions) { - throw $e; - } - } - } - return $body; - } - - /** - * Returns the start of a message boundary. - * @access protected - * @param string $boundary - * @param string $charSet - * @param string $contentType - * @param string $encoding - * @return string - */ - 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 .= $this->LE; - $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); - $result .= $this->LE; - - return $result; - } - - /** - * Returns the end of a message boundary. - * @access protected - * @param string $boundary - * @return string - */ - protected function EndBoundary($boundary) { - return $this->LE . '--' . $boundary . '--' . $this->LE; - } - - /** - * Sets the message type. - * @access protected - * @return void - */ - protected function SetMessageType() { - $this->message_type = array(); - if($this->AlternativeExists()) $this->message_type[] = "alt"; - if($this->InlineImageExists()) $this->message_type[] = "inline"; - if($this->AttachmentExists()) $this->message_type[] = "attach"; - $this->message_type = implode("_", $this->message_type); - if($this->message_type == "") $this->message_type = "plain"; - } - - /** - * Returns a formatted header line. - * @access public - * @param string $name - * @param string $value - * @return string - */ - public function HeaderLine($name, $value) { - return $name . ': ' . $value . $this->LE; - } - - /** - * Returns a formatted mail line. - * @access public - * @param string $value - * @return string - */ - public function TextLine($value) { - return $value . $this->LE; - } - - ///////////////////////////////////////////////// - // CLASS METHODS, ATTACHMENTS - ///////////////////////////////////////////////// - - /** - * Adds an attachment from a path on the filesystem. - * Returns false if the file could not be found - * or accessed. - * @param string $path Path to the attachment. - * @param string $name Overrides the attachment name. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File extension (MIME) type. - * @throws phpmailerException - * @return bool - */ - public function AddAttachment($path, $name = '', $encoding = 'base64', $type = '') { - try { - if ( !@is_file($path) ) { - throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); - } - - //If a MIME type is not specified, try to work it out from the file name - if ($type == '') { - $type = self::filenameToType($path); - } - - $filename = basename($path); - if ( $name == '' ) { - $name = $filename; - } - - $this->attachment[] = array( - 0 => $path, - 1 => $filename, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => false, // isStringAttachment - 6 => 'attachment', - 7 => 0 - ); - - } catch (phpmailerException $e) { - $this->SetError($e->getMessage()); - if ($this->exceptions) { - throw $e; - } - if ($this->SMTPDebug) { - $this->edebug($e->getMessage()."\n"); - } - return false; - } - return true; - } - - /** - * Return the current array of attachments - * @return array - */ - public function GetAttachments() { - return $this->attachment; - } - - /** - * Attaches all fs, string, and binary attachments to the message. - * Returns an empty string on failure. - * @access protected - * @param string $disposition_type - * @param string $boundary - * @return string - */ - protected function AttachAll($disposition_type, $boundary) { - // Return text of body - $mime = array(); - $cidUniq = array(); - $incl = array(); - - // Add all attachments - foreach ($this->attachment as $attachment) { - // CHECK IF IT IS A VALID DISPOSITION_FILTER - if($attachment[6] == $disposition_type) { - // Check for string attachment - $string = ''; - $path = ''; - $bString = $attachment[5]; - if ($bString) { - $string = $attachment[0]; - } else { - $path = $attachment[0]; - } - - $inclhash = md5(serialize($attachment)); - if (in_array($inclhash, $incl)) { continue; } - $incl[] = $inclhash; - $filename = $attachment[1]; - $name = $attachment[2]; - $encoding = $attachment[3]; - $type = $attachment[4]; - $disposition = $attachment[6]; - $cid = $attachment[7]; - if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } - $cidUniq[$cid] = true; - - $mime[] = sprintf("--%s%s", $boundary, $this->LE); - $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); - $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); - - if($disposition == 'inline') { - $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); - } - - //If a filename contains any of these chars, it should be quoted, but not otherwise: RFC2183 & RFC2045 5.1 - //Fixes a warning in IETF's msglint MIME checker - if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $name)) { - $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); - } else { - $mime[] = sprintf("Content-Disposition: %s; filename=%s%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); - } - - // Encode as string attachment - if($bString) { - $mime[] = $this->EncodeString($string, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } else { - $mime[] = $this->EncodeFile($path, $encoding); - if($this->IsError()) { - return ''; - } - $mime[] = $this->LE.$this->LE; - } - } - } - - $mime[] = sprintf("--%s--%s", $boundary, $this->LE); - - return implode("", $mime); - } - - /** - * Encodes attachment in requested format. - * Returns an empty string on failure. - * @param string $path The full path to the file - * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' - * @throws phpmailerException - * @see EncodeFile() - * @access protected - * @return string - */ - protected function EncodeFile($path, $encoding = 'base64') { - try { - if (!is_readable($path)) { - throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); - } - $magic_quotes = get_magic_quotes_runtime(); - if ($magic_quotes) { - if (version_compare(PHP_VERSION, '5.3.0', '<')) { - set_magic_quotes_runtime(0); - } else { - ini_set('magic_quotes_runtime', 0); - } - } - $file_buffer = file_get_contents($path); - $file_buffer = $this->EncodeString($file_buffer, $encoding); - if ($magic_quotes) { - if (version_compare(PHP_VERSION, '5.3.0', '<')) { - set_magic_quotes_runtime($magic_quotes); - } else { - ini_set('magic_quotes_runtime', $magic_quotes); - } - } - return $file_buffer; - } catch (Exception $e) { - $this->SetError($e->getMessage()); - return ''; - } - } - - /** - * Encodes string to requested format. - * Returns an empty string on failure. - * @param string $str The text to encode - * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' - * @access public - * @return string - */ - public function EncodeString($str, $encoding = 'base64') { - $encoded = ''; - switch(strtolower($encoding)) { - case 'base64': - $encoded = chunk_split(base64_encode($str), 76, $this->LE); - break; - case '7bit': - case '8bit': - $encoded = $this->FixEOL($str); - //Make sure it ends with a line break - if (substr($encoded, -(strlen($this->LE))) != $this->LE) - $encoded .= $this->LE; - break; - case 'binary': - $encoded = $str; - break; - case 'quoted-printable': - $encoded = $this->EncodeQP($str); - break; - default: - $this->SetError($this->Lang('encoding') . $encoding); - break; - } - return $encoded; - } - - /** - * Encode a header string to best (shortest) of Q, B, quoted or none. - * @access public - * @param string $str - * @param string $position - * @return string - */ - public function EncodeHeader($str, $position = 'text') { - $x = 0; - - switch (strtolower($position)) { - case 'phrase': - if (!preg_match('/[\200-\377]/', $str)) { - // Can't use addslashes as we don't know what value has magic_quotes_sybase - $encoded = addcslashes($str, "\0..\37\177\\\""); - if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { - return ($encoded); - } else { - return ("\"$encoded\""); - } - } - $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); - break; - case 'comment': - $x = preg_match_all('/[()"]/', $str, $matches); - // Fall-through - case 'text': - default: - $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); - break; - } - - if ($x == 0) { //There are no chars that need encoding - return ($str); - } - - $maxlen = 75 - 7 - strlen($this->CharSet); - // Try to select the encoding which should produce the shortest output - if ($x > strlen($str)/3) { //More than a third of the content will need encoding, so B encoding will be most efficient - $encoding = 'B'; - if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { - // Use a custom function which correctly encodes and wraps long - // multibyte strings without breaking lines within a character - $encoded = $this->Base64EncodeWrapMB($str, "\n"); - } else { - $encoded = base64_encode($str); - $maxlen -= $maxlen % 4; - $encoded = trim(chunk_split($encoded, $maxlen, "\n")); - } - } else { - $encoding = 'Q'; - $encoded = $this->EncodeQ($str, $position); - $encoded = $this->WrapText($encoded, $maxlen, true); - $encoded = str_replace('='.self::CRLF, "\n", trim($encoded)); - } - - $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); - $encoded = trim(str_replace("\n", $this->LE, $encoded)); - - return $encoded; - } - - /** - * Checks if a string contains multibyte characters. - * @access public - * @param string $str multi-byte text to wrap encode - * @return bool - */ - public function HasMultiBytes($str) { - if (function_exists('mb_strlen')) { - return (strlen($str) > mb_strlen($str, $this->CharSet)); - } else { // Assume no multibytes (we can't handle without mbstring functions anyway) - return false; - } - } - - /** - * Correctly encodes and wraps long multibyte strings for mail headers - * without breaking lines within a character. - * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php - * @access public - * @param string $str multi-byte text to wrap encode - * @param string $lf string to use as linefeed/end-of-line - * @return string - */ - public function Base64EncodeWrapMB($str, $lf=null) { - $start = "=?".$this->CharSet."?B?"; - $end = "?="; - $encoded = ""; - if ($lf === null) { - $lf = $this->LE; - } - - $mb_length = mb_strlen($str, $this->CharSet); - // Each line must have length <= 75, including $start and $end - $length = 75 - strlen($start) - strlen($end); - // Average multi-byte ratio - $ratio = $mb_length / strlen($str); - // Base64 has a 4:3 ratio - $offset = $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 . $lf; - } - - // Chomp the last linefeed - $encoded = substr($encoded, 0, -strlen($lf)); - return $encoded; - } - - /** - * Encode string to RFC2045 (6.7) quoted-printable format - * @access public - * @param string $string The text to encode - * @param integer $line_max Number of chars allowed on a line before wrapping - * @return string - * @link PHP version adapted from http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 - */ - public function EncodeQP($string, $line_max = 76) { - if (function_exists('quoted_printable_encode')) { //Use native function if it's available (>= PHP5.3) - return quoted_printable_encode($string); - } - //Fall back to a pure PHP implementation - $string = str_replace(array('%20', '%0D%0A.', '%0D%0A', '%'), array(' ', "\r\n=2E", "\r\n", '='), rawurlencode($string)); - $string = preg_replace('/[^\r\n]{'.($line_max - 3).'}[^=\r\n]{2}/', "$0=\r\n", $string); - return $string; - } - - /** - * Wrapper to preserve BC for old QP encoding function that was removed - * @see EncodeQP() - * @access public - * @param string $string - * @param integer $line_max - * @param bool $space_conv - * @return string - */ - public function EncodeQPphp($string, $line_max = 76, $space_conv = false) { - return $this->EncodeQP($string, $line_max); - } - - /** - * Encode string to q encoding. - * @link http://tools.ietf.org/html/rfc2047 - * @param string $str the text to encode - * @param string $position Where the text is going to be used, see the RFC for what that means - * @access public - * @return string - */ - public function EncodeQ($str, $position = 'text') { - //There should not be any EOL in the string - $pattern = ''; - $encoded = str_replace(array("\r", "\n"), '', $str); - switch (strtolower($position)) { - case 'phrase': - $pattern = '^A-Za-z0-9!*+\/ -'; - break; - - case 'comment': - $pattern = '\(\)"'; - //note that we don't break here! - //for this reason we build the $pattern without including delimiters and [] - - case 'text': - default: - //Replace every high ascii, control =, ? and _ characters - //We put \075 (=) as first value to make sure it's the first one in being converted, preventing double encode - $pattern = '\075\000-\011\013\014\016-\037\077\137\177-\377' . $pattern; - break; - } - - if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { - foreach (array_unique($matches[0]) as $char) { - $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); - } - } - - //Replace every spaces to _ (more readable than =20) - return str_replace(' ', '_', $encoded); -} - - - /** - * Adds a string or binary attachment (non-filesystem) to the list. - * This method can be used to attach ascii or binary data, - * such as a BLOB record from a database. - * @param string $string String attachment data. - * @param string $filename Name of the attachment. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File extension (MIME) type. - * @return void - */ - public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = '') { - //If a MIME type is not specified, try to work it out from the file name - if ($type == '') { - $type = self::filenameToType($filename); - } - // Append to $attachment array - $this->attachment[] = array( - 0 => $string, - 1 => $filename, - 2 => basename($filename), - 3 => $encoding, - 4 => $type, - 5 => true, // isStringAttachment - 6 => 'attachment', - 7 => 0 - ); - } - - /** - * Add an embedded attachment from a file. - * This can include images, sounds, and just about any other document type. - * @param string $path Path to the attachment. - * @param string $cid Content ID of the attachment; Use this to reference - * the content when using an embedded image in HTML. - * @param string $name Overrides the attachment name. - * @param string $encoding File encoding (see $Encoding). - * @param string $type File MIME type. - * @return bool True on successfully adding an attachment - */ - public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '') { - if ( !@is_file($path) ) { - $this->SetError($this->Lang('file_access') . $path); - return false; - } - - //If a MIME type is not specified, try to work it out from the file name - if ($type == '') { - $type = self::filenameToType($path); - } - - $filename = basename($path); - if ( $name == '' ) { - $name = $filename; - } - - // Append to $attachment array - $this->attachment[] = array( - 0 => $path, - 1 => $filename, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => false, // isStringAttachment - 6 => 'inline', - 7 => $cid - ); - return true; - } - - - /** - * Add an embedded stringified attachment. - * This can include images, sounds, and just about any other document type. - * Be sure to set the $type to an image type for images: - * JPEG images use 'image/jpeg', GIF uses 'image/gif', PNG uses 'image/png'. - * @param string $string The attachment binary data. - * @param string $cid Content ID of the attachment; Use this to reference - * the content when using an embedded image in HTML. - * @param string $name - * @param string $encoding File encoding (see $Encoding). - * @param string $type MIME type. - * @return bool True on successfully adding an attachment - */ - public function AddStringEmbeddedImage($string, $cid, $name = '', $encoding = 'base64', $type = '') { - //If a MIME type is not specified, try to work it out from the name - if ($type == '') { - $type = self::filenameToType($name); - } - - // Append to $attachment array - $this->attachment[] = array( - 0 => $string, - 1 => $name, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => true, // isStringAttachment - 6 => 'inline', - 7 => $cid - ); - return true; - } - - /** - * Returns true if an inline attachment is present. - * @access public - * @return bool - */ - public function InlineImageExists() { - foreach($this->attachment as $attachment) { - if ($attachment[6] == 'inline') { - return true; - } - } - return false; - } - - /** - * Returns true if an attachment (non-inline) is present. - * @return bool - */ - public function AttachmentExists() { - foreach($this->attachment as $attachment) { - if ($attachment[6] == 'attachment') { - return true; - } - } - return false; - } - - /** - * Does this message have an alternative body set? - * @return bool - */ - public function AlternativeExists() { - return !empty($this->AltBody); - } - - ///////////////////////////////////////////////// - // CLASS METHODS, MESSAGE RESET - ///////////////////////////////////////////////// - - /** - * Clears all recipients assigned in the TO array. Returns void. - * @return void - */ - public function ClearAddresses() { - foreach($this->to as $to) { - unset($this->all_recipients[strtolower($to[0])]); - } - $this->to = array(); - } - - /** - * Clears all recipients assigned in the CC array. Returns void. - * @return void - */ - public function ClearCCs() { - foreach($this->cc as $cc) { - unset($this->all_recipients[strtolower($cc[0])]); - } - $this->cc = array(); - } - - /** - * Clears all recipients assigned in the BCC array. Returns void. - * @return void - */ - public function ClearBCCs() { - foreach($this->bcc as $bcc) { - unset($this->all_recipients[strtolower($bcc[0])]); - } - $this->bcc = array(); - } - - /** - * Clears all recipients assigned in the ReplyTo array. Returns void. - * @return void - */ - public function ClearReplyTos() { - $this->ReplyTo = array(); - } - - /** - * Clears all recipients assigned in the TO, CC and BCC - * array. Returns void. - * @return void - */ - public function ClearAllRecipients() { - $this->to = array(); - $this->cc = array(); - $this->bcc = array(); - $this->all_recipients = array(); - } - - /** - * Clears all previously set filesystem, string, and binary - * attachments. Returns void. - * @return void - */ - public function ClearAttachments() { - $this->attachment = array(); - } - - /** - * Clears all custom headers. Returns void. - * @return void - */ - public function ClearCustomHeaders() { - $this->CustomHeader = array(); - } - - ///////////////////////////////////////////////// - // CLASS METHODS, MISCELLANEOUS - ///////////////////////////////////////////////// - - /** - * Adds the error message to the error container. - * @access protected - * @param string $msg - * @return void - */ - protected function SetError($msg) { - $this->error_count++; - if ($this->Mailer == 'smtp' and !is_null($this->smtp)) { - $lasterror = $this->smtp->getError(); - if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) { - $msg .= '

' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "

\n"; - } - } - $this->ErrorInfo = $msg; - } - - /** - * Returns the proper RFC 822 formatted date. - * @access public - * @return string - * @static - */ - public static function RFCDate() { - //Set the time zone to whatever the default is to avoid 500 errors - //Will default to UTC if it's not set properly in php.ini - date_default_timezone_set(@date_default_timezone_get()); - return date('D, j M Y H:i:s O'); - } - - /** - * Returns the server hostname or 'localhost.localdomain' if unknown. - * @access protected - * @return string - */ - protected function ServerHostname() { - if (!empty($this->Hostname)) { - $result = $this->Hostname; - } elseif (isset($_SERVER['SERVER_NAME'])) { - $result = $_SERVER['SERVER_NAME']; - } else { - $result = 'localhost.localdomain'; - } - - return $result; - } - - /** - * Returns a message in the appropriate language. - * @access protected - * @param string $key - * @return string - */ - protected function Lang($key) { - if(count($this->language) < 1) { - $this->SetLanguage('en'); // set the default language - } - - if(isset($this->language[$key])) { - return $this->language[$key]; - } else { - return 'Language string failed to load: ' . $key; - } - } - - /** - * Returns true if an error occurred. - * @access public - * @return bool - */ - public function IsError() { - return ($this->error_count > 0); - } - - /** - * Changes every end of line from CRLF, CR or LF to $this->LE. - * @access public - * @param string $str String to FixEOL - * @return string - */ - public function FixEOL($str) { - // condense down to \n - $nstr = str_replace(array("\r\n", "\r"), "\n", $str); - // Now convert LE as needed - if ($this->LE !== "\n") { - $nstr = str_replace("\n", $this->LE, $nstr); - } - return $nstr; - } - - /** - * Adds a custom header. $name value can be overloaded to contain - * both header name and value (name:value) - * @access public - * @param string $name custom header name - * @param string $value header value - * @return void - */ - public function AddCustomHeader($name, $value=null) { - if ($value === null) { - // Value passed in as name:value - $this->CustomHeader[] = explode(':', $name, 2); - } else { - $this->CustomHeader[] = array($name, $value); - } - } - - /** - * Creates a message from an HTML string, making modifications for inline images and backgrounds - * and creates a plain-text version by converting the HTML - * Overwrites any existing values in $this->Body and $this->AltBody - * @access public - * @param string $message HTML message string - * @param string $basedir baseline directory for path - * @param bool $advanced Whether to use the advanced HTML to text converter - * @return string $message - */ - public function MsgHTML($message, $basedir = '', $advanced = false) { - preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images); - if (isset($images[2])) { - foreach ($images[2] as $i => $url) { - // do not change urls for absolute images (thanks to corvuscorax) - if (!preg_match('#^[A-z]+://#', $url)) { - $filename = basename($url); - $directory = dirname($url); - if ($directory == '.') { - $directory = ''; - } - $cid = md5($url).'@phpmailer.0'; //RFC2392 S 2 - if (strlen($basedir) > 1 && substr($basedir, -1) != '/') { - $basedir .= '/'; - } - if (strlen($directory) > 1 && substr($directory, -1) != '/') { - $directory .= '/'; - } - if ($this->AddEmbeddedImage($basedir.$directory.$filename, $cid, $filename, 'base64', self::_mime_types(self::mb_pathinfo($filename, PATHINFO_EXTENSION)))) { - $message = preg_replace("/".$images[1][$i]."=[\"']".preg_quote($url, '/')."[\"']/Ui", $images[1][$i]."=\"cid:".$cid."\"", $message); - } - } - } - } - $this->IsHTML(true); - if (empty($this->AltBody)) { - $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; - } - //Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better - $this->Body = $this->NormalizeBreaks($message); - $this->AltBody = $this->NormalizeBreaks($this->html2text($message, $advanced)); - return $this->Body; - } - - /** - * Convert an HTML string into a plain text version - * @param string $html The HTML text to convert - * @param bool $advanced Should this use the more complex html2text converter or just a simple one? - * @return string - */ - public function html2text($html, $advanced = false) { - if ($advanced) { - require_once 'extras/class.html2text.php'; - $h = new html2text($html); - return $h->get_text(); - } - return html_entity_decode(trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))), ENT_QUOTES, $this->CharSet); - } - - /** - * Gets the MIME type of the embedded or inline image - * @param string $ext File extension - * @access public - * @return string MIME type of ext - * @static - */ - public static function _mime_types($ext = '') { - $mimes = array( - 'xl' => 'application/excel', - 'hqx' => 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'bin' => 'application/macbinary', - 'doc' => 'application/msword', - 'word' => 'application/msword', - 'class' => 'application/octet-stream', - 'dll' => 'application/octet-stream', - 'dms' => 'application/octet-stream', - 'exe' => 'application/octet-stream', - 'lha' => 'application/octet-stream', - 'lzh' => 'application/octet-stream', - 'psd' => 'application/octet-stream', - 'sea' => 'application/octet-stream', - 'so' => 'application/octet-stream', - 'oda' => 'application/oda', - 'pdf' => 'application/pdf', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'mif' => 'application/vnd.mif', - 'xls' => 'application/vnd.ms-excel', - 'ppt' => 'application/vnd.ms-powerpoint', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'dcr' => 'application/x-director', - 'dir' => 'application/x-director', - 'dxr' => 'application/x-director', - 'dvi' => 'application/x-dvi', - 'gtar' => 'application/x-gtar', - 'php3' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'php' => 'application/x-httpd-php', - 'phtml' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', - 'js' => 'application/x-javascript', - 'swf' => 'application/x-shockwave-flash', - 'sit' => 'application/x-stuffit', - 'tar' => 'application/x-tar', - 'tgz' => 'application/x-tar', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'zip' => 'application/zip', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mp2' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'mpga' => 'audio/mpeg', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'ram' => 'audio/x-pn-realaudio', - 'rm' => 'audio/x-pn-realaudio', - 'rpm' => 'audio/x-pn-realaudio-plugin', - 'ra' => 'audio/x-realaudio', - 'wav' => 'audio/x-wav', - 'bmp' => 'image/bmp', - 'gif' => 'image/gif', - 'jpeg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'png' => 'image/png', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'eml' => 'message/rfc822', - 'css' => 'text/css', - 'html' => 'text/html', - 'htm' => 'text/html', - 'shtml' => 'text/html', - 'log' => 'text/plain', - 'text' => 'text/plain', - 'txt' => 'text/plain', - 'rtx' => 'text/richtext', - 'rtf' => 'text/rtf', - 'xml' => 'text/xml', - 'xsl' => 'text/xml', - 'mpeg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mov' => 'video/quicktime', - 'qt' => 'video/quicktime', - 'rv' => 'video/vnd.rn-realvideo', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie' - ); - return (!isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; - } - - /** - * Try to map a file name to a MIME type, default to application/octet-stream - * @param string $filename A file name or full path, does not need to exist as a file - * @return string - * @static - */ - public static function filenameToType($filename) { - //In case the path is a URL, strip any query string before getting extension - $qpos = strpos($filename, '?'); - if ($qpos !== false) { - $filename = substr($filename, 0, $qpos); - } - $pathinfo = self::mb_pathinfo($filename); - return self::_mime_types($pathinfo['extension']); - } - - /** - * Drop-in replacement for pathinfo(), but multibyte-safe, cross-platform-safe, old-version-safe. - * Works similarly to the one in PHP >= 5.2.0 - * @link http://www.php.net/manual/en/function.pathinfo.php#107461 - * @param string $path A filename or path, does not need to exist as a file - * @param integer|string $options Either a PATHINFO_* constant, or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2 - * @return string|array - * @static - */ - public static function mb_pathinfo($path, $options = null) { - $ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => ''); - $m = array(); - preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $m); - if(array_key_exists(1, $m)) { - $ret['dirname'] = $m[1]; - } - if(array_key_exists(2, $m)) { - $ret['basename'] = $m[2]; - } - if(array_key_exists(5, $m)) { - $ret['extension'] = $m[5]; - } - if(array_key_exists(3, $m)) { - $ret['filename'] = $m[3]; - } - switch($options) { - case PATHINFO_DIRNAME: - case 'dirname': - return $ret['dirname']; - break; - case PATHINFO_BASENAME: - case 'basename': - return $ret['basename']; - break; - case PATHINFO_EXTENSION: - case 'extension': - return $ret['extension']; - break; - case PATHINFO_FILENAME: - case 'filename': - return $ret['filename']; - break; - default: - return $ret; - } - } - - /** - * Set (or reset) Class Objects (variables) - * - * Usage Example: - * $page->set('X-Priority', '3'); - * - * @access public - * @param string $name - * @param mixed $value - * NOTE: will not work with arrays, there are no arrays to set/reset - * @throws phpmailerException - * @return bool - * @todo Should this not be using __set() magic function? - */ - public function set($name, $value = '') { - try { - if (isset($this->$name) ) { - $this->$name = $value; - } else { - throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL); - } - } catch (Exception $e) { - $this->SetError($e->getMessage()); - if ($e->getCode() == self::STOP_CRITICAL) { - return false; - } - } - return true; - } - - /** - * Strips newlines to prevent header injection. - * @access public - * @param string $str - * @return string - */ - public function SecureHeader($str) { - return trim(str_replace(array("\r", "\n"), '', $str)); - } - - /** - * Normalize UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format - * Defaults to CRLF (for message bodies) and preserves consecutive breaks - * @param string $text - * @param string $breaktype What kind of line break to use, defaults to CRLF - * @return string - * @access public - * @static - */ - public static function NormalizeBreaks($text, $breaktype = "\r\n") { - return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text); - } - - - /** - * Set the private key file and password to sign the message. - * - * @access public - * @param string $cert_filename - * @param string $key_filename - * @param string $key_pass Password for private key - */ - public function Sign($cert_filename, $key_filename, $key_pass) { - $this->sign_cert_file = $cert_filename; - $this->sign_key_file = $key_filename; - $this->sign_key_pass = $key_pass; - } - - /** - * Set the private key file and password to sign the message. - * - * @access public - * @param string $txt - * @return string - */ - public function DKIM_QP($txt) { - $line = ''; - for ($i = 0; $i < strlen($txt); $i++) { - $ord = ord($txt[$i]); - if ( ((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E)) ) { - $line .= $txt[$i]; - } else { - $line .= "=".sprintf("%02X", $ord); - } - } - return $line; - } - - /** - * Generate DKIM signature - * - * @access public - * @param string $s Header - * @throws phpmailerException - * @return string - */ - public function DKIM_Sign($s) { - if (!defined('PKCS7_TEXT')) { - if ($this->exceptions) { - throw new phpmailerException($this->Lang("signing").' OpenSSL extension missing.'); - } - return ''; - } - $privKeyStr = file_get_contents($this->DKIM_private); - if ($this->DKIM_passphrase != '') { - $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); - } else { - $privKey = $privKeyStr; - } - if (openssl_sign($s, $signature, $privKey)) { - return base64_encode($signature); - } - return ''; - } - - /** - * Generate DKIM Canonicalization Header - * - * @access public - * @param string $s Header - * @return string - */ - public function DKIM_HeaderC($s) { - $s = preg_replace("/\r\n\s+/", " ", $s); - $lines = explode("\r\n", $s); - foreach ($lines as $key => $line) { - list($heading, $value) = explode(":", $line, 2); - $heading = strtolower($heading); - $value = preg_replace("/\s+/", " ", $value) ; // Compress useless spaces - $lines[$key] = $heading.":".trim($value) ; // Don't forget to remove WSP around the value - } - $s = implode("\r\n", $lines); - return $s; - } - - /** - * Generate DKIM Canonicalization Body - * - * @access public - * @param string $body Message Body - * @return string - */ - public function DKIM_BodyC($body) { - if ($body == '') return "\r\n"; - // stabilize line endings - $body = str_replace("\r\n", "\n", $body); - $body = str_replace("\n", "\r\n", $body); - // END stabilize line endings - while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") { - $body = substr($body, 0, strlen($body) - 2); - } - return $body; - } - - /** - * Create the DKIM header, body, as new header - * - * @access public - * @param string $headers_line Header lines - * @param string $subject Subject - * @param string $body Body - * @return string - */ - public function DKIM_Add($headers_line, $subject, $body) { - $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms - $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body - $DKIMquery = 'dns/txt'; // Query method - $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) - $subject_header = "Subject: $subject"; - $headers = explode($this->LE, $headers_line); - $from_header = ''; - $to_header = ''; - $current = ''; - foreach($headers as $header) { - if (strpos($header, 'From:') === 0) { - $from_header = $header; - $current = 'from_header'; - } elseif (strpos($header, 'To:') === 0) { - $to_header = $header; - $current = 'to_header'; - } else { - if($current && strpos($header, ' =?') === 0){ - $current .= $header; - } else { - $current = ''; - } - } - } - $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); - $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); - $subject = str_replace('|', '=7C', $this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable - $body = $this->DKIM_BodyC($body); - $DKIMlen = strlen($body) ; // Length of body - $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body - $ident = ($this->DKIM_identity == '')? '' : " i=" . $this->DKIM_identity . ";"; - $dkimhdrs = "DKIM-Signature: v=1; a=" . $DKIMsignatureType . "; q=" . $DKIMquery . "; l=" . $DKIMlen . "; s=" . $this->DKIM_selector . ";\r\n". - "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n". - "\th=From:To:Subject;\r\n". - "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n". - "\tz=$from\r\n". - "\t|$to\r\n". - "\t|$subject;\r\n". - "\tbh=" . $DKIMb64 . ";\r\n". - "\tb="; - $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs); - $signed = $this->DKIM_Sign($toSign); - return $dkimhdrs.$signed."\r\n"; - } - - /** - * Perform callback - * @param boolean $isSent - * @param string $to - * @param string $cc - * @param string $bcc - * @param string $subject - * @param string $body - * @param string $from - */ - protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from = null) { - if (!empty($this->action_function) && is_callable($this->action_function)) { - $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from); - call_user_func_array($this->action_function, $params); - } - } -} - -/** - * Exception handler for PHPMailer - * @package PHPMailer - */ -class phpmailerException extends Exception { - /** - * Prettify error message output - * @return string - */ - public function errorMessage() { - $errorMsg = '' . $this->getMessage() . "
\n"; - return $errorMsg; - } -} diff --git a/vendor/PHPMailer/class.smtp.php b/vendor/PHPMailer/class.smtp.php deleted file mode 100644 index 4b02f999..00000000 --- a/vendor/PHPMailer/class.smtp.php +++ /dev/null @@ -1,1092 +0,0 @@ -Debugoutput) { - case 'error_log': - error_log($str); - break; - case 'html': - //Cleans up output a bit for a better looking display that's HTML-safe - echo htmlentities(preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, 'UTF-8')."
\n"; - break; - case 'echo': - default: - //Just echoes exactly what was received - echo $str; - } - } - - /** - * Initialize the class so that the data is in a known state. - * @access public - * @return SMTP - */ - public function __construct() { - $this->smtp_conn = 0; - $this->error = null; - $this->helo_rply = null; - - $this->do_debug = 0; - } - - ///////////////////////////////////////////////// - // CONNECTION FUNCTIONS - ///////////////////////////////////////////////// - - /** - * Connect to an SMTP server - * - * SMTP CODE SUCCESS: 220 - * SMTP CODE FAILURE: 421 - * @access public - * @param string $host SMTP server IP or host name - * @param int $port The port number to connect to, or use the default port if not specified - * @param int $timeout How long to wait for the connection to open - * @param array $options An array of options compatible with stream_context_create() - * @return bool - */ - public function Connect($host, $port = 0, $timeout = 30, $options = array()) { - // Clear errors to avoid confusion - $this->error = null; - - // Make sure we are __not__ connected - if($this->connected()) { - // Already connected, generate error - $this->error = array('error' => 'Already connected to a server'); - return false; - } - - if(empty($port)) { - $port = $this->SMTP_PORT; - } - - // Connect to the SMTP server - $errno = 0; - $errstr = ''; - $socket_context = stream_context_create($options); - //Need to suppress errors here as connection failures can be handled at a higher level - $this->smtp_conn = @stream_socket_client($host.":".$port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context); - - // Verify we connected properly - if(empty($this->smtp_conn)) { - $this->error = array('error' => 'Failed to connect to server', - 'errno' => $errno, - 'errstr' => $errstr); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ": $errstr ($errno)"); - } - return false; - } - - // SMTP server can take longer to respond, give longer timeout for first read - // Windows does not have support for this timeout function - if(substr(PHP_OS, 0, 3) != 'WIN') { - $max = ini_get('max_execution_time'); - if ($max != 0 && $timeout > $max) { // Don't bother if unlimited - @set_time_limit($timeout); - } - stream_set_timeout($this->smtp_conn, $timeout, 0); - } - - // get any announcement - $announce = $this->get_lines(); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $announce); - } - - return true; - } - - /** - * Initiate a TLS communication with the server. - * - * SMTP CODE 220 Ready to start TLS - * SMTP CODE 501 Syntax error (no parameters allowed) - * SMTP CODE 454 TLS not available due to temporary reason - * @access public - * @return bool success - */ - public function StartTLS() { - $this->error = null; # to avoid confusion - - if(!$this->connected()) { - $this->error = array('error' => 'Called StartTLS() without being connected'); - return false; - } - - $this->client_send('STARTTLS' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 220) { - $this->error = - array('error' => 'STARTTLS not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - // Begin encrypted connection - if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { - return false; - } - - return true; - } - - /** - * Performs SMTP authentication. Must be run after running the - * Hello() method. Returns true if successfully authenticated. - * @access public - * @param string $username - * @param string $password - * @param string $authtype - * @param string $realm - * @param string $workstation - * @return bool - */ - public function Authenticate($username, $password, $authtype='LOGIN', $realm='', $workstation='') { - if (empty($authtype)) { - $authtype = 'LOGIN'; - } - - switch ($authtype) { - case 'PLAIN': - // Start authentication - $this->client_send('AUTH PLAIN' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 334) { - $this->error = - array('error' => 'AUTH not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - // Send encoded username and password - $this->client_send(base64_encode("\0".$username."\0".$password) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 235) { - $this->error = - array('error' => 'Authentication not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - break; - case 'LOGIN': - // Start authentication - $this->client_send('AUTH LOGIN' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 334) { - $this->error = - array('error' => 'AUTH not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - // Send encoded username - $this->client_send(base64_encode($username) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 334) { - $this->error = - array('error' => 'Username not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - // Send encoded password - $this->client_send(base64_encode($password) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 235) { - $this->error = - array('error' => 'Password not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - break; - case 'NTLM': - /* - * ntlm_sasl_client.php - ** Bundled with Permission - ** - ** How to telnet in windows: http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx - ** PROTOCOL Documentation http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication - */ - require_once 'extras/ntlm_sasl_client.php'; - $temp = new stdClass(); - $ntlm_client = new ntlm_sasl_client_class; - if(! $ntlm_client->Initialize($temp)){//let's test if every function its available - $this->error = array('error' => $temp->error); - if($this->do_debug >= 1) { - $this->edebug('You need to enable some modules in your php.ini file: ' . $this->error['error']); - } - return false; - } - $msg1 = $ntlm_client->TypeMsg1($realm, $workstation);//msg1 - - $this->client_send('AUTH NTLM ' . base64_encode($msg1) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 334) { - $this->error = - array('error' => 'AUTH not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - $challenge = substr($rply, 3);//though 0 based, there is a white space after the 3 digit number....//msg2 - $challenge = base64_decode($challenge); - $ntlm_res = $ntlm_client->NTLMResponse(substr($challenge, 24, 8), $password); - $msg3 = $ntlm_client->TypeMsg3($ntlm_res, $username, $realm, $workstation);//msg3 - // Send encoded username - $this->client_send(base64_encode($msg3) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 235) { - $this->error = - array('error' => 'Could not authenticate', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - break; - case 'CRAM-MD5': - // Start authentication - $this->client_send('AUTH CRAM-MD5' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 334) { - $this->error = - array('error' => 'AUTH not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - // Get the challenge - $challenge = base64_decode(substr($rply, 4)); - - // Build the response - $response = $username . ' ' . $this->hmac($challenge, $password); - - // Send encoded credentials - $this->client_send(base64_encode($response) . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($code != 235) { - $this->error = - array('error' => 'Credentials not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - break; - } - return true; - } - - /** - * Works like hash_hmac('md5', $data, $key) in case that function is not available - * @access protected - * @param string $data - * @param string $key - * @return string - */ - protected function hmac($data, $key) { - if (function_exists('hash_hmac')) { - return hash_hmac('md5', $data, $key); - } - - // The following borrowed from http://php.net/manual/en/function.mhash.php#27225 - - // RFC 2104 HMAC implementation for php. - // Creates an md5 HMAC. - // Eliminates the need to install mhash to compute a HMAC - // Hacked by Lance Rushing - - $b = 64; // byte length for md5 - if (strlen($key) > $b) { - $key = pack('H*', md5($key)); - } - $key = str_pad($key, $b, chr(0x00)); - $ipad = str_pad('', $b, chr(0x36)); - $opad = str_pad('', $b, chr(0x5c)); - $k_ipad = $key ^ $ipad ; - $k_opad = $key ^ $opad; - - return md5($k_opad . pack('H*', md5($k_ipad . $data))); - } - - /** - * Returns true if connected to a server otherwise false - * @access public - * @return bool - */ - public function Connected() { - if(!empty($this->smtp_conn)) { - $sock_status = stream_get_meta_data($this->smtp_conn); - if($sock_status['eof']) { - // the socket is valid but we are not connected - if($this->do_debug >= 1) { - $this->edebug('SMTP -> NOTICE: EOF caught while checking if connected'); - } - $this->Close(); - return false; - } - return true; // everything looks good - } - return false; - } - - /** - * Closes the socket and cleans up the state of the class. - * It is not considered good to use this function without - * first trying to use QUIT. - * @access public - * @return void - */ - public function Close() { - $this->error = null; // so there is no confusion - $this->helo_rply = null; - if(!empty($this->smtp_conn)) { - // close the connection and cleanup - fclose($this->smtp_conn); - $this->smtp_conn = 0; - } - } - - ///////////////////////////////////////////////// - // SMTP COMMANDS - ///////////////////////////////////////////////// - - /** - * Issues a data command and sends the msg_data to the server - * finializing the mail transaction. $msg_data is the message - * that is to be send with the headers. Each header needs to be - * on a single line followed by a with the message headers - * and the message body being separated by and additional . - * - * Implements rfc 821: DATA - * - * SMTP CODE INTERMEDIATE: 354 - * [data] - * . - * SMTP CODE SUCCESS: 250 - * SMTP CODE FAILURE: 552, 554, 451, 452 - * SMTP CODE FAILURE: 451, 554 - * SMTP CODE ERROR : 500, 501, 503, 421 - * @access public - * @param string $msg_data - * @return bool - */ - public function Data($msg_data) { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called Data() without being connected'); - return false; - } - - $this->client_send('DATA' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 354) { - $this->error = - array('error' => 'DATA command not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - /* the server is ready to accept data! - * according to rfc 821 we should not send more than 1000 - * including the CRLF - * characters on a single line so we will break the data up - * into lines by \r and/or \n then if needed we will break - * each of those into smaller lines to fit within the limit. - * in addition we will be looking for lines that start with - * a period '.' and append and additional period '.' to that - * line. NOTE: this does not count towards limit. - */ - - // normalize the line breaks so we know the explode works - $msg_data = str_replace("\r\n", "\n", $msg_data); - $msg_data = str_replace("\r", "\n", $msg_data); - $lines = explode("\n", $msg_data); - - /* we need to find a good way to determine is headers are - * in the msg_data or if it is a straight msg body - * currently I am assuming rfc 822 definitions of msg headers - * and if the first field of the first line (':' sperated) - * does not contain a space then it _should_ be a header - * and we can process all lines before a blank "" line as - * headers. - */ - - $field = substr($lines[0], 0, strpos($lines[0], ':')); - $in_headers = false; - if(!empty($field) && !strstr($field, ' ')) { - $in_headers = true; - } - - $max_line_length = 998; // used below; set here for ease in change - - while(list(, $line) = @each($lines)) { - $lines_out = null; - if($line == '' && $in_headers) { - $in_headers = false; - } - // ok we need to break this line up into several smaller lines - while(strlen($line) > $max_line_length) { - $pos = strrpos(substr($line, 0, $max_line_length), ' '); - - // Patch to fix DOS attack - if(!$pos) { - $pos = $max_line_length - 1; - $lines_out[] = substr($line, 0, $pos); - $line = substr($line, $pos); - } else { - $lines_out[] = substr($line, 0, $pos); - $line = substr($line, $pos + 1); - } - - /* if processing headers add a LWSP-char to the front of new line - * rfc 822 on long msg headers - */ - if($in_headers) { - $line = "\t" . $line; - } - } - $lines_out[] = $line; - - // send the lines to the server - while(list(, $line_out) = @each($lines_out)) { - if(strlen($line_out) > 0) - { - if(substr($line_out, 0, 1) == '.') { - $line_out = '.' . $line_out; - } - } - $this->client_send($line_out . $this->CRLF); - } - } - - // message data has been sent - $this->client_send($this->CRLF . '.' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 250) { - $this->error = - array('error' => 'DATA not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - return true; - } - - /** - * Sends the HELO command to the smtp server. - * This makes sure that we and the server are in - * the same known state. - * - * Implements from rfc 821: HELO - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE ERROR : 500, 501, 504, 421 - * @access public - * @param string $host - * @return bool - */ - public function Hello($host = '') { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called Hello() without being connected'); - return false; - } - - // if hostname for HELO was not specified send default - if(empty($host)) { - // determine appropriate default to send to server - $host = 'localhost'; - } - - // Send extended hello first (RFC 2821) - if(!$this->SendHello('EHLO', $host)) { - if(!$this->SendHello('HELO', $host)) { - return false; - } - } - - return true; - } - - /** - * Sends a HELO/EHLO command. - * @access protected - * @param string $hello - * @param string $host - * @return bool - */ - protected function SendHello($hello, $host) { - $this->client_send($hello . ' ' . $host . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER: ' . $rply); - } - - if($code != 250) { - $this->error = - array('error' => $hello . ' not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - $this->helo_rply = $rply; - - return true; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. - * - * Implements rfc 821: MAIL FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552, 451, 452 - * SMTP CODE SUCCESS: 500, 501, 421 - * @access public - * @param string $from - * @return bool - */ - public function Mail($from) { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called Mail() without being connected'); - return false; - } - - $useVerp = ($this->do_verp ? ' XVERP' : ''); - $this->client_send('MAIL FROM:<' . $from . '>' . $useVerp . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 250) { - $this->error = - array('error' => 'MAIL not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - return true; - } - - /** - * Sends the quit command to the server and then closes the socket - * if there is no error or the $close_on_error argument is true. - * - * Implements from rfc 821: QUIT - * - * SMTP CODE SUCCESS: 221 - * SMTP CODE ERROR : 500 - * @access public - * @param bool $close_on_error - * @return bool - */ - public function Quit($close_on_error = true) { - $this->error = null; // so there is no confusion - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called Quit() without being connected'); - return false; - } - - // send the quit command to the server - $this->client_send('quit' . $this->CRLF); - - // get any good-bye messages - $byemsg = $this->get_lines(); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $byemsg); - } - - $rval = true; - $e = null; - - $code = substr($byemsg, 0, 3); - if($code != 221) { - // use e as a tmp var cause Close will overwrite $this->error - $e = array('error' => 'SMTP server rejected quit command', - 'smtp_code' => $code, - 'smtp_rply' => substr($byemsg, 4)); - $rval = false; - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $e['error'] . ': ' . $byemsg); - } - } - - if(empty($e) || $close_on_error) { - $this->Close(); - } - - return $rval; - } - - /** - * Sends the command RCPT to the SMTP server with the TO: argument of $to. - * Returns true if the recipient was accepted false if it was rejected. - * - * Implements from rfc 821: RCPT TO: - * - * SMTP CODE SUCCESS: 250, 251 - * SMTP CODE FAILURE: 550, 551, 552, 553, 450, 451, 452 - * SMTP CODE ERROR : 500, 501, 503, 421 - * @access public - * @param string $to - * @return bool - */ - public function Recipient($to) { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called Recipient() without being connected'); - return false; - } - - $this->client_send('RCPT TO:<' . $to . '>' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 250 && $code != 251) { - $this->error = - array('error' => 'RCPT not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - return true; - } - - /** - * Sends the RSET command to abort and transaction that is - * currently in progress. Returns true if successful false - * otherwise. - * - * Implements rfc 821: RSET - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE ERROR : 500, 501, 504, 421 - * @access public - * @return bool - */ - public function Reset() { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array('error' => 'Called Reset() without being connected'); - return false; - } - - $this->client_send('RSET' . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 250) { - $this->error = - array('error' => 'RSET failed', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - - return true; - } - - /** - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more Recipient - * commands may be called followed by a Data command. This command - * will send the message to the users terminal if they are logged - * in and send them an email. - * - * Implements rfc 821: SAML FROM: - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE SUCCESS: 552, 451, 452 - * SMTP CODE SUCCESS: 500, 501, 502, 421 - * @access public - * @param string $from - * @return bool - */ - public function SendAndMail($from) { - $this->error = null; // so no confusion is caused - - if(!$this->connected()) { - $this->error = array( - 'error' => 'Called SendAndMail() without being connected'); - return false; - } - - $this->client_send('SAML FROM:' . $from . $this->CRLF); - - $rply = $this->get_lines(); - $code = substr($rply, 0, 3); - - if($this->do_debug >= 2) { - $this->edebug('SMTP -> FROM SERVER:' . $rply); - } - - if($code != 250) { - $this->error = - array('error' => 'SAML not accepted from server', - 'smtp_code' => $code, - 'smtp_msg' => substr($rply, 4)); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> ERROR: ' . $this->error['error'] . ': ' . $rply); - } - return false; - } - return true; - } - - /** - * This is an optional command for SMTP that this class does not - * support. This method is here to make the RFC821 Definition - * complete for this class and __may__ be implimented in the future - * - * Implements from rfc 821: TURN - * - * SMTP CODE SUCCESS: 250 - * SMTP CODE FAILURE: 502 - * SMTP CODE ERROR : 500, 503 - * @access public - * @return bool - */ - public function Turn() { - $this->error = array('error' => 'This method, TURN, of the SMTP '. - 'is not implemented'); - if($this->do_debug >= 1) { - $this->edebug('SMTP -> NOTICE: ' . $this->error['error']); - } - return false; - } - - /** - * Sends data to the server - * @param string $data - * @access public - * @return Integer number of bytes sent to the server or FALSE on error - */ - public function client_send($data) { - if ($this->do_debug >= 1) { - $this->edebug("CLIENT -> SMTP: $data"); - } - return fwrite($this->smtp_conn, $data); - } - - /** - * Get the current error - * @access public - * @return array - */ - public function getError() { - return $this->error; - } - - ///////////////////////////////////////////////// - // INTERNAL FUNCTIONS - ///////////////////////////////////////////////// - - /** - * Read in as many lines as possible - * either before eof or socket timeout occurs on the operation. - * With SMTP we can tell if we have more lines to read if the - * 4th character is '-' symbol. If it is a space then we don't - * need to read anything else. - * @access protected - * @return string - */ - protected function get_lines() { - $data = ''; - $endtime = 0; - /* If for some reason the fp is bad, don't inf loop */ - if (!is_resource($this->smtp_conn)) { - return $data; - } - stream_set_timeout($this->smtp_conn, $this->Timeout); - if ($this->Timelimit > 0) { - $endtime = time() + $this->Timelimit; - } - while(is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { - $str = @fgets($this->smtp_conn, 515); - if($this->do_debug >= 4) { - $this->edebug("SMTP -> get_lines(): \$data was \"$data\""); - $this->edebug("SMTP -> get_lines(): \$str is \"$str\""); - } - $data .= $str; - if($this->do_debug >= 4) { - $this->edebug("SMTP -> get_lines(): \$data is \"$data\""); - } - // if 4th character is a space, we are done reading, break the loop - if(substr($str, 3, 1) == ' ') { break; } - // Timed-out? Log and break - $info = stream_get_meta_data($this->smtp_conn); - if ($info['timed_out']) { - if($this->do_debug >= 4) { - $this->edebug('SMTP -> get_lines(): timed-out (' . $this->Timeout . ' seconds)'); - } - break; - } - // Now check if reads took too long - if ($endtime) { - if (time() > $endtime) { - if($this->do_debug >= 4) { - $this->edebug('SMTP -> get_lines(): timelimit reached (' . $this->Timelimit . ' seconds)'); - } - break; - } - } - } - return $data; - } - -}