From b437ae798e13755104447e08edc400e5ffd5b621 Mon Sep 17 00:00:00 2001 From: Ferhan ISMAILOV Date: Mon, 7 Jan 2019 14:52:45 +0200 Subject: [PATCH 01/23] Composer integration and added use of new mailjet API and iFrame wrappers. Fixed sync issues --- composer.json | 19 +- composer.lock | 478 ++ composer.phar | Bin 0 -> 1874999 bytes lib/mailjet-api-php/src/MailjetApi.php | 330 ++ mailjet.module | 702 +-- .../src/Form/SubscriptionSignupPageForm.php | 62 +- src/Form/DomainSettingsForm.php | 10 +- src/Form/MailjetApiForm.php | 87 +- src/Form/MailjetSettingsForm.php | 10 +- src/Form/SubsribeEmailForm.php | 26 +- vendor/autoload.php | 7 + vendor/composer/ClassLoader.php | 445 ++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 17 + vendor/composer/autoload_files.php | 13 + vendor/composer/autoload_namespaces.php | 10 + vendor/composer/autoload_psr4.php | 15 + vendor/composer/autoload_real.php | 70 + vendor/composer/autoload_static.php | 92 + vendor/composer/installed.json | 475 ++ vendor/guzzlehttp/guzzle | 1 + vendor/guzzlehttp/promises | 1 + vendor/guzzlehttp/psr7 | 1 + vendor/mailjet/Mailjet-iframe-v3 | 1 + vendor/mailjet/mailjet-apiv3-php | 1 + vendor/phpmailer/phpmailer/LICENSE | 502 ++ .../phpmailer/phpmailer/PHPMailerAutoload.php | 49 + vendor/phpmailer/phpmailer/VERSION | 1 + .../phpmailer/phpmailer/class.phpmailer.php | 4061 +++++++++++++++++ .../phpmailer/class.phpmaileroauth.php | 197 + .../phpmailer/class.phpmaileroauthgoogle.php | 77 + vendor/phpmailer/phpmailer/class.pop3.php | 407 ++ vendor/phpmailer/phpmailer/class.smtp.php | 1276 ++++++ vendor/phpmailer/phpmailer/composer.json | 61 + vendor/phpmailer/phpmailer/composer.lock | 3593 +++++++++++++++ vendor/phpmailer/phpmailer/examples/DKIM.phps | 38 + .../phpmailer/examples/code_generator.phps | 604 +++ .../phpmailer/examples/contactform.phps | 71 + .../phpmailer/examples/contents.html | 17 + .../phpmailer/examples/contentsutf8.html | 21 + .../phpmailer/examples/exceptions.phps | 35 + .../phpmailer/phpmailer/examples/gmail.phps | 99 + .../phpmailer/examples/gmail_xoauth.phps | 85 + .../phpmailer/examples/images/phpmailer.png | Bin 0 -> 5831 bytes .../examples/images/phpmailer_mini.png | Bin 0 -> 1842 bytes .../phpmailer/phpmailer/examples/index.html | 48 + vendor/phpmailer/phpmailer/examples/mail.phps | 31 + .../phpmailer/examples/mailing_list.phps | 59 + .../phpmailer/examples/pop_before_smtp.phps | 54 + .../phpmailer/examples/scripts/XRegExp.js | 664 +++ .../examples/scripts/shAutoloader.js | 122 + .../phpmailer/examples/scripts/shBrushPhp.js | 72 + .../phpmailer/examples/scripts/shCore.js | 1 + .../phpmailer/examples/scripts/shLegacy.js | 140 + .../phpmailer/examples/send_file_upload.phps | 49 + .../examples/send_multiple_file_upload.phps | 51 + .../phpmailer/examples/sendmail.phps | 33 + .../phpmailer/examples/signed-mail.phps | 89 + vendor/phpmailer/phpmailer/examples/smtp.phps | 54 + .../phpmailer/examples/smtp_check.phps | 55 + .../phpmailer/examples/smtp_no_auth.phps | 50 + .../phpmailer/examples/ssl_options.phps | 74 + .../phpmailer/examples/styles/shCore.css | 46 + .../examples/styles/shCoreDefault.css | 77 + .../examples/styles/shCoreDjango.css | 78 + .../examples/styles/shCoreEclipse.css | 80 + .../phpmailer/examples/styles/shCoreEmacs.css | 76 + .../examples/styles/shCoreFadeToGrey.css | 77 + .../examples/styles/shCoreMDUltra.css | 76 + .../examples/styles/shCoreMidnight.css | 76 + .../phpmailer/examples/styles/shCoreRDark.css | 76 + .../examples/styles/shThemeAppleScript.css | 21 + .../examples/styles/shThemeDefault.css | 31 + .../examples/styles/shThemeDjango.css | 32 + .../examples/styles/shThemeEclipse.css | 34 + .../examples/styles/shThemeEmacs.css | 30 + .../examples/styles/shThemeFadeToGrey.css | 31 + .../examples/styles/shThemeMDUltra.css | 30 + .../examples/styles/shThemeMidnight.css | 30 + .../examples/styles/shThemeRDark.css | 30 + .../examples/styles/shThemeVisualStudio.css | 31 + .../phpmailer/examples/styles/wrapping.png | Bin 0 -> 631 bytes .../phpmailer/extras/EasyPeasyICS.php | 148 + vendor/phpmailer/phpmailer/extras/README.md | 17 + .../phpmailer/phpmailer/extras/htmlfilter.php | 1159 +++++ .../phpmailer/extras/ntlm_sasl_client.php | 185 + .../phpmailer/phpmailer/get_oauth_token.php | 162 + .../phpmailer/language/phpmailer.lang-am.php | 26 + .../phpmailer/language/phpmailer.lang-ar.php | 27 + .../phpmailer/language/phpmailer.lang-az.php | 26 + .../phpmailer/language/phpmailer.lang-ba.php | 26 + .../phpmailer/language/phpmailer.lang-be.php | 26 + .../phpmailer/language/phpmailer.lang-bg.php | 26 + .../phpmailer/language/phpmailer.lang-ca.php | 26 + .../phpmailer/language/phpmailer.lang-ch.php | 26 + .../phpmailer/language/phpmailer.lang-cs.php | 25 + .../phpmailer/language/phpmailer.lang-da.php | 26 + .../phpmailer/language/phpmailer.lang-de.php | 25 + .../phpmailer/language/phpmailer.lang-el.php | 25 + .../phpmailer/language/phpmailer.lang-eo.php | 25 + .../phpmailer/language/phpmailer.lang-es.php | 26 + .../phpmailer/language/phpmailer.lang-et.php | 27 + .../phpmailer/language/phpmailer.lang-fa.php | 27 + .../phpmailer/language/phpmailer.lang-fi.php | 27 + .../phpmailer/language/phpmailer.lang-fo.php | 26 + .../phpmailer/language/phpmailer.lang-fr.php | 29 + .../phpmailer/language/phpmailer.lang-gl.php | 26 + .../phpmailer/language/phpmailer.lang-he.php | 26 + .../phpmailer/language/phpmailer.lang-hr.php | 26 + .../phpmailer/language/phpmailer.lang-hu.php | 26 + .../phpmailer/language/phpmailer.lang-id.php | 26 + .../phpmailer/language/phpmailer.lang-it.php | 27 + .../phpmailer/language/phpmailer.lang-ja.php | 27 + .../phpmailer/language/phpmailer.lang-ka.php | 26 + .../phpmailer/language/phpmailer.lang-ko.php | 26 + .../phpmailer/language/phpmailer.lang-lt.php | 26 + .../phpmailer/language/phpmailer.lang-lv.php | 26 + .../phpmailer/language/phpmailer.lang-ms.php | 26 + .../phpmailer/language/phpmailer.lang-nb.php | 25 + .../phpmailer/language/phpmailer.lang-nl.php | 26 + .../phpmailer/language/phpmailer.lang-pl.php | 26 + .../phpmailer/language/phpmailer.lang-pt.php | 26 + .../language/phpmailer.lang-pt_br.php | 29 + .../phpmailer/language/phpmailer.lang-ro.php | 26 + .../phpmailer/language/phpmailer.lang-rs.php | 26 + .../phpmailer/language/phpmailer.lang-ru.php | 27 + .../phpmailer/language/phpmailer.lang-sk.php | 26 + .../phpmailer/language/phpmailer.lang-sl.php | 26 + .../phpmailer/language/phpmailer.lang-sv.php | 26 + .../phpmailer/language/phpmailer.lang-tr.php | 30 + .../phpmailer/language/phpmailer.lang-uk.php | 27 + .../phpmailer/language/phpmailer.lang-vi.php | 26 + .../phpmailer/language/phpmailer.lang-zh.php | 28 + .../language/phpmailer.lang-zh_cn.php | 28 + vendor/psr/http-message | 1 + vendor/ralouphie/getallheaders/LICENSE | 21 + vendor/ralouphie/getallheaders/README.md | 27 + vendor/ralouphie/getallheaders/composer.json | 21 + .../getallheaders/src/getallheaders.php | 46 + 139 files changed, 19128 insertions(+), 594 deletions(-) create mode 100644 composer.lock create mode 100644 composer.phar create mode 100644 lib/mailjet-api-php/src/MailjetApi.php create mode 100644 vendor/autoload.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 160000 vendor/guzzlehttp/guzzle create mode 160000 vendor/guzzlehttp/promises create mode 160000 vendor/guzzlehttp/psr7 create mode 160000 vendor/mailjet/Mailjet-iframe-v3 create mode 160000 vendor/mailjet/mailjet-apiv3-php create mode 100644 vendor/phpmailer/phpmailer/LICENSE create mode 100644 vendor/phpmailer/phpmailer/PHPMailerAutoload.php create mode 100644 vendor/phpmailer/phpmailer/VERSION create mode 100644 vendor/phpmailer/phpmailer/class.phpmailer.php create mode 100644 vendor/phpmailer/phpmailer/class.phpmaileroauth.php create mode 100644 vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php create mode 100644 vendor/phpmailer/phpmailer/class.pop3.php create mode 100644 vendor/phpmailer/phpmailer/class.smtp.php create mode 100644 vendor/phpmailer/phpmailer/composer.json create mode 100644 vendor/phpmailer/phpmailer/composer.lock create mode 100644 vendor/phpmailer/phpmailer/examples/DKIM.phps create mode 100644 vendor/phpmailer/phpmailer/examples/code_generator.phps create mode 100644 vendor/phpmailer/phpmailer/examples/contactform.phps create mode 100644 vendor/phpmailer/phpmailer/examples/contents.html create mode 100644 vendor/phpmailer/phpmailer/examples/contentsutf8.html create mode 100644 vendor/phpmailer/phpmailer/examples/exceptions.phps create mode 100644 vendor/phpmailer/phpmailer/examples/gmail.phps create mode 100644 vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps create mode 100644 vendor/phpmailer/phpmailer/examples/images/phpmailer.png create mode 100644 vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png create mode 100644 vendor/phpmailer/phpmailer/examples/index.html create mode 100644 vendor/phpmailer/phpmailer/examples/mail.phps create mode 100644 vendor/phpmailer/phpmailer/examples/mailing_list.phps create mode 100644 vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps create mode 100644 vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js create mode 100644 vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js create mode 100644 vendor/phpmailer/phpmailer/examples/scripts/shBrushPhp.js create mode 100644 vendor/phpmailer/phpmailer/examples/scripts/shCore.js create mode 100644 vendor/phpmailer/phpmailer/examples/scripts/shLegacy.js create mode 100644 vendor/phpmailer/phpmailer/examples/send_file_upload.phps create mode 100644 vendor/phpmailer/phpmailer/examples/send_multiple_file_upload.phps create mode 100644 vendor/phpmailer/phpmailer/examples/sendmail.phps create mode 100644 vendor/phpmailer/phpmailer/examples/signed-mail.phps create mode 100644 vendor/phpmailer/phpmailer/examples/smtp.phps create mode 100644 vendor/phpmailer/phpmailer/examples/smtp_check.phps create mode 100644 vendor/phpmailer/phpmailer/examples/smtp_no_auth.phps create mode 100644 vendor/phpmailer/phpmailer/examples/ssl_options.phps create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCore.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreDefault.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreDjango.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreEclipse.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreEmacs.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreFadeToGrey.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreMDUltra.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreMidnight.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shCoreRDark.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeAppleScript.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeDefault.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeDjango.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeEclipse.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeEmacs.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeFadeToGrey.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeMDUltra.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeMidnight.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeRDark.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/shThemeVisualStudio.css create mode 100644 vendor/phpmailer/phpmailer/examples/styles/wrapping.png create mode 100644 vendor/phpmailer/phpmailer/extras/EasyPeasyICS.php create mode 100644 vendor/phpmailer/phpmailer/extras/README.md create mode 100644 vendor/phpmailer/phpmailer/extras/htmlfilter.php create mode 100644 vendor/phpmailer/phpmailer/extras/ntlm_sasl_client.php create mode 100644 vendor/phpmailer/phpmailer/get_oauth_token.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-am.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-rs.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php create mode 100644 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php create mode 160000 vendor/psr/http-message create mode 100644 vendor/ralouphie/getallheaders/LICENSE create mode 100644 vendor/ralouphie/getallheaders/README.md create mode 100644 vendor/ralouphie/getallheaders/composer.json create mode 100644 vendor/ralouphie/getallheaders/src/getallheaders.php diff --git a/composer.json b/composer.json index 09af93a..3cbbc85 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,24 @@ "issues": "https://www.drupal.org/project/issues/mailjet", "source": "http://cgit.drupalcode.org/mailjet" }, + "repositories": [ + { + "type": "vcs", + "url": "git@github.com:mailjet/mailjet-apiv3-php.git" + }, + { + "type": "vcs", + "url": "git@github.com:mailjet/Mailjet-iframe-v3.git" + } + ], "require": { - "phpmailer/phpmailer": "~5.2" + "phpmailer/phpmailer": "~5.2", + "mailjet/mailjet-apiv3-php": "dev-master", + "mailjet/Mailjet-iframe-v3": "dev-master" + }, + "autoload": { + "psr-4": { + "MailjetTools\\": "lib/mailjet-api-php/src/" + } } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..3c81248 --- /dev/null +++ b/composer.lock @@ -0,0 +1,478 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d8ed71b68793aa04eebd71c523072f78", + "packages": [ + { + "name": "guzzlehttp/guzzle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9799bbcb90ed2df488adb0924169163156483e52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9799bbcb90ed2df488adb0924169163156483e52", + "reference": "9799bbcb90ed2df488adb0924169163156483e52", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-12-07T08:18:25+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "926eaa3ff73cde2becf652b785831bcb7618568a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/926eaa3ff73cde2becf652b785831bcb7618568a", + "reference": "926eaa3ff73cde2becf652b785831bcb7618568a", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2018-10-30T00:20:04+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "5e61346ab1e1ca7d01d2f633bad9574d35717781" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/5e61346ab1e1ca7d01d2f633bad9574d35717781", + "reference": "5e61346ab1e1ca7d01d2f633bad9574d35717781", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-07T15:04:46+00:00" + }, + { + "name": "mailjet/Mailjet-iframe-v3", + "version": "dev-master", + "source": { + "type": "git", + "url": "git@github.com:mailjet/Mailjet-iframe-v3.git", + "reference": "c7e5c5b98e76f1501b4a90d869e83934c0137234" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mailjet/Mailjet-iframe-v3/zipball/c7e5c5b98e76f1501b4a90d869e83934c0137234", + "reference": "c7e5c5b98e76f1501b4a90d869e83934c0137234", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MailjetIframe\\": "src" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mailjet", + "email": "dev@mailjet.com", + "homepage": "https://dev.mailjet.com" + } + ], + "description": "Mailjet iFrame wrapper", + "homepage": "https://github.com/mailjet/Mailjet-iframe-v3/", + "keywords": [ + "api", + "campaign", + "email", + "iframe", + "mailjet", + "marketing", + "php" + ], + "support": { + "source": "https://github.com/mailjet/Mailjet-iframe-v3/tree/master", + "issues": "https://github.com/mailjet/Mailjet-iframe-v3/issues" + }, + "time": "2018-11-19T08:24:34+00:00" + }, + { + "name": "mailjet/mailjet-apiv3-php", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/mailjet/mailjet-apiv3-php.git", + "reference": "9d89b9a424a9631bff8e499cbbe34058481e8102" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mailjet/mailjet-apiv3-php/zipball/9d89b9a424a9631bff8e499cbbe34058481e8102", + "reference": "9d89b9a424a9631bff8e499cbbe34058481e8102", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0|~5.3", + "php": ">=5.4.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Mailjet": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mailjet", + "email": "dev@mailjet.com", + "homepage": "https://dev.mailjet.com" + } + ], + "description": "PHP wrapper for the Mailjet API", + "homepage": "https://github.com/mailjet/mailjet-apiv3-php/", + "keywords": [ + "api", + "email", + "mailjet", + "php", + "v3" + ], + "support": { + "source": "https://github.com/mailjet/mailjet-apiv3-php/tree/v1.4.1", + "issues": "https://github.com/mailjet/mailjet-apiv3-php/issues" + }, + "time": "2018-10-31T13:24:45+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v5.2.27", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "dde1db116511aa4956389d75546c5be4c2beb2a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dde1db116511aa4956389d75546c5be4c2beb2a6", + "reference": "dde1db116511aa4956389d75546c5be4c2beb2a6", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=5.0.0" + }, + "require-dev": { + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" + }, + "suggest": { + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "classmap": [ + "class.phpmailer.php", + "class.phpmaileroauth.php", + "class.phpmaileroauthgoogle.php", + "class.smtp.php", + "class.pop3.php", + "extras/EasyPeasyICS.php", + "extras/ntlm_sasl_client.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": "2018-11-15T22:32:31+00:00" + }, + { + "name": "psr/http-message", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "beb49b96960f0cbf17e7fbcaaddc8eb434e126eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/beb49b96960f0cbf17e7fbcaaddc8eb434e126eb", + "reference": "beb49b96960f0cbf17e7fbcaaddc8eb434e126eb", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^5", + "satooshi/php-coveralls": ">=1.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2018-12-11T21:53:24+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "mailjet/mailjet-apiv3-php": 20, + "mailjet/mailjet-iframe-v3": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/composer.phar b/composer.phar new file mode 100644 index 0000000000000000000000000000000000000000..322e0ff37482f29d02a711d490e4629426c973d7 GIT binary patch literal 1874999 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≦$PAS%FUQA=wH}r&Fq! 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 I=pWwB>OyO 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

;S6r{s!}>i$7zl92kOm5EOtUTNE7v%J%E42% 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 z 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

d;%an4m0}=2cJMF_ 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ν_H|CT{PKW`u=vUMS=lVXGE^@poJWtsfWDU> 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 z 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, 'drupal-3.0'); + } elseif (drupal_get_profile() == 'commerce_kickstart') { + $mjClient->addRequestOption(CURLOPT_USERAGENT, 'kickstart'); + } + // We turn of secure protocol for API requests if the wordpress does not support it + if (empty($_SERVER['HTTPS']) || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'off') || $_SERVER['SERVER_PORT'] != 443) { + $mjClient->setSecureProtocol(false); + } + self::$mjApiKey = $mailjetApikey; + self::$mjApiClient = $mjClient; + + return self::$mjApiClient; + } + + + public static function getMailjetContactLists($limit = 0) + { + $mjApiClient = self::getApiClient(); + + $filters = [ + 'Limit' => $limit, + 'Sort' => 'Name ASC' + ]; + $response = $mjApiClient->get(Resources::$Contactslist, ['filters' => $filters]); + if ($response->success()) { + return $response->getData(); + } else { + //return $response->getStatus(); + return false; + } + } + + public static function getMailjetContactListByName($name) + { + $mjApiClient = self::getApiClient(); + + $filters = [ + 'Name' => $name + ]; + $response = $mjApiClient->get(Resources::$Contactslist, ['filters' => $filters]); + if ($response->success() && $response->getCount() > 0) { + return $response->getData(); + } else { + //return $response->getStatus(); + return false; + } + } + + + public static function getMailjetContactProperties($limit = 0) + { + $mjApiClient = self::getApiClient(); + + $filters = [ + 'Limit' => $limit + ]; + $response = $mjApiClient->get(Resources::$Contactmetadata, ['filters' => $filters]); + if ($response->success()) { + return $response->getData(); + } else { + //return $response->getStatus(); + return false; + } + } + + public static function createMailjetContactList($listName) + { + if (empty($listName)) { + return false; + } + + $mjApiClient = self::getApiClient(); + + $body = [ + 'Name' => $listName + ]; + $response = $mjApiClient->post(Resources::$Contactslist, ['body' => $body]); + if ($response->success()) { + return $response->getData(); + } else { + //return $response->getStatus(); + return false; + } + } + + public static function isContactListActive($contactListId) + { + if (!$contactListId) { + return false; + } + try { + $mjApiClient = self::getApiClient(); + } catch (\Exception $e) { + return false; + } + $filters = array( + 'ID' => $contactListId + ); + $response = $mjApiClient->get(Resources::$Contactslist, array('filters' => $filters)); + if ($response->success()) { + $data = $response->getData(); + if (isset($data[0]['IsDeleted'])) { + // Return true if the list is not deleted + return !$data[0]['IsDeleted']; + } + } + return false; + } + + public static function getContactProperties() + { + $mjApiClient = self::getApiClient(); + $filters = array( + 'limit' => 0, + 'Sort' => 'Name ASC' + ); + $response = $mjApiClient->get(Resources::$Contactmetadata, array('filters' => $filters)); + if ($response->success()) { + return $response->getData(); + } else { + return false; +// return $response->getStatus(); + } + } + + public static function getPropertyIdByName($name) + { + if (!$name) { + return false; + } + $contactProperties = self::getContactProperties(); + if ($contactProperties) { + foreach ($contactProperties as $property) { + if ($property['Name'] === $name) { + return $property['ID']; + } + } + } + return false; + } + + public static function createMailjetContactProperty($name, $type = "str") + { + if (empty($name)) { + return false; + } + + $mjApiClient = self::getApiClient(); + +// Name: the name of the custom data field +// DataType: the type of data that is being stored (this can be either a str, int, float or bool) +// NameSpace: this can be either static or historic + $body = [ + 'Datatype' => $type, + 'Name' => $name, + 'NameSpace' => "static" + ]; + $response = $mjApiClient->post(Resources::$Contactmetadata, ['body' => $body]); + if ($response->success()) { + return $response->getData(); + } else { + return false; +// return $response->getStatus(); + } + } + + + public static function updateMailjetContactProperty($id, $name, $type = "str") + { + if (empty($name)) { + return false; + } + + $mjApiClient = self::getApiClient(); + +// Name: the name of the custom data field +// DataType: the type of data that is being stored (this can be either a str, int, float or bool) +// NameSpace: this can be either static or historic + $body = [ + 'Datatype' => $type, + 'Name' => $name, + 'NameSpace' => "static" + ]; + $response = $mjApiClient->put(Resources::$Contactmetadata, ['id' => $id, 'body' => $body]); + if ($response->success()) { + return $response->getData(); + } else { + return false; +// return $response->getStatus(); + } + } + + public static function getMailjetSenders() + { + $mjApiClient = self::getApiClient(); + + $filters = [ + 'Limit' => '0', + 'Sort' => 'ID DESC' + ]; + + $response = $mjApiClient->get(Resources::$Sender, ['filters' => $filters]); + if ($response->success()) { + return $response->getData(); + } else { + //return $response->getStatus(); + return false; + } + } + + public static function isValidAPICredentials() + { + try { + $mjApiClient = self::getApiClient(); + } catch (\Exception $e) { + return false; + } + + $filters = [ + 'Limit' => '1' + ]; + + $response = $mjApiClient->get(Resources::$Contactmetadata, ['filters' => $filters]); + if ($response->success()) { + return true; + // return $response->getData(); + } else { + return false; + // return $response->getStatus(); + } + } + + /** + * Add or Remove a contact to a Mailjet contact list - It can process many or single contact at once + * + * @param $contactListId - int - ID of the contact list to sync contacts + * @param $contacts - array('Email' => ContactEmail, 'Name' => ContactName, 'Properties' => array(propertyName1 => propertyValue1, ...)); + * @param string $action - 'addforce', 'adnoforce', 'remove' + * @return array|bool + */ + public static function syncMailjetContacts($contactListId, $contacts, $action = 'addforce') + { + $mjApiClient = self::getApiClient(); + + $body = [ + 'Action' => $action, + 'Contacts' => $contacts + ]; + + $response = $mjApiClient->post(Resources::$ContactslistManagemanycontacts, ['id' => $contactListId, 'body' => $body]); + if ($response->success()) { + return $response->getData(); + } else { + return false; +// return $response->getStatus(); + } + } + + /** + * Add a contact to a Mailjet contact list + */ + public static function syncMailjetContact($contactListId, $contact, $action = 'addforce') + { + $mjApiClient = self::getApiClient(); + $body = [ + 'Action' => $action, + 'Email' => $contact['Email'], + ]; + if (!empty($contact['Properties'])) { + $body['Properties'] = $contact['Properties']; + } + $response = $mjApiClient->post(Resources::$ContactslistManagecontact, ['id' => $contactListId, 'body' => $body]); + if ($response->success()) { + return $response->getData(); + } else { + return false; + } + } + + + public static function createApiToken(array $params) + { + $mjApiClient = self::getApiClient(); + $response = $mjApiClient->post(Resources::$Apitoken, ['body' => $params]); + if ($response->success()) { + return $response->getData(); + } else { + return false; + } + } + + public static function getApiToken(string $id) + { + $mjApiClient = self::getApiClient(); + $response = $mjApiClient->get(Resources::$Apitoken, ['id' => $id]); + if ($response->success()) { + return $response->getData(); + } else { + return false; + } + } + + + + +} diff --git a/mailjet.module b/mailjet.module index 4ff26ea..40f367e 100644 --- a/mailjet.module +++ b/mailjet.module @@ -1,10 +1,14 @@ set('mailjet_password', $_POST['data']['secretkey']); $config_mailjet->save(); - $mailjet = new Mailjet1($_POST['data']['apikey'], $_POST['data']['secretkey']); + $mailjetApiClient = MailjetApi::getApiClient($_POST['data']['apikey'], $_POST['data']['secretkey']); $params = [ 'AllowedAccess' => 'campaigns,contacts,stats,pricing,account,reports', - 'method' => 'JSON', - 'APIKeyALT' => $mailjet->getAPIKey(), + 'APIKeyALT' => $_POST['data']['apikey'], 'TokenType' => 'iframe', 'IsActive' => TRUE, 'SentData' => serialize(['plugin' => 'drupal-3.0']), ]; - $response2 = $mailjet->apitoken($params)->getResponse(); - if ($response2->Count > 0) { - $config_mailjet->set('APItoken', $response2->Data[0]->Token); + $response = MailjetApi::createApiToken($params); + if (false != $response) { + $config_mailjet->set('APItoken', $response[0]['Token']); $config_mailjet->save(); mailjet_first_sync(mailjet_get_default_list_id(mailjet_new())); } @@ -103,9 +110,8 @@ function mailjet_new() { $key = trim($config_mailjet->get('mailjet_username')); $secret_key = trim($config_mailjet->get('mailjet_password')); - $mj = new MailJet($key, $secret_key); - - return $mj; + $mailjetApiClient = MailjetTools\MailjetApi::getApiClient($key, $secret_key); + return $mailjetApiClient; } if (!($key) && !($secret_key)) { drupal_set_message(t('You need to add your MailJet API details before you can continue!'), 'warning'); @@ -120,23 +126,13 @@ function mailjet_new() { */ function mailjet_user_infos() { - $mailjet = mailjet_new(); - if (!$mailjet) { - // drupal_goto('admin/config/system/mailjet/api'); - return FALSE; - } - $paramsProfile = [ - 'method' => 'GET', - ]; - $response = $mailjet->myprofile($paramsProfile)->getResponse(); + $mailjetApiClient = mailjet_new(); - $paramsUser = [ - 'method' => 'GET', - ]; - $responseUser = $mailjet->user($paramsUser)->getResponse(); + $responseProfile = $mailjetApiClient->get(Resources::$Myprofile); + $responseUser = $mailjetApiClient->get(Resources::$User); - if ($response && isset($response->Count) && $response->Count > 0) { - return array_merge((array) $response->Data[0], (array) $responseUser->Data[0]); + if ($responseProfile->success()) { + return array_merge($responseProfile->getData()[0], $responseUser->getData()[0]); } else { return FALSE; @@ -152,34 +148,24 @@ function mailjet_user_infos() { */ function mailjet_mjuser_update($infos) { \Drupal::logger('my_module')->notice(print_r($infos, TRUE)); - $mailjet = mailjet_new(); - $infos['method'] = 'PUT'; - $response = $mailjet->myprofile($infos)->getResponse(); - return !empty($response->Count) ? TRUE : FALSE; + $mailjetApiClient = mailjet_new(); + $response = $mailjetApiClient->put(Resources::$Myprofile, ['body' => $infos]); + return ($response->success()) ? TRUE : FALSE; } /** * User tracking check. */ function mailjet_user_trackingcheck() { - $mailjet = mailjet_new(); - if (!$mailjet) { - return FALSE; - } - $params = [ - 'APIKey' => $mailjet->getAPIKey(), + $mailjetApiClient = mailjet_new(); + $filters = [ + 'APIKey' => MailjetApi::$mjApiKey, ]; - $response = $mailjet->eventcallbackurl($params)->getResponse(); - - if ($response && isset($response->Count) && $response->Count > 0) { - return $response; - } - elseif ($response && isset($response->Count) && $response->Count == 0) { - return $response; - } - else { - return FALSE; + $response = $mailjetApiClient->get(Resources::$Eventcallbackurl, ['filters' => $filters]); + if ($response->success()) { + return $response->getData(); } + return FALSE; } /** @@ -187,31 +173,27 @@ function mailjet_user_trackingcheck() { */ function mailjet_user_trackingupdate($tracking, $current_events) { - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); try { $check = ["open", "click", "bounce", "spam", "blocked", "unsub"]; foreach ($tracking as $key => $value) { if (in_array($key, $check)) { if ($value == 1 && !array_key_exists($key, $current_events)) { - $params = [ - 'method' => 'JSON', - 'APIKeyALT' => $mailjet->getAPIKey(), + $body = [ + 'APIKeyALT' => MailjetApi::$mjApiKey, 'EventType' => $key, - 'Url' => $tracking['url'], + 'Url' => $tracking['Url'], ]; - $new_response = $mailjet->eventcallbackurl($params)->getResponse(); - unset($params); + + $new_response = $mailjetApiClient->post(Resources::$Eventcallbackurl, ['body' => $body]); + + unset($body); unset($new_response); } if ($value == 0 && array_key_exists($key, $current_events)) { - $del_params = [ - 'method' => 'DELETE', - 'ID' => $current_events[$key], - ]; + $del_response = $mailjetApiClient->delete(Resources::$Eventcallbackurl, ['id' => $current_events[$key]]); - $del_response = $mailjet->eventcallbackurl($del_params); - unset($del_params); unset($del_response); } } @@ -227,24 +209,23 @@ function mailjet_user_trackingupdate($tracking, $current_events) { */ function mailjet_user_domain_list() { - $mailjet = mailjet_new(); - $params = [ - 'method' => 'GET', + $mailjetApiClient = mailjet_new(); + $filters = [ 'style' => 'full', 'limit' => 0, ]; - $response = $mailjet->sender($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { - $domains = []; - foreach ($response->Data as $sender) { - if (!empty($sender->DNS) and !array_key_exists($sender->DNS->Domain, $domains) && strpos($sender->Email->Email, "*@") !== FALSE) { - $domains[$sender->DNS->Domain] = $sender; + $response = $mailjetApiClient->get(Resources::$Sender, ['filters' => $filters]); + if ($response->success()) { + $senders = $response->getData(); + $domains = []; + foreach ($senders as $sender) { + if (!empty($sender['DNS']) and !array_key_exists($sender['DNS']['Domain'], $domains) && strpos($sender['Email']['Email'], "*@") !== FALSE) { + $domains[$sender['DNS']['Domain']] = $sender; + } } - } - return $domains; - } - else { - return FALSE; + return $domains; + } else { + return false; } } @@ -252,21 +233,20 @@ function mailjet_user_domain_list() { * Gets trusted email domains. */ function mailjet_get_a_trusted_email() { - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); $system_site_config = \Drupal::config('system.site'); - $params = [ - 'method' => 'GET', - 'style' => 'full', + $filters = [ + 'style' => 'full' ]; - $response = $mailjet->sender($params)->getResponse(); - - if ($response && isset($response->Count) && $response->Count > 0) { - foreach ($response->Data as $emailObject) { - if ($emailObject->Status == 'Active') { - return $emailObject->Email->Email; + $response = $mailjetApiClient->get(Resources::$Sender, ['filters' => $filters]); + if ($response->success()) { + $senders = $response->getData(); + foreach ($senders as $emailObject) { + if ($emailObject['Status'] == 'Active') { + return $emailObject['Email']['Email']; + } } - } } return $system_site_config->get('site_mail'); @@ -280,22 +260,21 @@ function mailjet_get_a_trusted_email() { * @return boolean */ function mailjet_user_domain_add($domain) { - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); if (strpos($domain, '@') === FALSE) { $domain = '*@' . $domain; } - $params = [ - 'method' => 'JSON', + $body = [ 'Email' => $domain, ]; - $response = $mailjet->sender($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { + $response = $mailjetApiClient->post(Resources::$Sender, ['body' => $body]); + if ($response->success()) { return TRUE; } else { - drupal_set_message(t($response->ErrorMessage), 'error'); + drupal_set_message(t($response->getReasonPhrase()), 'error'); return FALSE; } } @@ -308,20 +287,19 @@ function mailjet_user_domain_add($domain) { * @return boolean */ function mailjet_user_domain_status($domain) { - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); if (strpos($domain, '@') === FALSE) { $domain = '*@' . $domain; } $params = [ - 'method' => 'JSON', 'Email' => $domain, ]; - $response = $mailjet->sender($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { + $response = $mailjetApiClient->post(Resources::$Sender, ['body' => $body]); + if ($response->success()) { return TRUE; } else { @@ -345,14 +323,13 @@ function _has_drupal_property($mailjet_property, $drupal_fields) { function mailjet_properties_sync($newField = NULL, $delete = FALSE) { $config_mailjet = \Drupal::config('mailjet.settings'); - if (!($config_mailjet->get('mailjet_properties_sync', TRUE))) { - return; - } +// if (!($config_mailjet->get('mailjet_properties_sync', TRUE))) { var_dump($config_mailjet);exit; +// return; +// } //get all user fields from Drupal system $user_fields = []; $user_info = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());; - $counter = 0; foreach ($user_info as $key => $value) { @@ -402,15 +379,11 @@ function mailjet_properties_sync($newField = NULL, $delete = FALSE) { //get existing contact properties from MailJet $properties = []; - $mj = mailjet_new(); - $params = [ - 'method' => 'GET', - 'limit' => 0, - ]; - $response = $mj->ContactMetaData($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count >= 0) { - foreach ($response->Data as $property) { - $properties[$property->Name] = (array) $property; + $mailjetApiClient = mailjet_new(); + $response = MailjetApi::getContactProperties(); + if (false != $response) { + foreach ($response as $property) { + $properties[$property['Name']] = (array) $property; } } else { @@ -424,14 +397,8 @@ function mailjet_properties_sync($newField = NULL, $delete = FALSE) { //drupal_set_message(t('Field '.$field['Name'].' is already in your MailJet account.'),'status'); // no need of this message - too much spam :) } else { - $updateParams = [ - 'method' => 'JSON', - 'ID' => $properties[$field['Name']]['ID'], - 'Name' => $field['Name'], - 'DataType' => $field['Datatype'], - ]; - $updateResponse = $mj->ContactMetaData($updateParams)->getResponse(); - if ($updateResponse && $updateResponse->Count >= 0) { + $updateResponse = MailjetApi::updateMailjetContactProperty($properties[$field['Name']]['ID'], $field['Name'], $field['Datatype']); + if (false != $updateResponse) { drupal_set_message(t('Field ' . $field['Name'] . ' in now updated in your MailJet account!'), 'status'); } else { @@ -440,14 +407,8 @@ function mailjet_properties_sync($newField = NULL, $delete = FALSE) { } } else { - $insertParams = [ - 'method' => 'JSON', - 'Name' => $field['Name'], - 'DataType' => $field['Datatype'], - 'NameSpace' => 'static', - ]; - $insertResponse = $mj->ContactMetaData($insertParams)->getResponse(); - if ($insertResponse && $insertResponse->Count >= 0) { + $insertResponse = MailjetApi::createMailjetContactProperty($field['Name'], $field['Datatype']); + if (false != $insertResponse) { drupal_set_message(t('Field ' . $field['Name'] . ' in now inserted in your MailJet account!'), 'status'); } else { @@ -458,241 +419,104 @@ function mailjet_properties_sync($newField = NULL, $delete = FALSE) { return; } +/** + * Sync user hooks. + */ +function mailjet_user_insert($user) { + mailjet_sync_single_user($user, 'add'); +} -function mailjet_sync_single_user($infos, $type) { + +/** + * Updates Mailjet users + */ +function mailjet_user_update($user) { + // Only trigger updates when the account status has changed. + if (isset($user->get('status')->value)) { + if ($user->get('status')->value > 0) { //should be the same as cancel hook + mailjet_sync_single_user($user, 'update'); + } + else { + mailjet_sync_single_user($user, 'remove'); + } + } +} + +/** + * Deletes mailjet user. + */ +function mailjet_user_delete($user) { + mailjet_sync_single_user($user, 'remove'); +} + +function mailjet_user_cancel($user) { + mailjet_sync_single_user($user, 'remove'); +} + + +function mailjet_sync_single_user($user, $type) { $config_mailjet = \Drupal::config('mailjet.settings'); - if (!($config_mailjet->get('mailjet_properties_sync', TRUE))) { + + if (empty($user->get('mail')->value)) { return; } mailjet_properties_sync(); - $mailjet = mailjet_new(); - - $user = get_sync_info($infos); + $mailjetApiClient = mailjet_new(); + //var_dump($infos->getEmail()); $mj_lists = []; - if (is_array($user) && isset($infos['mail']) && isset($user[$infos['mail']])) { - $mj_lists = explode(",", $user[$infos['mail']]['mj_lists']); - $mj_lists = array_diff($mj_lists, ['']); - } //if (!empty($defaul_mj_list)) { - $mj_lists[] = mailjet_get_default_list_id($mailjet); + $mj_lists[] = mailjet_get_default_list_id($mailjetApiClient); //} - +// var_dump($mj_lists); +// var_dump($type); +// var_dump($user);exit; switch ($type) { case 'add': + case 'update': foreach ($mj_lists as $key => $value) { - //add new email - $add_params = [ - 'method' => 'POST', - 'Action' => 'Add', - 'Force' => TRUE, - 'Addresses' => [$infos['mail']], - 'ListID' => $value, - ]; - $mailjet->resetRequest(); - $response = $mailjet->manycontacts($add_params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { - - \Drupal::logger('mailjet_messages') - ->notice(t('The new contact was added to list #' . $value . '.')); - $contactID = $response->Data[0]->Recipients->Items[0]->Contact->ID; - - // Get the data which we have to update. The data will be extracted from the user's object or $info variable - $data = []; - if (is_array($user) && isset($user[$infos['mail']])) { - foreach ($user[$infos['mail']]['properties'] as $prop_key => $prop_value) { - $data[] = [ - 'Name' => str_replace("field_", "", $prop_key), - 'Value' => $prop_value, - ]; - } - } - else { - foreach ($infos as $key => $info) { - if (strpos($key, 'field_') !== FALSE && isset($info['und'][0]['value'])) { - $data[] = [ - 'Name' => str_replace("field_", "", $key), - 'Value' => $info['und'][0]['value'], - ]; - } - } - } - if (!empty($data)) { - $data_params = [ - 'method' => 'JSON', - 'ContactID' => $contactID, - 'ID' => $contactID, - 'Data' => $data, - ]; - $mailjet->resetRequest(); - $response = $mailjet->contactdata($data_params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { - drupal_set_message(t('Contact data was synced.'), 'status'); - } - else { - drupal_set_message(t('Contact data was not synced.'), 'error'); - } + // Get the data which we have to update. The data will be extracted from the user's object or $info variable + $data = []; + if (is_array($user) && isset($user[$infos['mail']])) { + foreach ($user[$infos['mail']]['properties'] as $prop_key => $prop_value) { + $data[str_replace("field_", "", $prop_key)] = $prop_value; } } else { - \Drupal::logger('mailjet_messages') - ->notice(t('The new contact was not added to list #' . $value . '.')); - } - } - break; - case 'update': - if (isset($infos['mail']) && $infos['mail'] != $infos['original']->mail) { - foreach ($mj_lists as $key => $value) { - //add new email - $add_params = [ - 'method' => 'POST', - 'Action' => 'Add', - 'Force' => TRUE, - 'Addresses' => [$infos['mail']], - 'ListID' => $value, - ]; - - $mailjet->resetRequest(); - $response = $mailjet->manycontacts($add_params)->getResponse(); - - if ($response && isset($response->Count) && $response->Count > 0) { - \Drupal::logger('mailjet_messages') - ->notice(t('The new contact was added to list #' . $value . '.')); - $contactID = $response->Data[0]->Recipients->Items[0]->Contact->ID; - - // Get the data which we have to update. The data will be extracted from the user's object or $info variable - $data = []; - if (is_array($user) && isset($user[$infos['mail']])) { - foreach ($user[$infos['mail']]['properties'] as $prop_key => $prop_value) { - $data[] = [ - 'Name' => str_replace("field_", "", $prop_key), - 'Value' => $prop_value, - ]; - } - } - else { - foreach ($infos as $key => $info) { - if (strpos($key, 'field_') !== FALSE && isset($info['und'][0]['value'])) { - $data[] = [ - 'Name' => str_replace("field_", "", $key), - 'Value' => $info['und'][0]['value'], - ]; - } - } - } - if (!empty($data)) { - $data_params = [ - 'method' => 'JSON', - 'ContactID' => $contactID, - 'ID' => $contactID, - 'Data' => $data, - ]; - $mailjet->resetRequest(); - $response = $mailjet->contactdata($data_params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { - drupal_set_message(t('Contact data was synced.'), 'status'); - } - else { - drupal_set_message(t('Contact data was not synced.'), 'error'); - } + foreach ($infos as $key => $info) { + if (strpos($key, 'field_') !== FALSE && isset($info['und'][0]['value'])) { + $data[str_replace("field_", "", $key)] = $info['und'][0]['value']; } } - else { - \Drupal::logger('mailjet_messages') - ->notice(t('The new contact was not added to list #' . $value . '.')); - } - - $unsub_params = [ - 'method' => 'POST', - 'Action' => 'Unsubscribe', - 'Addresses' => [$infos['original']->mail], - 'ListID' => $value, - ]; + } - $mailjet->resetRequest(); - $response = $mailjet->manycontacts($unsub_params)->getResponse(); + $contact = [ + 'Email' => $user->get('mail')->value + ]; + if (!empty($data)) { + $contact['Properties'] = $data; + } + //add new email + $response = MailjetApi::syncMailjetContact($value, $contact); - if ($response && isset($response->Count) && $response->Count > 0) { - \Drupal::logger('mailjet_messages') - ->notice(t('The contact was unsubscribed to list #' . $value . '.')); - } - else { + if (false != $response) { \Drupal::logger('mailjet_messages') - ->notice(t('The new contact was not added to list #' . $value . '.')); - } - } - } - else { - //get contact ID - if (empty($infos['mail'])) { - return; - } - $contact_params = [ - 'method' => 'GET', - 'ID' => $infos['mail'], - ]; - $mailjet->resetRequest(); - $response = $mailjet->contact($contact_params)->getResponse(); - - if ($response && isset($response->Count) && $response->Count == 1) { - $contactID = $response->Data[0]->ID; - - // Get the data which we have to update. The data will be extracted from the user's object or $info variable - $data = []; - if (is_array($user) && isset($user[$infos['mail']])) { - foreach ($user[$infos['mail']]['properties'] as $prop_key => $prop_value) { - $data[] = [ - 'Name' => str_replace("field_", "", $prop_key), - 'Value' => $prop_value, - ]; - } - } - else { - foreach ($infos as $key => $info) { - if (strpos($key, 'field_') !== FALSE && isset($info['und'][0]['value'])) { - $data[] = [ - 'Name' => str_replace("field_", "", $key), - 'Value' => $info['und'][0]['value'], - ]; - } - } - } - if (!empty($data)) { - $data_params = [ - 'method' => 'JSON', - 'ContactID' => $contactID, - 'ID' => $contactID, - 'Data' => $data, - ]; - $mailjet->resetRequest(); - $response = $mailjet->contactdata($data_params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { - drupal_set_message(t('Contact data was synced.'), 'status'); - } - else { - drupal_set_message(t('Contact data was not synced.'), 'error'); - } - } + ->notice(t('The new contact was added to list #' . $value . '.')); } else { - drupal_set_message(t('Could not get contact info from Mailjet.'), 'error'); + \Drupal::logger('mailjet_messages') + ->notice(t('The new contact was not added to list #' . $value . '.')); } } break; case 'remove': - if (empty($infos['mail'])) { - return; - } foreach ($mj_lists as $key => $value) { - $unsub_params = [ - 'method' => 'POST', - 'Action' => 'Unsubscribe', - 'Addresses' => [$infos['mail']], - 'ListID' => $value, + $contact = [ + 'Email' => $user->get('mail')->value ]; - $mailjet->resetRequest(); - $response = $mailjet->manycontacts($unsub_params)->getResponse(); - if ($response && isset($response->Count) && $response->Count > 0) { + //add new email + $response = MailjetApi::syncMailjetContact($value, $contact, 'remove'); + if (false == $response) { \Drupal::logger('mailjet_messages') ->notice(t('The new contact was unsubscribed from list #' . $value . '.')); } @@ -708,44 +532,39 @@ function mailjet_sync_single_user($infos, $type) { } } + /** * Checks if batch process is running. */ function is_batchjob_running($bjID) { $config_mailjet = \Drupal::config('mailjet.settings'); - $mailjet = mailjet_new(); - $paramsBatchJobCheck = [ - 'method' => 'GET', // JSON - 'ID' => $bjID, + $mailjetApiClient = mailjet_new(); + $filters = [ 'APIKeyALT' => $config_mailjet->get('mailjet_username'), ]; - $mailjet->resetRequest(); - $responseBatchJobCheck = $mailjet->batchjob($paramsBatchJobCheck) - ->getResponse(); - - if (!empty($responseBatchJobCheck->Data[0]->Status) && $responseBatchJobCheck->Data[0]->Status == "Completed") { - return FALSE; + $responseBatchJobCheck = $mailjetApiClient->get(Resources::$Batchjob, ['id' => $bjID, 'filters' => $filters]); + if ($responseBatchJobCheck->success()) { + $responseBatchJobCheckData = $responseBatchJobCheck->getData(); } - else { - return TRUE; + if (!empty($responseBatchJobCheckData[0]['Status']) && $responseBatchJobCheckData[0]['Status'] == "Completed") { + return FALSE; } + + return TRUE; } /** * Gets Mailjet list id. */ -function mailjet_get_default_list_id($mailjet) { - $getlist_params = [ - 'method' => 'GET', - 'Name' => mailjet_get_default_list_name(), - ]; - $mailjet->resetRequest(); +function mailjet_get_default_list_id($mailjetApiClient) { + $mailjetApiClient = mailjet_new(); // Gets Mailjet contact list by name - $contactLists = $mailjet->contactslist($getlist_params)->getResponse(); - if ($contactLists && $contactLists->Count > 0) { - $def_list_id = $contactLists->Data[0]->ID; + $contactsList = MailjetApi::getMailjetContactListByName(mailjet_get_default_list_name()); + + if (false != $contactsList) { + $def_list_id = $contactsList[0]['ID']; } - return empty($def_list_id) ? mailjet_create_default_list($mailjet) : $def_list_id; + return empty($def_list_id) ? mailjet_create_default_list() : $def_list_id; } function mailjet_get_default_list_name() { @@ -755,15 +574,11 @@ function mailjet_get_default_list_name() { /** * Create the default Drupal contact list if not existing. */ -function mailjet_create_default_list($mailjet) { - $listparams = [ - 'method' => 'JSON', - 'Name' => mailjet_get_default_list_name(), - ]; - $mailjet->resetRequest(); - $response3 = $mailjet->contactslist($listparams)->getResponse(); - if ($response3 && $response3->Count > 0) { - $def_list_id = $response3->Data[0]->ID; +function mailjet_create_default_list() { + $mailjetApiClient = mailjet_new(); + $responseNewContactsList = MailjetApi::createMailjetContactList(mailjet_get_default_list_name()); + if (false != $responseNewContactsList) { + $def_list_id = $responseNewContactsList[0]['ID']; drupal_set_message(t('Default list was created!'), 'status'); } else { @@ -794,92 +609,39 @@ function mailjet_first_sync($list_id) { ->getEditable('mailjet.settings'); mailjet_properties_sync(); +//get all drupal users //get all drupal users //$users = entity_load('user'); - $users = \Drupal::service('entity_type.manager')->getStorage('user'); - - $csv_str = "email,"; - $cnt = 0; + $user_storage = \Drupal::service('entity_type.manager')->getStorage('user'); + $ids = $user_storage->getQuery()->execute(); + $users = $user_storage->loadMultiple($ids); + $contacts = []; foreach ($users as $user_id => $user) { - if ($user_id > 0 && $user->status > 0) { + if ($user_id > 0 && $user->get('status')->value > 0) { + $contact = []; + $properties = []; + $contact['Email'] = $user->getEmail(); foreach ($user as $key => $value) { //ADD ALL FIELDS if (strpos($key, "field_") !== FALSE) { - if ($cnt < 1) { - $csv_str .= str_replace('field_', '', $key) . ","; - } + $properties[str_replace('field_', '', $key)] = ((!empty($value)) ? $value[LANGUAGE_NONE][0]['value'] : ''); } } - $csv_str = substr($csv_str, 0, -1); - $csv_str .= "\n"; - - $csv_str .= $user->mail . ","; - foreach ($user as $key => $value) { - //ADD ALL FIELDS - if (strpos($key, "field_") !== FALSE) { - $csv_str .= ((!empty($value)) ? $value[LANGUAGE_NONE][0]['value'] : '') . ","; - } + if (!empty($properties)) { + $contact['Properties'] = $properties; } - $csv_str = substr($csv_str, 0, -1); - $csv_str .= "\n"; - $cnt++; - } - } - $mailjet = mailjet_new(); - //call to dataAPI to create the CSV - $mailjet->resetRequest(); - $response_csv_data = $mailjet->data('contactslist', $list_id, 'CSVData', 'text/plain', $csv_str, 'POST', NULL) - ->getResponse(); - - if ($response_csv_data) { - $clid = json_decode($response_csv_data); - - $mailjet->resetRequest(); - $params_batch_job = [ - 'method' => 'JSON', // JSON - 'JobType' => 'Contact list import csv', - 'DataID' => $clid->ID, - 'Status' => 'Upload', - 'RefId' => $list_id, - 'Method' => 'addnoforce', // = 'addforce' - 'APIKeyALT' => $config_mailjet->get('mailjet_username'), - ]; - - $response_batch_job = $mailjet->batchjob($params_batch_job)->getResponse(); - - if ($response_batch_job && $response_batch_job->Count > 0) { - $bj_id = $response_batch_job->Data[0]->ID; - $params_batch_job_check = [ - 'method' => 'GET', // JSON - 'ID' => $bj_id, - 'APIKeyALT' => $config_mailjet->get('mailjet_username'), - ]; - $mailjet->resetRequest(); - $response_batch_job_check = $mailjet->batchjob($params_batch_job_check) - ->getResponse(); - - if ($response_batch_job_check && $response_batch_job_check->Data[0]->Status == "Completed") { - drupal_set_message(t('Sync is complete.'), 'status'); - } - else { - $bj_ids = $config_mailjet->get('runningBtachJobs', []); - $bj_ids[] = $bj_id; - $config_mailjet->set('runningBtachJobs', $bj_ids); - - drupal_set_message(t('Sync in progress.'), 'status'); - } - } - else { - drupal_set_message(t('Could not create a BatchJob for this import')); + $contacts[] = $contact; } } - else { - drupal_set_message(t('Could not create the contact list')); + + $responseInitialSync = MailjetApi::syncMailjetContacts($list_id, $contacts); + if (false == $responseInitialSync) { + drupal_set_message(t('Could not create the contact list')); } - $config_mailjet->save(); + drupal_set_message(t('Sync in progress.'), 'status'); } function get_mailjet_get_lists_limit() { @@ -888,39 +650,27 @@ function get_mailjet_get_lists_limit() { // Getter functions - LISTS and Properties function mailjet_get_lists() { - $contact_lists2 = []; + $contact_lists = []; - $mailjet = mailjet_new(); - $counter_contact = 0; - $getlist_params = [ - 'method' => 'GET', - 'limit' => get_mailjet_get_lists_limit(), - ]; - $contact_lists = $mailjet->contactslist($getlist_params)->getResponse(); - if (!empty($contact_lists) && is_array($contact_lists->Data)) { - foreach ($contact_lists->Data as $list) { - $contact_lists2[$list->ID] = $list->Name; - $counter_contact++; + $mailjetApiClient = mailjet_new(); + $contactsListResponse = MailjetApi::getMailjetContactLists(get_mailjet_get_lists_limit()); + if (false != $contactsListResponse) { + foreach ($contactsListResponse as $list) { + $contact_lists[$list['ID']] = $list['Name']; } } - return $contact_lists2; + return $contact_lists; } function mailjet_get_properties() { //get existing contact properties from MailJet $properties = []; - - - $mj = mailjet_new(); - $params = [ - 'method' => 'GET', - 'limit' => 0, - ]; - $response = $mj->ContactMetaData($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count >= 0) { - foreach ($response->Data as $property) { - $properties[$property->Name] = $property->Name; + $mailjetApiClient = mailjet_new(); + $response = MailjetApi::getMailjetContactProperties(); + if (false != $response) { + foreach ($response as $property) { + $properties[$property['Name']] = $property['Name']; } } @@ -960,29 +710,23 @@ function mailjet_mail($key, &$message, $params) { * Implements function for find a contact in some contact list */ function mailjet_find_conctact($email, $list_id) { - $mj = mailjet_new(); + $mailjetApiClient = mailjet_new(); $response = TRUE; - - $contact_params = [ - 'method' => 'GET', + $filters = [ 'ContactEmail' => $email, 'ContactsList' => $list_id, ]; - $result = $mj->listrecipient($contact_params); - - // 1 - unsubscribed, !=1 - subscribed - - if ($result->getResponse()->Count < 1) { - $response = FALSE; - } - - if (!empty($result->getResponse()->Data) && $result->getResponse()->Data[0]->IsUnsubscribed == 1) { + $result = $mailjetApiClient->get(Resources::$Listrecipient, ['filters' => $filters]); + if ($result->success() && $result->getCount() > 0) { + $data = $result->getData(); + if (isset($data[0]['IsUnsubscribed']) && true == $data[0]['IsUnsubscribed']) { + $response = FALSE; + } + } else { $response = FALSE; } - - return $response; } @@ -1037,17 +781,13 @@ function mailjet_validate_entity_form(array &$form, FormStateInterface $form_sta function mailjet_get_propertiy_type($property_name) { //get existing contact properties from MailJet $properties = []; - $mj = mailjet_new(); - $params = [ - 'method' => 'GET', - 'limit' => 0, - ]; - $response = $mj->ContactMetaData($params)->getResponse(); - if ($response && isset($response->Count) && $response->Count >= 0) { - foreach ($response->Data as $property) { + $mailjetApiClient = mailjet_new(); + $response = MailjetApi::getMailjetContactProperties(); + if (false != $response) { + foreach ($response as $property) { - if ($property->Name == $property_name) { - return $property->Datatype; + if ($property['Name'] == $property_name) { + return $property['Datatype']; break; } } diff --git a/modules/mailjet_subscription/src/Form/SubscriptionSignupPageForm.php b/modules/mailjet_subscription/src/Form/SubscriptionSignupPageForm.php index b05e43f..aae35c9 100644 --- a/modules/mailjet_subscription/src/Form/SubscriptionSignupPageForm.php +++ b/modules/mailjet_subscription/src/Form/SubscriptionSignupPageForm.php @@ -5,9 +5,12 @@ use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; +use MailjetTools\MailjetApi; use Symfony\Component\HttpFoundation\RedirectResponse; use Drupal\mailjet_subscription\Entity\SubscriptionForm; use Drupal\user\Entity\User; +use Mailjet\Client; +use Mailjet\Resources; /** * Subscribe to a Mailjet list. @@ -56,24 +59,25 @@ protected function getEditableConfigNames() { */ public function buildForm(array $form, FormStateInterface $form_state) { - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); $entity = mailjet_subscription_load($this->entity_id); $list_id = $entity->lists; $user = \Drupal::currentUser(); $is_un_subs = 0; - $contact_params = [ - 'method' => 'GET', + + $filters = [ 'ContactEmail' => $user->getEmail(), 'ContactsList' => $list_id, ]; - $result = $mailjet->listrecipient($contact_params); - - - if (!empty($result->getResponse()->Data)) { - $is_un_subs = $result->getResponse()->Data[0]->IsUnsubscribed == 1 ? 0 : 1; + $result = $mailjetApiClient->get(Resources::$Listrecipient, ['filters' => $filters]); + if ($result->success() && $result->getCount() > 0) { + $data = $result->getData(); + if (isset($data[0]['IsUnsubscribed'])) { + $is_un_subs = (true == $data[0]['IsUnsubscribed'] ? 0 : 1); + } } if ($user->id() == 0 || ($user->id() !== 0 && $is_un_subs !== 1)) { @@ -301,19 +305,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) { } } - private function unsubContactFromList($mailjet, $user, $list_id) { - $unsub_params = [ - 'method' => 'POST', - 'Action' => 'unsub', - 'Addresses' => [$user->getEmail()], - 'ListID' => $list_id, - ]; - $mailjet->resetRequest(); - return $mailjet->manycontacts($unsub_params)->getResponse(); - - } - - private function manageFields($mailjet, $entity, $form_values, $contact_id) { + private function manageFields($mailjetApiClient, $entity, $form_values, $contact_id) { $data = []; $fields = explode(',', $entity->fields_mailjet); @@ -345,22 +337,19 @@ private function manageFields($mailjet, $entity, $form_values, $contact_id) { return TRUE; } - $data_params = [ - 'method' => 'JSON', + $body = [ 'ContactID' => $contact_id, - 'ID' => $contact_id, - 'Data' => $data, + 'Data' => $data ]; - $mailjet->resetRequest(); - $response = $mailjet->contactdata($data_params)->getResponse(); - if (isset($response->ErrorInfo)) { + $response = $mailjetApiClient->put(Resources::$Contactdata, ['id' => $contact_id, 'body' => $body]); + if (!$response->success()) { $start = '[{ "'; $end = '" :'; - $ini = strpos($response->ErrorMessage, $start); + $ini = strpos($response->getErrorMessage(), $start); $ini += strlen($start); - $len = strpos($response->ErrorMessage, $end, $ini) - $ini; - $filed_prop_name = trim(substr($response->ErrorMessage, $ini, $len)); + $len = strpos($response->getErrorMessage(), $end, $ini) - $ini; + $filed_prop_name = trim(substr($response->getErrorMessage(), $ini, $len)); $missmatch_values = !empty($entity->error_data_types) ? $entity->error_data_types : 'Incorrect data values. Please enter the correct values according to the example of the description in the field: < %id >'; $missmatch_values = str_replace("%id", $filed_prop_name, $missmatch_values); @@ -393,7 +382,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) { global $base_url; $form_values = $form_state->getValues(); $entity = mailjet_subscription_load($form_values['signup_id_form']); - $email_text_button = !empty($entity->email_text_button) ? $entity->email_text_button : t('Click here to confirm'); $email_text_description = !empty($entity->email_text_description) ? $entity->email_text_description : t('You may copy/paste this link into your browser:'); $email_text_thank_you = !empty($entity->email_text_thank_you) ? $entity->email_text_thank_you : t('Thanks,'); @@ -405,25 +393,23 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $list_id = $entity->lists; $user = \Drupal::currentUser(); - $mailjet = mailjet_new(); + $mailjetApiClient = mailjet_new(); // $check_complate = FALSE; //Unsubscribe if (!empty($form_values['unsubscribe_id'])) { // $url = 'http://api.mailjet.com/v3/REST/user/' . $user->getEmail(); -// $result = $mailjet->generalRequest(FALSE, [], 'GET', $url); +// $result = $mailjetApiClient->generalRequest(FALSE, [], 'GET', $url); // $result_arr = json_decode($result); // $user_id = $result_arr->Data[0]->ID; - - - $response = $this->unsubContactFromList($mailjet, $user, $list_id); + $responseContactList = MailjetApi::syncMailjetContact($list_id, ['Email' => $user->getEmail()], 'unsub'); //echo $list_id; //echo "

";
 //var_dump($response);
 //exit;
-      if ($response && isset($response->Count) && $response->Count > 0) {
+      if (false != $responseContactList) {
         \Drupal::logger('mailjet_messages')
           ->error(t('The new contact was unsubscribed from list #' . $list_id . '.'));
         drupal_set_message(t('The user is unsubscribe successfully!'));
diff --git a/src/Form/DomainSettingsForm.php b/src/Form/DomainSettingsForm.php
index e8751b9..0007d29 100644
--- a/src/Form/DomainSettingsForm.php
+++ b/src/Form/DomainSettingsForm.php
@@ -46,16 +46,16 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     if ($domains = mailjet_user_domain_list()) {
       foreach ($domains as $domain) {
-        if (is_object($domain->Email)) {
-          $email = $domain->Email->Email;
+        if (is_object($domain['Email'])) {
+          $email = $domain['Email']['Email'];
         }
         else {
-          $email = $domain->Email;
+          $email = $domain['Email'];
         }
         $options[$email] = [
           'domain' => str_replace('*@', '', $email),
-          'enabled' => $domain->Status,
-          'file_name' => $domain->Filename,
+          'enabled' => $domain['Status'],
+          'file_name' => $domain['Filename'],
         ];
       }
     }
diff --git a/src/Form/MailjetApiForm.php b/src/Form/MailjetApiForm.php
index 59412ac..4c7683d 100644
--- a/src/Form/MailjetApiForm.php
+++ b/src/Form/MailjetApiForm.php
@@ -10,6 +10,8 @@
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use MailJet\MailJet;
+use MailjetTools\MailjetApi;
+use Mailjet\Resources;
 
 class MailjetApiForm extends ConfigFormBase {
 
@@ -81,56 +83,43 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-
-    $config = \Drupal::service('config.factory')
-      ->getEditable('mailjet.settings');
-
-
-    $config->set('mailjet_username', $form_state->getValue('mailjet_username'));
-    $config->set('mailjet_password', $form_state->getValue('mailjet_password'));
-    $config->save();
-
-    $mailjet = new MailJet($form_state->getValue('mailjet_username'), $form_state->getValue('mailjet_password'));
-
-
-    $paramsProfile = [
-      'method' => 'GET',
-    ];
-
-    $response = $mailjet->myprofile($paramsProfile)->getResponse();
-
-    if ($response) {
-
-      $config->set('mailjet_active', TRUE);
-
-      $params = [
-        'AllowedAccess' => 'campaigns,contacts,stats,pricing,account,reports',
-        'method' => 'JSON',
-        'APIKeyALT' => $mailjet->getAPIKey(),
-        'TokenType' => 'iframe',
-        'IsActive' => TRUE,
-      ];
-      $mailjet->resetRequest();
-      $response2 = $mailjet->apitoken($params)->getResponse();
-
-      if ($response2->Count > 0) {
-
-        $config->set('APItoken', $response2->Data[0]->Token);
-        $config->save();
-        mailjet_first_sync(mailjet_get_default_list_id(mailjet_new()));
-
-        drupal_set_message(t('The configuration options have been saved.'));
-        drupal_flush_all_caches();
+  public function submitForm(array &$form, FormStateInterface $form_state)
+  {
+      $config = \Drupal::service('config.factory')
+          ->getEditable('mailjet.settings');
+
+      $config->set('mailjet_username', $form_state->getValue('mailjet_username'));
+      $config->set('mailjet_password', $form_state->getValue('mailjet_password'));
+      $config->save();
+
+      $mailjetApiClient = MailjetApi::getApiClient($form_state->getValue('mailjet_username'),
+      $form_state->getValue('mailjet_password'));
+      $response = $mailjetApiClient->get(Resources::$Myprofile);
+      if ($response->success()) {
+          $config->set('mailjet_active', TRUE);
+
+          $params = [
+              'AllowedAccess' => 'campaigns,contacts,stats,pricing,account,reports',
+              'APIKeyALT' => $form_state->getValue('mailjet_username'),
+              'TokenType' => 'iframe',
+              'IsActive' => TRUE,
+          ];
+
+          $responseApiToken = MailjetApi::createApiToken($params);
+          if (false != $responseApiToken) {
+              $config->set('APItoken', $responseApiToken[0]['Token']);
+              $config->save();
+              mailjet_first_sync(mailjet_get_default_list_id(mailjet_new()));
+
+              drupal_set_message(t('The configuration options have been saved.'));
+              drupal_flush_all_caches();
+          } else {
+              $form_state->setErrorByName('mailjet_username', t('Token was NOT generated! Please try again.'));
+          }
+      } else {
+          drupal_set_message(t('Please verify that you have entered your API and secret key correctly. Please note this plug-in is compatible for Mailjet v3 accounts only. Click  here for more information'),
+              'error');
       }
-      else {
-        $form_state->setErrorByName('mailjet_username', t('Token was NOT generated! Please try again.'));
-      }
-    }
-    else {
-      drupal_set_message(t('Please verify that you have entered your API and secret key correctly. Please note this plug-in is compatible for Mailjet v3 accounts only. Click  here for more information'), 'error');
-    }
-
   }
 
 }
diff --git a/src/Form/MailjetSettingsForm.php b/src/Form/MailjetSettingsForm.php
index a8cb02e..5a40e5d 100644
--- a/src/Form/MailjetSettingsForm.php
+++ b/src/Form/MailjetSettingsForm.php
@@ -108,11 +108,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     $tracking_url = $base_url . '/mailjetevent';
     $current_events = [];
-    foreach ($tracking_check->Data as $event) {
-      if (array_key_exists($event->EventType, $check)) {
-        $check[$event->EventType] = 1;
-        $tracking_url = $event->Url;
-        $current_events[$event->EventType] = $event->ID;
+    foreach ($tracking_check as $event) {
+      if (array_key_exists($event['EventType'], $check)) {
+        $check[$event['EventType']] = 1;
+        $tracking_url = $event['Url'];
+        $current_events[$event['EventType']] = $event['ID'];
       }
     }
     $current_events = serialize($current_events);
diff --git a/src/Form/SubsribeEmailForm.php b/src/Form/SubsribeEmailForm.php
index ee26bf0..28c6498 100644
--- a/src/Form/SubsribeEmailForm.php
+++ b/src/Form/SubsribeEmailForm.php
@@ -8,6 +8,9 @@
 
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
+use MailjetTools\MailjetApi;
+use Mailjet\Client;
+use Mailjet\Resources;
 
 class SubsribeEmailForm extends ConfigFormBase {
 
@@ -29,7 +32,6 @@ protected function getEditableConfigNames() {
   public function buildForm(array $form, FormStateInterface $form_state) {
 
     $form = [];
-
     if (isset($_GET['list']) && !empty($_GET['list'])) {
       $list_id = $_GET['list'];
     }
@@ -42,25 +44,19 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     else {
       return FALSE;
     }
-
     $signup_form = mailjet_subscription_load($form_hidden_id);
-    $mailjet = mailjet_new();
-
-    $add_params = [
-      'method' => 'POST',
-      'Action' => 'Add',
-      'Force' => TRUE,
-      'Addresses' => [$sec_code_email], 
-      'ListID' => $list_id,
+    $mailjetApiClient = mailjet_new();
+
+    $contact = [
+      'Email' => $sec_code_email
     ];
-    $mailjet->resetRequest();
-    $response = $mailjet->manycontacts($add_params)->getResponse();
 
-    if ($response && isset($response->Count) && $response->Count > 0) {
+    //add new email
+    $response = MailjetApi::syncMailjetContact($list_id, $contact);
+    if (false != $response) {
       if (!empty($signup_form->success_message_subsribe)) {
         drupal_set_message(t($signup_form->success_message_subsribe), 'status');
-      }
-      else {
+      } else {
         drupal_set_message(t('You have successfully subscribed to Mailjet contact list! Thank you!'));
       }
     }
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 0000000..f965bfd
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,7 @@
+
+ *     Jordi Boggiano 
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier 
+ * @author Jordi Boggiano 
+ * @see    http://www.php-fig.org/psr/psr-0/
+ * @see    http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    // PSR-4
+    private $prefixLengthsPsr4 = array();
+    private $prefixDirsPsr4 = array();
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    private $prefixesPsr0 = array();
+    private $fallbackDirsPsr0 = array();
+
+    private $useIncludePath = false;
+    private $classMap = array();
+    private $classMapAuthoritative = false;
+    private $missingClasses = array();
+    private $apcuPrefix;
+
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+
+        return array();
+    }
+
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    (array) $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    (array) $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    (array) $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                (array) $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                (array) $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return bool|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            includeFile($file);
+
+            return true;
+        }
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath . '\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        if (file_exists($file = $dir . $pathEnd)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
+}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
new file mode 100644
index 0000000..f27399a
--- /dev/null
+++ b/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..c692e9a
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,17 @@
+ $vendorDir . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+    'PHPMailer' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
+    'PHPMailerOAuth' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauth.php',
+    'PHPMailerOAuthGoogle' => $vendorDir . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
+    'POP3' => $vendorDir . '/phpmailer/phpmailer/class.pop3.php',
+    'SMTP' => $vendorDir . '/phpmailer/phpmailer/class.smtp.php',
+    'ntlm_sasl_client_class' => $vendorDir . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
+    'phpmailerException' => $vendorDir . '/phpmailer/phpmailer/class.phpmailer.php',
+);
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..0e9caa2
--- /dev/null
+++ b/vendor/composer/autoload_files.php
@@ -0,0 +1,13 @@
+ $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
+    'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
+    'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
+    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..e2036e0
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,10 @@
+ array($vendorDir . '/mailjet/mailjet-apiv3-php/src'),
+);
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000..e4272a0
--- /dev/null
+++ b/vendor/composer/autoload_psr4.php
@@ -0,0 +1,15 @@
+ array($vendorDir . '/psr/http-message/src'),
+    'MailjetTools\\' => array($baseDir . '/lib/mailjet-api-php/src'),
+    'MailjetIframe\\' => array($vendorDir . '/mailjet/Mailjet-iframe-v3/src'),
+    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
+    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
+    'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..6c0e5ce
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,70 @@
+= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require_once __DIR__ . '/autoload_static.php';
+
+            call_user_func(\Composer\Autoload\ComposerStaticInita71033f6e2b1eccf725d30e49329d289::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
+
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
+
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
+            }
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = Composer\Autoload\ComposerStaticInita71033f6e2b1eccf725d30e49329d289::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequirea71033f6e2b1eccf725d30e49329d289($fileIdentifier, $file);
+        }
+
+        return $loader;
+    }
+}
+
+function composerRequirea71033f6e2b1eccf725d30e49329d289($fileIdentifier, $file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        require $file;
+
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+    }
+}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..b50b460
--- /dev/null
+++ b/vendor/composer/autoload_static.php
@@ -0,0 +1,92 @@
+ __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
+        'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
+        'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
+        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
+    );
+
+    public static $prefixLengthsPsr4 = array (
+        'P' => 
+        array (
+            'Psr\\Http\\Message\\' => 17,
+        ),
+        'M' => 
+        array (
+            'MailjetTools\\' => 13,
+            'MailjetIframe\\' => 14,
+        ),
+        'G' => 
+        array (
+            'GuzzleHttp\\Psr7\\' => 16,
+            'GuzzleHttp\\Promise\\' => 19,
+            'GuzzleHttp\\' => 11,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'Psr\\Http\\Message\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/http-message/src',
+        ),
+        'MailjetTools\\' => 
+        array (
+            0 => __DIR__ . '/../..' . '/lib/mailjet-api-php/src',
+        ),
+        'MailjetIframe\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/mailjet/Mailjet-iframe-v3/src',
+        ),
+        'GuzzleHttp\\Psr7\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
+        ),
+        'GuzzleHttp\\Promise\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
+        ),
+        'GuzzleHttp\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'M' => 
+        array (
+            'Mailjet' => 
+            array (
+                0 => __DIR__ . '/..' . '/mailjet/mailjet-apiv3-php/src',
+            ),
+        ),
+    );
+
+    public static $classMap = array (
+        'EasyPeasyICS' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/EasyPeasyICS.php',
+        'PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
+        'PHPMailerOAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauth.php',
+        'PHPMailerOAuthGoogle' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmaileroauthgoogle.php',
+        'POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.pop3.php',
+        'SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.smtp.php',
+        'ntlm_sasl_client_class' => __DIR__ . '/..' . '/phpmailer/phpmailer/extras/ntlm_sasl_client.php',
+        'phpmailerException' => __DIR__ . '/..' . '/phpmailer/phpmailer/class.phpmailer.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInita71033f6e2b1eccf725d30e49329d289::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInita71033f6e2b1eccf725d30e49329d289::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInita71033f6e2b1eccf725d30e49329d289::$prefixesPsr0;
+            $loader->classMap = ComposerStaticInita71033f6e2b1eccf725d30e49329d289::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000..81a144b
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,475 @@
+[
+    {
+        "name": "guzzlehttp/guzzle",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/guzzle.git",
+            "reference": "9799bbcb90ed2df488adb0924169163156483e52"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9799bbcb90ed2df488adb0924169163156483e52",
+            "reference": "9799bbcb90ed2df488adb0924169163156483e52",
+            "shasum": ""
+        },
+        "require": {
+            "ext-json": "*",
+            "guzzlehttp/promises": "^1.0",
+            "guzzlehttp/psr7": "^1.4",
+            "php": ">=5.5"
+        },
+        "require-dev": {
+            "ext-curl": "*",
+            "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
+            "psr/log": "^1.1"
+        },
+        "suggest": {
+            "psr/log": "Required for using the Log middleware"
+        },
+        "time": "2018-12-07T08:18:25+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "6.3-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\": "src/"
+            },
+            "files": [
+                "src/functions_include.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle is a PHP HTTP client library",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "client",
+            "curl",
+            "framework",
+            "http",
+            "http client",
+            "rest",
+            "web service"
+        ]
+    },
+    {
+        "name": "guzzlehttp/promises",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/promises.git",
+            "reference": "926eaa3ff73cde2becf652b785831bcb7618568a"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/promises/zipball/926eaa3ff73cde2becf652b785831bcb7618568a",
+            "reference": "926eaa3ff73cde2becf652b785831bcb7618568a",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.5.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^4.8.36"
+        },
+        "time": "2018-10-30T00:20:04+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.4-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Promise\\": "src/"
+            },
+            "files": [
+                "src/functions_include.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle promises library",
+        "keywords": [
+            "promise"
+        ]
+    },
+    {
+        "name": "guzzlehttp/psr7",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/psr7.git",
+            "reference": "5e61346ab1e1ca7d01d2f633bad9574d35717781"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/guzzle/psr7/zipball/5e61346ab1e1ca7d01d2f633bad9574d35717781",
+            "reference": "5e61346ab1e1ca7d01d2f633bad9574d35717781",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0",
+            "psr/http-message": "~1.0",
+            "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+        },
+        "provide": {
+            "psr/http-message-implementation": "1.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+        },
+        "suggest": {
+            "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+        },
+        "time": "2018-12-07T15:04:46+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.5-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-4": {
+                "GuzzleHttp\\Psr7\\": "src/"
+            },
+            "files": [
+                "src/functions_include.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            },
+            {
+                "name": "Tobias Schultze",
+                "homepage": "https://github.com/Tobion"
+            }
+        ],
+        "description": "PSR-7 message implementation that also provides common utility methods",
+        "keywords": [
+            "http",
+            "message",
+            "psr-7",
+            "request",
+            "response",
+            "stream",
+            "uri",
+            "url"
+        ]
+    },
+    {
+        "name": "mailjet/Mailjet-iframe-v3",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "git@github.com:mailjet/Mailjet-iframe-v3.git",
+            "reference": "c7e5c5b98e76f1501b4a90d869e83934c0137234"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/mailjet/Mailjet-iframe-v3/zipball/c7e5c5b98e76f1501b4a90d869e83934c0137234",
+            "reference": "c7e5c5b98e76f1501b4a90d869e83934c0137234",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.4.0"
+        },
+        "time": "2018-11-19T08:24:34+00:00",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-4": {
+                "MailjetIframe\\": "src"
+            }
+        },
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Mailjet",
+                "email": "dev@mailjet.com",
+                "homepage": "https://dev.mailjet.com"
+            }
+        ],
+        "description": "Mailjet iFrame wrapper",
+        "homepage": "https://github.com/mailjet/Mailjet-iframe-v3/",
+        "keywords": [
+            "api",
+            "campaign",
+            "email",
+            "iframe",
+            "mailjet",
+            "marketing",
+            "php"
+        ],
+        "support": {
+            "source": "https://github.com/mailjet/Mailjet-iframe-v3/tree/master",
+            "issues": "https://github.com/mailjet/Mailjet-iframe-v3/issues"
+        }
+    },
+    {
+        "name": "mailjet/mailjet-apiv3-php",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/mailjet/mailjet-apiv3-php.git",
+            "reference": "9d89b9a424a9631bff8e499cbbe34058481e8102"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/mailjet/mailjet-apiv3-php/zipball/9d89b9a424a9631bff8e499cbbe34058481e8102",
+            "reference": "9d89b9a424a9631bff8e499cbbe34058481e8102",
+            "shasum": ""
+        },
+        "require": {
+            "guzzlehttp/guzzle": "~6.0|~5.3",
+            "php": ">=5.4.0"
+        },
+        "require-dev": {
+            "php-coveralls/php-coveralls": "^1.0",
+            "phpunit/phpunit": "^4.8"
+        },
+        "time": "2018-10-31T13:24:45+00:00",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Mailjet": "src/"
+            }
+        },
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Mailjet",
+                "email": "dev@mailjet.com",
+                "homepage": "https://dev.mailjet.com"
+            }
+        ],
+        "description": "PHP wrapper for the Mailjet API",
+        "homepage": "https://github.com/mailjet/mailjet-apiv3-php/",
+        "keywords": [
+            "api",
+            "email",
+            "mailjet",
+            "php",
+            "v3"
+        ],
+        "support": {
+            "source": "https://github.com/mailjet/mailjet-apiv3-php/tree/v1.4.1",
+            "issues": "https://github.com/mailjet/mailjet-apiv3-php/issues"
+        }
+    },
+    {
+        "name": "phpmailer/phpmailer",
+        "version": "v5.2.27",
+        "version_normalized": "5.2.27.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/PHPMailer/PHPMailer.git",
+            "reference": "dde1db116511aa4956389d75546c5be4c2beb2a6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dde1db116511aa4956389d75546c5be4c2beb2a6",
+            "reference": "dde1db116511aa4956389d75546c5be4c2beb2a6",
+            "shasum": ""
+        },
+        "require": {
+            "ext-ctype": "*",
+            "php": ">=5.0.0"
+        },
+        "require-dev": {
+            "doctrine/annotations": "1.2.*",
+            "jms/serializer": "0.16.*",
+            "phpdocumentor/phpdocumentor": "2.*",
+            "phpunit/phpunit": "4.8.*",
+            "symfony/debug": "2.8.*",
+            "symfony/filesystem": "2.8.*",
+            "symfony/translation": "2.8.*",
+            "symfony/yaml": "2.8.*",
+            "zendframework/zend-cache": "2.5.1",
+            "zendframework/zend-config": "2.5.1",
+            "zendframework/zend-eventmanager": "2.5.1",
+            "zendframework/zend-filter": "2.5.1",
+            "zendframework/zend-i18n": "2.5.1",
+            "zendframework/zend-json": "2.5.1",
+            "zendframework/zend-math": "2.5.1",
+            "zendframework/zend-serializer": "2.5.*",
+            "zendframework/zend-servicemanager": "2.5.*",
+            "zendframework/zend-stdlib": "2.5.1"
+        },
+        "suggest": {
+            "league/oauth2-google": "Needed for Google XOAUTH2 authentication"
+        },
+        "time": "2018-11-15T22:32:31+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "classmap": [
+                "class.phpmailer.php",
+                "class.phpmaileroauth.php",
+                "class.phpmaileroauthgoogle.php",
+                "class.smtp.php",
+                "class.pop3.php",
+                "extras/EasyPeasyICS.php",
+                "extras/ntlm_sasl_client.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"
+    },
+    {
+        "name": "psr/http-message",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/php-fig/http-message.git",
+            "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+            "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.0"
+        },
+        "time": "2016-08-06T14:39:51+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-4": {
+                "Psr\\Http\\Message\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "PHP-FIG",
+                "homepage": "http://www.php-fig.org/"
+            }
+        ],
+        "description": "Common interface for HTTP messages",
+        "homepage": "https://github.com/php-fig/http-message",
+        "keywords": [
+            "http",
+            "http-message",
+            "psr",
+            "psr-7",
+            "request",
+            "response"
+        ]
+    },
+    {
+        "name": "ralouphie/getallheaders",
+        "version": "3.0.2",
+        "version_normalized": "3.0.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/ralouphie/getallheaders.git",
+            "reference": "beb49b96960f0cbf17e7fbcaaddc8eb434e126eb"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/beb49b96960f0cbf17e7fbcaaddc8eb434e126eb",
+            "reference": "beb49b96960f0cbf17e7fbcaaddc8eb434e126eb",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "^5",
+            "satooshi/php-coveralls": ">=1.0"
+        },
+        "time": "2018-12-11T21:53:24+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "files": [
+                "src/getallheaders.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Ralph Khattar",
+                "email": "ralph.khattar@gmail.com"
+            }
+        ],
+        "description": "A polyfill for getallheaders."
+    }
+]
diff --git a/vendor/guzzlehttp/guzzle b/vendor/guzzlehttp/guzzle
new file mode 160000
index 0000000..9799bbc
--- /dev/null
+++ b/vendor/guzzlehttp/guzzle
@@ -0,0 +1 @@
+Subproject commit 9799bbcb90ed2df488adb0924169163156483e52
diff --git a/vendor/guzzlehttp/promises b/vendor/guzzlehttp/promises
new file mode 160000
index 0000000..926eaa3
--- /dev/null
+++ b/vendor/guzzlehttp/promises
@@ -0,0 +1 @@
+Subproject commit 926eaa3ff73cde2becf652b785831bcb7618568a
diff --git a/vendor/guzzlehttp/psr7 b/vendor/guzzlehttp/psr7
new file mode 160000
index 0000000..5e61346
--- /dev/null
+++ b/vendor/guzzlehttp/psr7
@@ -0,0 +1 @@
+Subproject commit 5e61346ab1e1ca7d01d2f633bad9574d35717781
diff --git a/vendor/mailjet/Mailjet-iframe-v3 b/vendor/mailjet/Mailjet-iframe-v3
new file mode 160000
index 0000000..c7e5c5b
--- /dev/null
+++ b/vendor/mailjet/Mailjet-iframe-v3
@@ -0,0 +1 @@
+Subproject commit c7e5c5b98e76f1501b4a90d869e83934c0137234
diff --git a/vendor/mailjet/mailjet-apiv3-php b/vendor/mailjet/mailjet-apiv3-php
new file mode 160000
index 0000000..9d89b9a
--- /dev/null
+++ b/vendor/mailjet/mailjet-apiv3-php
@@ -0,0 +1 @@
+Subproject commit 9d89b9a424a9631bff8e499cbbe34058481e8102
diff --git a/vendor/phpmailer/phpmailer/LICENSE b/vendor/phpmailer/phpmailer/LICENSE
new file mode 100644
index 0000000..f166cc5
--- /dev/null
+++ b/vendor/phpmailer/phpmailer/LICENSE
@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C)   
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  , 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
\ No newline at end of file
diff --git a/vendor/phpmailer/phpmailer/PHPMailerAutoload.php b/vendor/phpmailer/phpmailer/PHPMailerAutoload.php
new file mode 100644
index 0000000..eaa2e30
--- /dev/null
+++ b/vendor/phpmailer/phpmailer/PHPMailerAutoload.php
@@ -0,0 +1,49 @@
+
+ * @author Jim Jagielski (jimjag) 
+ * @author Andy Prevost (codeworxtech) 
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer SPL autoloader.
+ * @param string $classname The name of the class to load
+ */
+function PHPMailerAutoload($classname)
+{
+    //Can't use __DIR__ as it's only in PHP 5.3+
+    $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
+    if (is_readable($filename)) {
+        require $filename;
+    }
+}
+
+if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
+    //SPL autoloading was introduced in PHP 5.1.2
+    if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
+        spl_autoload_register('PHPMailerAutoload', true, true);
+    } else {
+        spl_autoload_register('PHPMailerAutoload');
+    }
+} else {
+    /**
+     * Fall back to traditional autoload for old PHP versions
+     * @param string $classname The name of the class to load
+     */
+    function __autoload($classname)
+    {
+        PHPMailerAutoload($classname);
+    }
+}
diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION
new file mode 100644
index 0000000..32779c1
--- /dev/null
+++ b/vendor/phpmailer/phpmailer/VERSION
@@ -0,0 +1 @@
+5.2.27
\ No newline at end of file
diff --git a/vendor/phpmailer/phpmailer/class.phpmailer.php b/vendor/phpmailer/phpmailer/class.phpmailer.php
new file mode 100644
index 0000000..12a9587
--- /dev/null
+++ b/vendor/phpmailer/phpmailer/class.phpmailer.php
@@ -0,0 +1,4061 @@
+
+ * @author Jim Jagielski (jimjag) 
+ * @author Andy Prevost (codeworxtech) 
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2014 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * @package PHPMailer
+ * @author Marcus Bointon (Synchro/coolbru) 
+ * @author Jim Jagielski (jimjag) 
+ * @author Andy Prevost (codeworxtech) 
+ * @author Brent R. Matzelle (original founder)
+ */
+class PHPMailer
+{
+    /**
+     * The PHPMailer Version number.
+     * @var string
+     */
+    public $Version = '5.2.27';
+
+    /**
+     * Email priority.
+     * Options: null (default), 1 = High, 3 = Normal, 5 = low.
+     * When null, the header is not set at all.
+     * @var integer
+     */
+    public $Priority = null;
+
+    /**
+     * The character set of the message.
+     * @var string
+     */
+    public $CharSet = 'iso-8859-1';
+
+    /**
+     * The MIME Content-type of the message.
+     * @var string
+     */
+    public $ContentType = 'text/plain';
+
+    /**
+     * The message encoding.
+     * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
+     * @var string
+     */
+    public $Encoding = '8bit';
+
+    /**
+     * Holds the most recent mailer error message.
+     * @var string
+     */
+    public $ErrorInfo = '';
+
+    /**
+     * The From email address for the message.
+     * @var string
+     */
+    public $From = 'root@localhost';
+
+    /**
+     * The From name of the message.
+     * @var string
+     */
+    public $FromName = 'Root User';
+
+    /**
+     * The Sender email (Return-Path) of the message.
+     * If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
+     * @var string
+     */
+    public $Sender = '';
+
+    /**
+     * The Return-Path of the message.
+     * If empty, it will be set to either From or Sender.
+     * @var string
+     * @deprecated Email senders should never set a return-path header;
+     * it's the receiver's job (RFC5321 section 4.4), so this no longer does anything.
+     * @link https://tools.ietf.org/html/rfc5321#section-4.4 RFC5321 reference
+     */
+    public $ReturnPath = '';
+
+    /**
+     * The Subject of the message.
+     * @var string
+     */
+    public $Subject = '';
+
+    /**
+     * An HTML or plain text message body.
+     * If HTML then call isHTML(true).
+     * @var string
+     */
+    public $Body = '';
+
+    /**
+     * The plain-text message body.
+     * This body can be read by mail clients that do not have HTML email
+     * capability such as mutt & Eudora.
+     * Clients that can read HTML will view the normal Body.
+     * @var string
+     */
+    public $AltBody = '';
+
+    /**
+     * An iCal message part body.
+     * Only supported in simple alt or alt_inline message types
+     * To generate iCal events, use the bundled extras/EasyPeasyICS.php class or iCalcreator
+     * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
+     * @link http://kigkonsult.se/iCalcreator/
+     * @var string
+     */
+    public $Ical = '';
+
+    /**
+     * The complete compiled MIME message body.
+     * @access protected
+     * @var string
+     */
+    protected $MIMEBody = '';
+
+    /**
+     * The complete compiled MIME message headers.
+     * @var string
+     * @access protected
+     */
+    protected $MIMEHeader = '';
+
+    /**
+     * Extra headers that createHeader() doesn't fold in.
+     * @var string
+     * @access protected
+     */
+    protected $mailHeader = '';
+
+    /**
+     * Word-wrap the message body to this number of chars.
+     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
+     * @var integer
+     */
+    public $WordWrap = 0;
+
+    /**
+     * Which method to use to send mail.
+     * Options: "mail", "sendmail", or "smtp".
+     * @var string
+     */
+    public $Mailer = 'mail';
+
+    /**
+     * The path to the sendmail program.
+     * @var string
+     */
+    public $Sendmail = '/usr/sbin/sendmail';
+
+    /**
+     * Whether mail() uses a fully sendmail-compatible MTA.
+     * One which supports sendmail's "-oi -f" options.
+     * @var boolean
+     */
+    public $UseSendmailOptions = true;
+
+    /**
+     * Path to PHPMailer plugins.
+     * Useful if the SMTP class is not in the PHP include path.
+     * @var string
+     * @deprecated Should not be needed now there is an autoloader.
+     */
+    public $PluginDir = '';
+
+    /**
+     * The email address that a reading confirmation should be sent to, also known as read receipt.
+     * @var string
+     */
+    public $ConfirmReadingTo = '';
+
+    /**
+     * The hostname to use in the Message-ID header and as default HELO string.
+     * If empty, PHPMailer attempts to find one with, in order,
+     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
+     * 'localhost.localdomain'.
+     * @var string
+     */
+    public $Hostname = '';
+
+    /**
+     * An ID to be used in the Message-ID header.
+     * If empty, a unique id will be generated.
+     * You can set your own, but it must be in the format "",
+     * as defined in RFC5322 section 3.6.4 or it will be ignored.
+     * @see https://tools.ietf.org/html/rfc5322#section-3.6.4
+     * @var string
+     */
+    public $MessageID = '';
+
+    /**
+     * The message Date to be used in the Date header.
+     * If empty, the current date will be added.
+     * @var string
+     */
+    public $MessageDate = '';
+
+    /**
+     * SMTP hosts.
+     * Either a single hostname or multiple semicolon-delimited hostnames.
+     * You can also specify a different port
+     * for each host by using this format: [hostname:port]
+     * (e.g. "smtp1.example.com:25;smtp2.example.com").
+     * You can also specify encryption type, for example:
+     * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
+     * Hosts will be tried in order.
+     * @var string
+     */
+    public $Host = 'localhost';
+
+    /**
+     * The default SMTP server port.
+     * @var integer
+     * @TODO Why is this needed when the SMTP class takes care of it?
+     */
+    public $Port = 25;
+
+    /**
+     * The SMTP HELO of the message.
+     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
+     * one with the same method described above for $Hostname.
+     * @var string
+     * @see PHPMailer::$Hostname
+     */
+    public $Helo = '';
+
+    /**
+     * What kind of encryption to use on the SMTP connection.
+     * Options: '', 'ssl' or 'tls'
+     * @var string
+     */
+    public $SMTPSecure = '';
+
+    /**
+     * Whether to enable TLS encryption automatically if a server supports it,
+     * even if `SMTPSecure` is not set to 'tls'.
+     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
+     * @var boolean
+     */
+    public $SMTPAutoTLS = true;
+
+    /**
+     * Whether to use SMTP authentication.
+     * Uses the Username and Password properties.
+     * @var boolean
+     * @see PHPMailer::$Username
+     * @see PHPMailer::$Password
+     */
+    public $SMTPAuth = false;
+
+    /**
+     * Options array passed to stream_context_create when connecting via SMTP.
+     * @var array
+     */
+    public $SMTPOptions = array();
+
+    /**
+     * SMTP username.
+     * @var string
+     */
+    public $Username = '';
+
+    /**
+     * SMTP password.
+     * @var string
+     */
+    public $Password = '';
+
+    /**
+     * SMTP auth type.
+     * Options are CRAM-MD5, LOGIN, PLAIN, NTLM, XOAUTH2, attempted in that order if not specified
+     * @var string
+     */
+    public $AuthType = '';
+
+    /**
+     * SMTP realm.
+     * Used for NTLM auth
+     * @var string
+     */
+    public $Realm = '';
+
+    /**
+     * SMTP workstation.
+     * Used for NTLM auth
+     * @var string
+     */
+    public $Workstation = '';
+
+    /**
+     * The SMTP server timeout in seconds.
+     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+     * @var integer
+     */
+    public $Timeout = 300;
+
+    /**
+     * SMTP class debug output mode.
+     * Debug output level.
+     * Options:
+     * * `0` No output
+     * * `1` Commands
+     * * `2` Data and commands
+     * * `3` As 2 plus connection status
+     * * `4` Low-level data output
+     * @var integer
+     * @see SMTP::$do_debug
+     */
+    public $SMTPDebug = 0;
+
+    /**
+     * How to handle debug output.
+     * Options:
+     * * `echo` Output plain-text as-is, appropriate for CLI
+     * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output + * * `error_log` Output to error log as configured in php.ini + * + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: + * + * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; + * + * @var string|callable + * @see SMTP::$Debugoutput + */ + public $Debugoutput = 'echo'; + + /** + * Whether to keep SMTP connection open after each message. + * If this is set to true then to close the connection + * requires an explicit call to smtpClose(). + * @var boolean + */ + public $SMTPKeepAlive = false; + + /** + * Whether to split multiple to addresses into multiple messages + * or send them all in one message. + * Only supported in `mail` and `sendmail` transports, not in SMTP. + * @var boolean + */ + public $SingleTo = false; + + /** + * Storage for addresses when SingleTo is enabled. + * @var array + * @TODO This should really not be public + */ + public $SingleToArray = array(); + + /** + * Whether to generate VERP addresses on send. + * Only applicable when sending via SMTP. + * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path + * @link http://www.postfix.org/VERP_README.html Postfix VERP info + * @var boolean + */ + public $do_verp = false; + + /** + * Whether to allow sending messages with an empty body. + * @var boolean + */ + public $AllowEmpty = false; + + /** + * The default line ending. + * @note The default remains "\n". We force CRLF where we know + * it must be used via self::CRLF. + * @var string + */ + public $LE = "\n"; + + /** + * DKIM selector. + * @var string + */ + public $DKIM_selector = ''; + + /** + * DKIM Identity. + * Usually the email address used as the source of the email. + * @var string + */ + public $DKIM_identity = ''; + + /** + * DKIM passphrase. + * Used if your key is encrypted. + * @var string + */ + public $DKIM_passphrase = ''; + + /** + * DKIM signing domain name. + * @example 'example.com' + * @var string + */ + public $DKIM_domain = ''; + + /** + * DKIM private key file path. + * @var string + */ + public $DKIM_private = ''; + + /** + * DKIM private key string. + * If set, takes precedence over `$DKIM_private`. + * @var string + */ + public $DKIM_private_string = ''; + + /** + * Callback Action function name. + * + * The function that handles the result of the send email action. + * It is called out by send() for each email sent. + * + * Value can be any php callable: http://www.php.net/is_callable + * + * Parameters: + * boolean $result result of the send action + * array $to email addresses of the recipients + * array $cc cc email addresses + * array $bcc bcc email addresses + * string $subject the subject + * string $body the email body + * string $from email address of sender + * @var string + */ + public $action_function = ''; + + /** + * What to put in the X-Mailer header. + * Options: An empty string for PHPMailer default, whitespace for none, or a string to use + * @var string + */ + public $XMailer = ''; + + /** + * Which validator to use by default when validating email addresses. + * May be a callable to inject your own validator, but there are several built-in validators. + * @see PHPMailer::validateAddress() + * @var string|callable + * @static + */ + public static $validator = 'auto'; + + /** + * An instance of the SMTP sender class. + * @var SMTP + * @access protected + */ + protected $smtp = null; + + /** + * The array of 'to' names and addresses. + * @var array + * @access protected + */ + protected $to = array(); + + /** + * The array of 'cc' names and addresses. + * @var array + * @access protected + */ + protected $cc = array(); + + /** + * The array of 'bcc' names and addresses. + * @var array + * @access protected + */ + protected $bcc = array(); + + /** + * The array of reply-to names and addresses. + * @var array + * @access protected + */ + protected $ReplyTo = array(); + + /** + * An array of all kinds of addresses. + * Includes all of $to, $cc, $bcc + * @var array + * @access protected + * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc + */ + protected $all_recipients = array(); + + /** + * An array of names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $all_recipients + * and one of $to, $cc, or $bcc. + * This array is used only for addresses with IDN. + * @var array + * @access protected + * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc + * @see PHPMailer::$all_recipients + */ + protected $RecipientsQueue = array(); + + /** + * An array of reply-to names and addresses queued for validation. + * In send(), valid and non duplicate entries are moved to $ReplyTo. + * This array is used only for addresses with IDN. + * @var array + * @access protected + * @see PHPMailer::$ReplyTo + */ + protected $ReplyToQueue = array(); + + /** + * The array of attachments. + * @var array + * @access protected + */ + protected $attachment = array(); + + /** + * The array of custom headers. + * @var array + * @access protected + */ + protected $CustomHeader = array(); + + /** + * The most recent Message-ID (including angular brackets). + * @var string + * @access protected + */ + protected $lastMessageID = ''; + + /** + * The message's MIME type. + * @var string + * @access protected + */ + protected $message_type = ''; + + /** + * The array of MIME boundary strings. + * @var array + * @access protected + */ + protected $boundary = array(); + + /** + * The array of available languages. + * @var array + * @access protected + */ + protected $language = array(); + + /** + * The number of errors encountered. + * @var integer + * @access protected + */ + protected $error_count = 0; + + /** + * The S/MIME certificate file path. + * @var string + * @access protected + */ + protected $sign_cert_file = ''; + + /** + * The S/MIME key file path. + * @var string + * @access protected + */ + protected $sign_key_file = ''; + + /** + * The optional S/MIME extra certificates ("CA Chain") file path. + * @var string + * @access protected + */ + protected $sign_extracerts_file = ''; + + /** + * The S/MIME password for the key. + * Used only if the key is encrypted. + * @var string + * @access protected + */ + protected $sign_key_pass = ''; + + /** + * Whether to throw exceptions for errors. + * @var boolean + * @access protected + */ + protected $exceptions = false; + + /** + * Unique ID used for message ID and boundaries. + * @var string + * @access protected + */ + protected $uniqueid = ''; + + /** + * Error severity: message only, continue processing. + */ + const STOP_MESSAGE = 0; + + /** + * Error severity: message, likely ok to continue processing. + */ + const STOP_CONTINUE = 1; + + /** + * Error severity: message, plus full stop, critical error reached. + */ + const STOP_CRITICAL = 2; + + /** + * SMTP RFC standard line ending. + */ + const CRLF = "\r\n"; + + /** + * The maximum line length allowed by RFC 2822 section 2.1.1 + * @var integer + */ + const MAX_LINE_LENGTH = 998; + + /** + * Constructor. + * @param boolean $exceptions Should we throw external exceptions? + */ + public function __construct($exceptions = null) + { + if ($exceptions !== null) { + $this->exceptions = (boolean)$exceptions; + } + //Pick an appropriate debug output format automatically + $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); + } + + /** + * Destructor. + */ + public function __destruct() + { + //Close any open SMTP connection nicely + $this->smtpClose(); + } + + /** + * Call mail() in a safe_mode-aware fashion. + * Also, unless sendmail_path points to sendmail (or something that + * claims to be sendmail), don't pass params (not a perfect fix, + * but it will do) + * @param string $to To + * @param string $subject Subject + * @param string $body Message Body + * @param string $header Additional Header(s) + * @param string $params Params + * @access private + * @return boolean + */ + private function mailPassthru($to, $subject, $body, $header, $params) + { + //Check overloading of mail function to avoid double-encoding + if (ini_get('mbstring.func_overload') & 1) { + $subject = $this->secureHeader($subject); + } else { + $subject = $this->encodeHeader($this->secureHeader($subject)); + } + + //Can't use additional_parameters in safe_mode, calling mail() with null params breaks + //@link http://php.net/manual/en/function.mail.php + if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) { + $result = @mail($to, $subject, $body, $header); + } else { + $result = @mail($to, $subject, $body, $header, $params); + } + return $result; + } + /** + * Output debugging info via user-defined method. + * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug). + * @see PHPMailer::$Debugoutput + * @see PHPMailer::$SMTPDebug + * @param string $str + */ + protected function edebug($str) + { + if ($this->SMTPDebug <= 0) { + return; + } + //Avoid clash with built-in function names + if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) { + call_user_func($this->Debugoutput, $str, $this->SMTPDebug); + return; + } + switch ($this->Debugoutput) { + case 'error_log': + //Don't output, just log + error_log($str); + break; + case 'html': + //Cleans up output a bit for a better looking, HTML-safe output + echo htmlentities( + preg_replace('/[\r\n]+/', '', $str), + ENT_QUOTES, + 'UTF-8' + ) + . "
\n"; + break; + case 'echo': + default: + //Normalize line breaks + $str = preg_replace('/\r\n?/ms', "\n", $str); + echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( + "\n", + "\n \t ", + trim($str) + ) . "\n"; + } + } + + /** + * Sets message type to HTML or plain. + * @param boolean $isHtml True for HTML mode. + * @return void + */ + public function isHTML($isHtml = true) + { + if ($isHtml) { + $this->ContentType = 'text/html'; + } else { + $this->ContentType = 'text/plain'; + } + } + + /** + * Send messages using SMTP. + * @return void + */ + public function isSMTP() + { + $this->Mailer = 'smtp'; + } + + /** + * Send messages using PHP's mail() function. + * @return void + */ + public function isMail() + { + $this->Mailer = 'mail'; + } + + /** + * Send messages using $Sendmail. + * @return void + */ + public function isSendmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (!stristr($ini_sendmail_path, 'sendmail')) { + $this->Sendmail = '/usr/sbin/sendmail'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'sendmail'; + } + + /** + * Send messages using qmail. + * @return void + */ + public function isQmail() + { + $ini_sendmail_path = ini_get('sendmail_path'); + + if (!stristr($ini_sendmail_path, 'qmail')) { + $this->Sendmail = '/var/qmail/bin/qmail-inject'; + } else { + $this->Sendmail = $ini_sendmail_path; + } + $this->Mailer = 'qmail'; + } + + /** + * Add a "To" address. + * @param string $address The email address to send to + * @param string $name + * @return boolean true on success, false if address already used or invalid in some way + */ + public function addAddress($address, $name = '') + { + return $this->addOrEnqueueAnAddress('to', $address, $name); + } + + /** + * Add a "CC" address. + * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address The email address to send to + * @param string $name + * @return boolean true on success, false if address already used or invalid in some way + */ + public function addCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('cc', $address, $name); + } + + /** + * Add a "BCC" address. + * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address The email address to send to + * @param string $name + * @return boolean true on success, false if address already used or invalid in some way + */ + public function addBCC($address, $name = '') + { + return $this->addOrEnqueueAnAddress('bcc', $address, $name); + } + + /** + * Add a "Reply-To" address. + * @param string $address The email address to reply to + * @param string $name + * @return boolean true on success, false if address already used or invalid in some way + */ + public function addReplyTo($address, $name = '') + { + return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer + * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still + * be modified after calling this function), addition of such addresses is delayed until send(). + * Addresses that have been added already return false, but do not throw exceptions. + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address to send, resp. to reply 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 addOrEnqueueAnAddress($kind, $address, $name) + { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (($pos = strrpos($address, '@')) === false) { + // At-sign is misssing. + $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address"; + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new phpmailerException($error_message); + } + return false; + } + $params = array($kind, $address, $name); + // Enqueue addresses with IDN until we know the PHPMailer::$CharSet. + if ($this->has8bitChars(substr($address, ++$pos)) and $this->idnSupported()) { + if ($kind != 'Reply-To') { + if (!array_key_exists($address, $this->RecipientsQueue)) { + $this->RecipientsQueue[$address] = $params; + return true; + } + } else { + if (!array_key_exists($address, $this->ReplyToQueue)) { + $this->ReplyToQueue[$address] = $params; + return true; + } + } + return false; + } + // Immediately add standard addresses without IDN. + return call_user_func_array(array($this, 'addAnAddress'), $params); + } + + /** + * Add an address to one of the recipient arrays or to the ReplyTo array. + * Addresses that have been added already return false, but do not throw exceptions. + * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' + * @param string $address The email address to send, resp. to reply 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 (!in_array($kind, array('to', 'cc', 'bcc', 'Reply-To'))) { + $error_message = $this->lang('Invalid recipient kind: ') . $kind; + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new phpmailerException($error_message); + } + return false; + } + if (!$this->validateAddress($address)) { + $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address"; + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new phpmailerException($error_message); + } + return false; + } + if ($kind != 'Reply-To') { + if (!array_key_exists(strtolower($address), $this->all_recipients)) { + 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; + } + + /** + * Parse and validate a string containing one or more RFC822-style comma-separated email addresses + * of the form "display name
" into an array of name/address pairs. + * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. + * Note that quotes in the name part are removed. + * @param string $addrstr The address list string + * @param bool $useimap Whether to use the IMAP extension to parse the list + * @return array + * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation + */ + public function parseAddresses($addrstr, $useimap = true) + { + $addresses = array(); + if ($useimap and function_exists('imap_rfc822_parse_adrlist')) { + //Use this built-in parser if it's available + $list = imap_rfc822_parse_adrlist($addrstr, ''); + foreach ($list as $address) { + if ($address->host != '.SYNTAX-ERROR.') { + if ($this->validateAddress($address->mailbox . '@' . $address->host)) { + $addresses[] = array( + 'name' => (property_exists($address, 'personal') ? $address->personal : ''), + 'address' => $address->mailbox . '@' . $address->host + ); + } + } + } + } else { + //Use this simpler parser + $list = explode(',', $addrstr); + foreach ($list as $address) { + $address = trim($address); + //Is there a separate name part? + if (strpos($address, '<') === false) { + //No separate name, just use the whole thing + if ($this->validateAddress($address)) { + $addresses[] = array( + 'name' => '', + 'address' => $address + ); + } + } else { + list($name, $email) = explode('<', $address); + $email = trim(str_replace('>', '', $email)); + if ($this->validateAddress($email)) { + $addresses[] = array( + 'name' => trim(str_replace(array('"', "'"), '', $name)), + 'address' => $email + ); + } + } + } + } + return $addresses; + } + + /** + * 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 + // Don't validate now addresses with IDN. Will be done in send(). + if (($pos = strrpos($address, '@')) === false or + (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and + !$this->validateAddress($address)) { + $error_message = $this->lang('invalid_address') . " (setFrom) $address"; + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new phpmailerException($error_message); + } + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto) { + if (empty($this->Sender)) { + $this->Sender = $address; + } + } + return true; + } + + /** + * Return the Message-ID header of the last email. + * Technically this is the value from the last time the headers were created, + * but it's also the message ID of the last sent message except in + * pathological cases. + * @return string + */ + public function getLastMessageID() + { + return $this->lastMessageID; + } + + /** + * Check that a string looks like an email address. + * @param string $address The email address to check + * @param string|callable $patternselect A selector for the validation pattern to use : + * * `auto` Pick best pattern automatically; + * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14; + * * `pcre` Use old PCRE implementation; + * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; + * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. + * * `noregex` Don't use a regex: super fast, really dumb. + * Alternatively you may pass in a callable to inject your own validator, for example: + * PHPMailer::validateAddress('user@example.com', function($address) { + * return (strpos($address, '@') !== false); + * }); + * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. + * @return boolean + * @static + * @access public + */ + public static function validateAddress($address, $patternselect = null) + { + if (is_null($patternselect)) { + $patternselect = self::$validator; + } + if (is_callable($patternselect)) { + return call_user_func($patternselect, $address); + } + //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 + if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) { + return false; + } + if (!$patternselect or $patternselect == 'auto') { + //Check this constant first so it works when extension_loaded() is disabled by safe mode + //Constant was added in PHP 5.2.4 + if (defined('PCRE_VERSION')) { + //This pattern can get stuck in a recursive loop in PCRE <= 8.0.2 + if (version_compare(PCRE_VERSION, '8.0.3') >= 0) { + $patternselect = 'pcre8'; + } else { + $patternselect = 'pcre'; + } + } elseif (function_exists('extension_loaded') and extension_loaded('pcre')) { + //Fall back to older PCRE + $patternselect = 'pcre'; + } else { + //Filter_var appeared in PHP 5.2.0 and does not require the PCRE extension + if (version_compare(PHP_VERSION, '5.2.0') >= 0) { + $patternselect = 'php'; + } else { + $patternselect = 'noregex'; + } + } + } + switch ($patternselect) { + case 'pcre8': + /** + * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains. + * @link http://squiloople.com/2009/12/20/email-address-validation/ + * @copyright 2009-2010 Michael Rushton + * Feel free to use and redistribute this code. But please keep this copyright notice. + */ + 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 + ); + case 'pcre': + //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 + ); + case 'html5': + /** + * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. + * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email) + */ + return (boolean)preg_match( + '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . + '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', + $address + ); + case 'noregex': + //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); + case 'php': + default: + return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL); + } + } + + /** + * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the + * "intl" and "mbstring" PHP extensions. + * @return bool "true" if required functions for IDN support are present + */ + public function idnSupported() + { + // @TODO: Write our own "idn_to_ascii" function for PHP <= 5.2. + return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding'); + } + + /** + * Converts IDN in given email address to its ASCII form, also known as punycode, if possible. + * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet. + * This function silently returns unmodified address if: + * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form) + * - Conversion to punycode is impossible (e.g. required PHP functions are not available) + * or fails for any reason (e.g. domain has characters not allowed in an IDN) + * @see PHPMailer::$CharSet + * @param string $address The email address to convert + * @return string The encoded address in ASCII form + */ + public function punyencodeAddress($address) + { + // Verify we have required functions, CharSet, and at-sign. + if ($this->idnSupported() and + !empty($this->CharSet) and + ($pos = strrpos($address, '@')) !== false) { + $domain = substr($address, ++$pos); + // Verify CharSet string is a valid one, and domain properly encoded in this CharSet. + if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) { + $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet); + if (($punycode = defined('INTL_IDNA_VARIANT_UTS46') ? + idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46) : + idn_to_ascii($domain)) !== false) { + return substr($address, 0, $pos) . $punycode; + } + } + } + return $address; + } + + /** + * Create a message and send it. + * Uses the sending method specified by $Mailer. + * @throws phpmailerException + * @return boolean false on error - See the ErrorInfo property for details of the error. + */ + public function send() + { + try { + if (!$this->preSend()) { + return false; + } + return $this->postSend(); + } catch (phpmailerException $exc) { + $this->mailHeader = ''; + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + return false; + } + } + + /** + * Prepare a message for sending. + * @throws phpmailerException + * @return boolean + */ + public function preSend() + { + try { + $this->error_count = 0; // Reset errors + $this->mailHeader = ''; + + // Dequeue recipient and Reply-To addresses with IDN + foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { + $params[1] = $this->punyencodeAddress($params[1]); + call_user_func_array(array($this, 'addAnAddress'), $params); + } + if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { + throw new phpmailerException($this->lang('provide_address'), self::STOP_CRITICAL); + } + + // Validate From, Sender, and ConfirmReadingTo addresses + foreach (array('From', 'Sender', 'ConfirmReadingTo') as $address_kind) { + $this->$address_kind = trim($this->$address_kind); + if (empty($this->$address_kind)) { + continue; + } + $this->$address_kind = $this->punyencodeAddress($this->$address_kind); + if (!$this->validateAddress($this->$address_kind)) { + $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind; + $this->setError($error_message); + $this->edebug($error_message); + if ($this->exceptions) { + throw new phpmailerException($error_message); + } + return false; + } + } + + // Set whether the message is multipart/alternative + if ($this->alternativeExists()) { + $this->ContentType = 'multipart/alternative'; + } + + $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); + } + + // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) + $this->MIMEHeader = ''; + $this->MIMEBody = $this->createBody(); + // createBody may have added some headers, so retain them + $tempheaders = $this->MIMEHeader; + $this->MIMEHeader = $this->createHeader(); + $this->MIMEHeader .= $tempheaders; + + // 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))) + ); + } + + // Sign with DKIM if enabled + if (!empty($this->DKIM_domain) + and !empty($this->DKIM_selector) + and (!empty($this->DKIM_private_string) + or (!empty($this->DKIM_private) + and self::isPermittedPath($this->DKIM_private) + and file_exists($this->DKIM_private) + ) + ) + ) { + $header_dkim = $this->DKIM_Add( + $this->MIMEHeader . $this->mailHeader, + $this->encodeHeader($this->secureHeader($this->Subject)), + $this->MIMEBody + ); + $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . self::CRLF . + str_replace("\r\n", "\n", $header_dkim) . self::CRLF; + } + return true; + } catch (phpmailerException $exc) { + $this->setError($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + return false; + } + } + + /** + * Actually send a message. + * Send the email via the selected mechanism + * @throws phpmailerException + * @return boolean + */ + public function postSend() + { + try { + // Choose the mailer and send through it + switch ($this->Mailer) { + case 'sendmail': + case 'qmail': + 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: + $sendMethod = $this->Mailer.'Send'; + if (method_exists($this, $sendMethod)) { + return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); + } + + return $this->mailSend($this->MIMEHeader, $this->MIMEBody); + } + } catch (phpmailerException $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + } + return false; + } + + /** + * Send mail using the $Sendmail program. + * @param string $header The message headers + * @param string $body The message body + * @see PHPMailer::$Sendmail + * @throws phpmailerException + * @access protected + * @return boolean + */ + protected function sendmailSend($header, $body) + { + // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if (!empty($this->Sender) and self::isShellSafe($this->Sender)) { + if ($this->Mailer == 'qmail') { + $sendmailFmt = '%s -f%s'; + } else { + $sendmailFmt = '%s -oi -f%s -t'; + } + } else { + if ($this->Mailer == 'qmail') { + $sendmailFmt = '%s'; + } else { + $sendmailFmt = '%s -oi -t'; + } + } + + // TODO: If possible, this should be changed to escapeshellarg. Needs thorough testing. + $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); + + if ($this->SingleTo) { + foreach ($this->SingleToArray as $toAddr) { + if (!@$mail = popen($sendmail, 'w')) { + throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + fputs($mail, 'To: ' . $toAddr . "\n"); + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail); + $this->doCallback( + ($result == 0), + array($toAddr), + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From + ); + 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); + $this->doCallback( + ($result == 0), + $this->to, + $this->cc, + $this->bcc, + $this->Subject, + $body, + $this->From + ); + if ($result != 0) { + throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); + } + } + return true; + } + + /** + * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters. + * + * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. + * @param string $string The string to be validated + * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report + * @access protected + * @return boolean + */ + protected static function isShellSafe($string) + { + // Future-proof + if (escapeshellcmd($string) !== $string + or !in_array(escapeshellarg($string), array("'$string'", "\"$string\"")) + ) { + return false; + } + + $length = strlen($string); + + for ($i = 0; $i < $length; $i++) { + $c = $string[$i]; + + // All other characters have a special meaning in at least one common shell, including = and +. + // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. + // Note that this does permit non-Latin alphanumeric characters based on the current locale. + if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { + return false; + } + } + + return true; + } + + /** + * Check whether a file path is of a permitted type. + * Used to reject URLs and phar files from functions that access local file paths, + * such as addAttachment. + * @param string $path A relative or absolute path to a file. + * @return bool + */ + protected static function isPermittedPath($path) + { + return !preg_match('#^[a-z]+://#i', $path); + } + + /** + * Send mail using the PHP mail() function. + * @param string $header The message headers + * @param string $body The message body + * @link http://www.php.net/manual/en/book.mail.php + * @throws phpmailerException + * @access protected + * @return boolean + */ + protected function mailSend($header, $body) + { + $toArr = array(); + foreach ($this->to as $toaddr) { + $toArr[] = $this->addrFormat($toaddr); + } + $to = implode(', ', $toArr); + + $params = null; + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + if (!empty($this->Sender) and $this->validateAddress($this->Sender)) { + // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. + if (self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); + } + } + if (!empty($this->Sender) and !ini_get('safe_mode') and $this->validateAddress($this->Sender)) { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + } + $result = false; + if ($this->SingleTo and count($toArr) > 1) { + foreach ($toArr as $toAddr) { + $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); + $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From); + } + } else { + $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); + $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From); + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if (!$result) { + throw new phpmailerException($this->lang('instantiate'), self::STOP_CRITICAL); + } + return true; + } + + /** + * Get an instance to use for SMTP operations. + * Override this function to load your own SMTP implementation + * @return SMTP + */ + public function getSMTPInstance() + { + if (!is_object($this->smtp)) { + $this->smtp = new SMTP; + } + return $this->smtp; + } + + /** + * Send mail via SMTP. + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * Uses the PHPMailerSMTP class by default. + * @see PHPMailer::getSMTPInstance() to use a different class. + * @param string $header The message headers + * @param string $body The message body + * @throws phpmailerException + * @uses SMTP + * @access protected + * @return boolean + */ + protected function smtpSend($header, $body) + { + $bad_rcpt = array(); + if (!$this->smtpConnect($this->SMTPOptions)) { + throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + if (!empty($this->Sender) and $this->validateAddress($this->Sender)) { + $smtp_from = $this->Sender; + } else { + $smtp_from = $this->From; + } + 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 to all recipients + foreach (array($this->to, $this->cc, $this->bcc) as $togroup) { + foreach ($togroup as $to) { + if (!$this->smtp->recipient($to[0])) { + $error = $this->smtp->getError(); + $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']); + $isSent = false; + } else { + $isSent = true; + } + $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From); + } + } + + // Only send the DATA command if we have viable recipients + if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) { + throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL); + } + if ($this->SMTPKeepAlive) { + $this->smtp->reset(); + } else { + $this->smtp->quit(); + $this->smtp->close(); + } + //Create error message for any bad addresses + if (count($bad_rcpt) > 0) { + $errstr = ''; + foreach ($bad_rcpt as $bad) { + $errstr .= $bad['to'] . ': ' . $bad['error']; + } + throw new phpmailerException( + $this->lang('recipients_failed') . $errstr, + self::STOP_CONTINUE + ); + } + return true; + } + + /** + * Initiate 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 boolean + */ + public function smtpConnect($options = null) + { + if (is_null($this->smtp)) { + $this->smtp = $this->getSMTPInstance(); + } + + //If no options are provided, use whatever is set in the instance + if (is_null($options)) { + $options = $this->SMTPOptions; + } + + // Already connected? + if ($this->smtp->connected()) { + return true; + } + + $this->smtp->setTimeout($this->Timeout); + $this->smtp->setDebugLevel($this->SMTPDebug); + $this->smtp->setDebugOutput($this->Debugoutput); + $this->smtp->setVerp($this->do_verp); + $hosts = explode(';', $this->Host); + $lastexception = null; + + foreach ($hosts as $hostentry) { + $hostinfo = array(); + if (!preg_match( + '/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*|\[[a-fA-F0-9:]+\]):?([0-9]*)$/', + trim($hostentry), + $hostinfo + )) { + // Not a valid host entry + $this->edebug('Ignoring invalid host: ' . $hostentry); + continue; + } + // $hostinfo[2]: optional ssl or tls prefix + // $hostinfo[3]: the hostname + // $hostinfo[4]: optional port number + // The host string prefix can temporarily override the current setting for SMTPSecure + // If it's not specified, the default value is used + $prefix = ''; + $secure = $this->SMTPSecure; + $tls = ($this->SMTPSecure == 'tls'); + if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) { + $prefix = 'ssl://'; + $tls = false; // Can't have SSL and TLS at the same time + $secure = 'ssl'; + } elseif ($hostinfo[2] == 'tls') { + $tls = true; + // tls doesn't use a prefix + $secure = 'tls'; + } + //Do we need the OpenSSL extension? + $sslext = defined('OPENSSL_ALGO_SHA1'); + if ('tls' === $secure or 'ssl' === $secure) { + //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled + if (!$sslext) { + throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL); + } + } + $host = $hostinfo[3]; + $port = $this->Port; + $tport = (integer)$hostinfo[4]; + if ($tport > 0 and $tport < 65536) { + $port = $tport; + } + if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { + try { + if ($this->Helo) { + $hello = $this->Helo; + } else { + $hello = $this->serverHostname(); + } + $this->smtp->hello($hello); + //Automatically enable TLS encryption if: + // * it's not disabled + // * we have openssl extension + // * we are not already using SSL + // * the server offers STARTTLS + if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) { + $tls = true; + } + if ($tls) { + if (!$this->smtp->startTLS()) { + throw new phpmailerException($this->lang('connect_host')); + } + // We must resend EHLO 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 $exc) { + $lastexception = $exc; + $this->edebug($exc->getMessage()); + // 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; + } + + /** + * Close the active SMTP session if one exists. + * @return void + */ + public function smtpClose() + { + if (is_a($this->smtp, 'SMTP')) { + if ($this->smtp->connected()) { + $this->smtp->quit(); + $this->smtp->close(); + } + } + } + + /** + * Set the language for 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. French is "fr") + * @param string $lang_path Path to the language file directory, with trailing separator (slash) + * @return boolean + * @access public + */ + public function setLanguage($langcode = 'en', $lang_path = '') + { + // Backwards compatibility for renamed language codes + $renamed_langcodes = array( + 'br' => 'pt_br', + 'cz' => 'cs', + 'dk' => 'da', + 'no' => 'nb', + 'se' => 'sv', + 'sr' => 'rs' + ); + + if (isset($renamed_langcodes[$langcode])) { + $langcode = $renamed_langcodes[$langcode]; + } + + // Define full set of translatable strings in English + $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: ', + 'extension_missing' => 'Extension missing: ' + ); + if (empty($lang_path)) { + // Calculate an absolute path so it can work if CWD is not here + $lang_path = dirname(__FILE__). DIRECTORY_SEPARATOR . 'language'. DIRECTORY_SEPARATOR; + } + //Validate $langcode + if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) { + $langcode = 'en'; + } + $foundlang = true; + $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; + // There is no English translation file + if ($langcode != 'en') { + // Make sure language file path is readable + if (!self::isPermittedPath($lang_file) or !is_readable($lang_file)) { + $foundlang = false; + } else { + // Overwrite language-specific strings. + // This way we'll never have missing translation keys. + $foundlang = include $lang_file; + } + } + $this->language = $PHPMAILER_LANG; + return (boolean)$foundlang; // Returns false if language not found + } + + /** + * Get the array of strings for the current language. + * @return array + */ + public function getTranslations() + { + return $this->language; + } + + /** + * Create recipient headers. + * @access public + * @param string $type + * @param array $addr An array of recipient, + * where each recipient is a 2-element indexed array with element 0 containing an address + * and element 1 containing a name, like: + * array(array('joe@example.com', 'Joe User'), array('zoe@example.com', 'Zoe User')) + * @return string + */ + public function addrAppend($type, $addr) + { + $addresses = array(); + foreach ($addr as $address) { + $addresses[] = $this->addrFormat($address); + } + return $type . ': ' . implode(', ', $addresses) . $this->LE; + } + + /** + * Format an address for use in a message header. + * @access public + * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name + * like array('joe@example.com', 'Joe User') + * @return string + */ + public function addrFormat($addr) + { + if (empty($addr[1])) { // No name provided + return $this->secureHeader($addr[0]); + } else { + return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader( + $addr[0] + ) . '>'; + } + } + + /** + * Word-wrap message. + * For use with mailers that do not automatically perform wrapping + * and for quoted-printable encoded messages. + * 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) + { + if ($qp_mode) { + $soft_break = sprintf(' =%s', $this->LE); + } else { + $soft_break = $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); + //Remove a trailing line break + if (substr($message, -$lelen) == $this->LE) { + $message = substr($message, 0, -$lelen); + } + + //Split message into lines + $lines = explode($this->LE, $message); + //Message will be rebuilt in here + $message = ''; + foreach ($lines as $line) { + $words = explode(' ', $line); + $buf = ''; + $firstword = true; + foreach ($words as $word) { + if ($qp_mode and (strlen($word) > $length)) { + $space_left = $length - strlen($buf) - $crlflen; + if (!$firstword) { + 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; + if (!$firstword) { + $buf .= ' '; + } + $buf .= $word; + + if (strlen($buf) > $length and $buf_o != '') { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + $firstword = false; + } + $message .= $buf . self::CRLF; + } + + return $message; + } + + /** + * Find the 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 integer $maxLength Find the last character boundary prior to this length + * @return integer + */ + public function utf8CharBoundary($encodedText, $maxLength) + { + $foundSplitPos = false; + $lookBack = 3; + while (!$foundSplitPos) { + $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); + $encodedCharPos = strpos($lastChunk, '='); + if (false !== $encodedCharPos) { + // 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 + if ($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; + } + + /** + * Apply word wrapping to the message body. + * Wraps the message body to the number of chars set in the WordWrap property. + * You should only do this to plain-text bodies as wrapping HTML tags may break them. + * This is called automatically by createBody(), so you don't need to call it yourself. + * @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; + } + } + + /** + * Assemble message headers. + * @access public + * @return string The assembled headers + */ + public function createHeader() + { + $result = ''; + + $result .= $this->headerLine('Date', $this->MessageDate == '' ? self::rfcDate() : $this->MessageDate); + + // To be created automatically by mail() + if ($this->SingleTo) { + if ($this->Mailer != 'mail') { + foreach ($this->to as $toaddr) { + $this->SingleToArray[] = $this->addrFormat($toaddr); + } + } + } else { + if (count($this->to) > 0) { + if ($this->Mailer != 'mail') { + $result .= $this->addrAppend('To', $this->to); + } + } elseif (count($this->cc) == 0) { + $result .= $this->headerLine('To', 'undisclosed-recipients:;'); + } + } + + $result .= $this->addrAppend('From', array(array(trim($this->From), $this->FromName))); + + // 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' or $this->Mailer == 'qmail' or $this->Mailer == 'mail' + ) + and 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))); + } + + // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 + // https://tools.ietf.org/html/rfc5322#section-3.6.4 + if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) { + $this->lastMessageID = $this->MessageID; + } else { + $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname()); + } + $result .= $this->headerLine('Message-ID', $this->lastMessageID); + if (!is_null($this->Priority)) { + $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', '<' . $this->ConfirmReadingTo . '>'); + } + + // Add custom headers + foreach ($this->CustomHeader as $header) { + $result .= $this->headerLine( + trim($header[0]), + $this->encodeHeader(trim($header[1])) + ); + } + if (!$this->sign_key_file) { + $result .= $this->headerLine('MIME-Version', '1.0'); + $result .= $this->getMailMIME(); + } + + return $result; + } + + /** + * Get the message MIME type headers. + * @access public + * @return string + */ + public function getMailMIME() + { + $result = ''; + $ismultipart = true; + 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); + $ismultipart = false; + break; + } + // RFC1341 part 5 says 7bit is assumed if not specified + if ($this->Encoding != '7bit') { + // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE + if ($ismultipart) { + if ($this->Encoding == '8bit') { + $result .= $this->headerLine('Content-Transfer-Encoding', '8bit'); + } + // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible + } else { + $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding); + } + } + + if ($this->Mailer != 'mail') { + $result .= $this->LE; + } + + return $result; + } + + /** + * Returns the whole MIME message. + * Includes complete headers and body. + * Only valid post preSend(). + * @see PHPMailer::preSend() + * @access public + * @return string + */ + public function getSentMIMEMessage() + { + return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody; + } + + /** + * Create unique ID + * @return string + */ + protected function generateId() { + return md5(uniqid(time())); + } + + /** + * Assemble the message body. + * Returns an empty string on failure. + * @access public + * @throws phpmailerException + * @return string The assembled message body + */ + public function createBody() + { + $body = ''; + //Create unique IDs and preset boundaries + $this->uniqueid = $this->generateId(); + $this->boundary[1] = 'b1_' . $this->uniqueid; + $this->boundary[2] = 'b2_' . $this->uniqueid; + $this->boundary[3] = 'b3_' . $this->uniqueid; + + if ($this->sign_key_file) { + $body .= $this->getMailMIME() . $this->LE; + } + + $this->setWordWrap(); + + $bodyEncoding = $this->Encoding; + $bodyCharSet = $this->CharSet; + //Can we do a 7-bit downgrade? + if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) { + $bodyEncoding = '7bit'; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit + $bodyCharSet = 'us-ascii'; + } + //If lines are too long, and we're not already using an encoding that will shorten them, + //change to quoted-printable transfer encoding for the body part only + if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) { + $bodyEncoding = 'quoted-printable'; + } + + $altBodyEncoding = $this->Encoding; + $altBodyCharSet = $this->CharSet; + //Can we do a 7-bit downgrade? + if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) { + $altBodyEncoding = '7bit'; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit + $altBodyCharSet = 'us-ascii'; + } + //If lines are too long, and we're not already using an encoding that will shorten them, + //change to quoted-printable transfer encoding for the alt body part only + if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) { + $altBodyEncoding = 'quoted-printable'; + } + //Use this as a preamble in all multipart message types + $mimepre = "This is a multi-part message in MIME format." . $this->LE . $this->LE; + switch ($this->message_type) { + case 'inline': + $body .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= $this->LE . $this->LE; + $body .= $this->attachAll('inline', $this->boundary[1]); + break; + case 'attach': + $body .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $body .= $this->LE . $this->LE; + $body .= $this->attachAll('attachment', $this->boundary[1]); + break; + case 'inline_attach': + $body .= $mimepre; + $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], $bodyCharSet, '', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $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 .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= $this->LE . $this->LE; + $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $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 .= $mimepre; + $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $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], $bodyCharSet, 'text/html', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $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 .= $mimepre; + $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], $altBodyCharSet, 'text/plain', $altBodyEncoding); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $body .= $this->LE . $this->LE; + $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $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 .= $mimepre; + $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], $altBodyCharSet, 'text/plain', $altBodyEncoding); + $body .= $this->encodeString($this->AltBody, $altBodyEncoding); + $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], $bodyCharSet, 'text/html', $bodyEncoding); + $body .= $this->encodeString($this->Body, $bodyEncoding); + $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 '', applies to simple `text/plain` and `text/html` body content types + //Reset the `Encoding` property in case we changed it for line length reasons + $this->Encoding = $bodyEncoding; + $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('extension_missing') . 'openssl'); + } + // @TODO would be nice to use php://temp streams here, but need to wrap for PHP < 5.1 + $file = tempnam(sys_get_temp_dir(), 'mail'); + if (false === file_put_contents($file, $body)) { + throw new phpmailerException($this->lang('signing') . ' Could not write temp file'); + } + $signed = tempnam(sys_get_temp_dir(), 'signed'); + //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197 + if (empty($this->sign_extracerts_file)) { + $sign = @openssl_pkcs7_sign( + $file, + $signed, + 'file://' . realpath($this->sign_cert_file), + array('file://' . realpath($this->sign_key_file), $this->sign_key_pass), + null + ); + } else { + $sign = @openssl_pkcs7_sign( + $file, + $signed, + 'file://' . realpath($this->sign_cert_file), + array('file://' . realpath($this->sign_key_file), $this->sign_key_pass), + null, + PKCS7_DETACHED, + $this->sign_extracerts_file + ); + } + if ($sign) { + @unlink($file); + $body = file_get_contents($signed); + @unlink($signed); + //The message returned by openssl contains both headers and body, so need to split them up + $parts = explode("\n\n", $body, 2); + $this->MIMEHeader .= $parts[0] . $this->LE . $this->LE; + $body = $parts[1]; + } else { + @unlink($file); + @unlink($signed); + throw new phpmailerException($this->lang('signing') . openssl_error_string()); + } + } catch (phpmailerException $exc) { + $body = ''; + if ($this->exceptions) { + throw $exc; + } + } + } + return $body; + } + + /** + * Return 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; + // RFC1341 part 5 says 7bit is assumed if not specified + if ($encoding != '7bit') { + $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); + } + $result .= $this->LE; + + return $result; + } + + /** + * Return the end of a message boundary. + * @access protected + * @param string $boundary + * @return string + */ + protected function endBoundary($boundary) + { + return $this->LE . '--' . $boundary . '--' . $this->LE; + } + + /** + * Set the message type. + * PHPMailer only supports some preset message types, not arbitrary MIME structures. + * @access protected + * @return void + */ + protected function setMessageType() + { + $type = array(); + if ($this->alternativeExists()) { + $type[] = 'alt'; + } + if ($this->inlineImageExists()) { + $type[] = 'inline'; + } + if ($this->attachmentExists()) { + $type[] = 'attach'; + } + $this->message_type = implode('_', $type); + if ($this->message_type == '') { + //The 'plain' message_type refers to the message having a single body element, not that it is plain-text + $this->message_type = 'plain'; + } + } + + /** + * Format a header line. + * @access public + * @param string $name + * @param string $value + * @return string + */ + public function headerLine($name, $value) + { + return $name . ': ' . $value . $this->LE; + } + + /** + * Return a formatted mail line. + * @access public + * @param string $value + * @return string + */ + public function textLine($value) + { + return $value . $this->LE; + } + + /** + * Add an attachment from a path on the filesystem. + * Never use a user-supplied path to a file! + * Returns false if the file could not be found or read. + * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client. + * If you need to do that, fetch the resource yourself and pass it in via a local file or string. + * @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. + * @param string $disposition Disposition to use + * @throws phpmailerException + * @return boolean + */ + public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment') + { + try { + if (!self::isPermittedPath($path) or !@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 => $disposition, + 7 => 0 + ); + + } catch (phpmailerException $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + return false; + } + return true; + } + + /** + * Return the array of attachments. + * @return array + */ + public function getAttachments() + { + return $this->attachment; + } + + /** + * Attach all file, 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; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + if ($disposition == 'inline' && array_key_exists($cid, $cidUniq)) { + continue; + } + $cidUniq[$cid] = true; + + $mime[] = sprintf('--%s%s', $boundary, $this->LE); + //Only include a filename property if we have one + if (!empty($name)) { + $mime[] = sprintf( + 'Content-Type: %s; name="%s"%s', + $type, + $this->encodeHeader($this->secureHeader($name)), + $this->LE + ); + } else { + $mime[] = sprintf( + 'Content-Type: %s%s', + $type, + $this->LE + ); + } + // RFC1341 part 5 says 7bit is assumed if not specified + if ($encoding != '7bit') { + $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 + // Allow for bypassing the Content-Disposition header totally + if (!(empty($disposition))) { + $encoded_name = $this->encodeHeader($this->secureHeader($name)); + if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) { + $mime[] = sprintf( + 'Content-Disposition: %s; filename="%s"%s', + $disposition, + $encoded_name, + $this->LE . $this->LE + ); + } else { + if (!empty($encoded_name)) { + $mime[] = sprintf( + 'Content-Disposition: %s; filename=%s%s', + $disposition, + $encoded_name, + $this->LE . $this->LE + ); + } else { + $mime[] = sprintf( + 'Content-Disposition: %s%s', + $disposition, + $this->LE . $this->LE + ); + } + } + } else { + $mime[] = $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); + } + + /** + * Encode a file 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 + * @access protected + * @return string + */ + protected function encodeFile($path, $encoding = 'base64') + { + try { + if (!self::isPermittedPath($path) or !file_exists($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(false); + } else { + //Doesn't exist in PHP 5.4, but we don't need to check because + //get_magic_quotes_runtime always returns false in 5.4+ + //so it will never get here + ini_set('magic_quotes_runtime', false); + } + } + $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 $exc) { + $this->setError($exc->getMessage()); + return ''; + } + } + + /** + * Encode a string in 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 optimally. + * Picks shortest of Q, B, quoted-printable or none. + * @access public + * @param string $str + * @param string $position + * @return string + */ + public function encodeHeader($str, $position = 'text') + { + $matchcount = 0; + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know the value of magic_quotes_sybase + $encoded = addcslashes($str, "\0..\37\177\\\""); + if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { + return ($encoded); + } else { + return ("\"$encoded\""); + } + } + $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + /** @noinspection PhpMissingBreakStatementInspection */ + case 'comment': + $matchcount = preg_match_all('/[()"]/', $str, $matches); + // Intentional fall-through + case 'text': + default: + $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + //There are no chars that need encoding + if ($matchcount == 0) { + return ($str); + } + + $maxlen = 75 - 7 - strlen($this->CharSet); + // Try to select the encoding which should produce the shortest output + if ($matchcount > 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; + } + + /** + * Check if a string contains multi-byte characters. + * @access public + * @param string $str multi-byte text to wrap encode + * @return boolean + */ + 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; + } + } + + /** + * Does a string contain any 8-bit chars (in any charset)? + * @param string $text + * @return boolean + */ + public function has8bitChars($text) + { + return (boolean)preg_match('/[\x80-\xFF]/', $text); + } + + /** + * Encode and wrap long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid + * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283 + * @access public + * @param string $str multi-byte text to wrap encode + * @param string $linebreak string to use as linefeed/end-of-line + * @return string + */ + public function base64EncodeWrapMB($str, $linebreak = null) + { + $start = '=?' . $this->CharSet . '?B?'; + $end = '?='; + $encoded = ''; + if ($linebreak === null) { + $linebreak = $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 + $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 . $linebreak; + } + + // Chomp the last linefeed + $encoded = substr($encoded, 0, -strlen($linebreak)); + return $encoded; + } + + /** + * Encode a string in quoted-printable format. + * According to RFC2045 section 6.7. + * @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 http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Adapted from this comment + */ + public function encodeQP($string, $line_max = 76) + { + // Use native function if it's available (>= PHP5.3) + if (function_exists('quoted_printable_encode')) { + 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) + ); + return preg_replace('/[^\r\n]{' . ($line_max - 3) . '}[^=\r\n]{2}/', "$0=\r\n", $string); + } + + /** + * Backward compatibility wrapper for an old QP encoding function that was removed. + * @see PHPMailer::encodeQP() + * @access public + * @param string $string + * @param integer $line_max + * @param boolean $space_conv + * @return string + * @deprecated Use encodeQP instead. + */ + public function encodeQPphp( + $string, + $line_max = 76, + /** @noinspection PhpUnusedParameterInspection */ $space_conv = false + ) { + return $this->encodeQP($string, $line_max); + } + + /** + * Encode a string using 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': + // RFC 2047 section 5.3 + $pattern = '^A-Za-z0-9!*+\/ -'; + break; + /** @noinspection PhpMissingBreakStatementInspection */ + case 'comment': + // RFC 2047 section 5.2 + $pattern = '\(\)"'; + // intentional fall-through + // for this reason we build the $pattern without including delimiters and [] + case 'text': + default: + // RFC 2047 section 5.1 + // Replace every high ascii, control, =, ? and _ characters + $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern; + break; + } + $matches = array(); + if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { + // If the string contains an '=', make sure it's the first thing we replace + // so as to avoid double-encoding + $eqkey = array_search('=', $matches[0]); + if (false !== $eqkey) { + unset($matches[0][$eqkey]); + array_unshift($matches[0], '='); + } + 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); + } + + /** + * Add a string or binary attachment (non-filesystem). + * 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. + * @param string $disposition Disposition to use + * @return void + */ + public function addStringAttachment( + $string, + $filename, + $encoding = 'base64', + $type = '', + $disposition = 'attachment' + ) { + // 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 => $disposition, + 7 => 0 + ); + } + + /** + * Add an embedded (inline) attachment from a file. + * This can include images, sounds, and just about any other document type. + * These differ from 'regular' attachments in that they are intended to be + * displayed inline with the message, not just attached for download. + * This is used in HTML messages that embed the images + * the HTML refers to using the $cid value. + * Never use a user-supplied path to a file! + * @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. + * @param string $disposition Disposition to use + * @return boolean True on successfully adding an attachment + */ + public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline') + { + if (!self::isPermittedPath($path) or !@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 => $disposition, + 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. + * @param string $disposition Disposition to use + * @return boolean True on successfully adding an attachment + */ + public function addStringEmbeddedImage( + $string, + $cid, + $name = '', + $encoding = 'base64', + $type = '', + $disposition = 'inline' + ) { + // If a MIME type is not specified, try to work it out from the name + if ($type == '' and !empty($name)) { + $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 => $disposition, + 7 => $cid + ); + return true; + } + + /** + * Check if an inline attachment is present. + * @access public + * @return boolean + */ + public function inlineImageExists() + { + foreach ($this->attachment as $attachment) { + if ($attachment[6] == 'inline') { + return true; + } + } + return false; + } + + /** + * Check if an attachment (non-inline) is present. + * @return boolean + */ + public function attachmentExists() + { + foreach ($this->attachment as $attachment) { + if ($attachment[6] == 'attachment') { + return true; + } + } + return false; + } + + /** + * Check if this message has an alternative body set. + * @return boolean + */ + public function alternativeExists() + { + return !empty($this->AltBody); + } + + /** + * Clear queued addresses of given kind. + * @access protected + * @param string $kind 'to', 'cc', or 'bcc' + * @return void + */ + public function clearQueuedAddresses($kind) + { + $RecipientsQueue = $this->RecipientsQueue; + foreach ($RecipientsQueue as $address => $params) { + if ($params[0] == $kind) { + unset($this->RecipientsQueue[$address]); + } + } + } + + /** + * Clear all To recipients. + * @return void + */ + public function clearAddresses() + { + foreach ($this->to as $to) { + unset($this->all_recipients[strtolower($to[0])]); + } + $this->to = array(); + $this->clearQueuedAddresses('to'); + } + + /** + * Clear all CC recipients. + * @return void + */ + public function clearCCs() + { + foreach ($this->cc as $cc) { + unset($this->all_recipients[strtolower($cc[0])]); + } + $this->cc = array(); + $this->clearQueuedAddresses('cc'); + } + + /** + * Clear all BCC recipients. + * @return void + */ + public function clearBCCs() + { + foreach ($this->bcc as $bcc) { + unset($this->all_recipients[strtolower($bcc[0])]); + } + $this->bcc = array(); + $this->clearQueuedAddresses('bcc'); + } + + /** + * Clear all ReplyTo recipients. + * @return void + */ + public function clearReplyTos() + { + $this->ReplyTo = array(); + $this->ReplyToQueue = array(); + } + + /** + * Clear all recipient types. + * @return void + */ + public function clearAllRecipients() + { + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); + $this->all_recipients = array(); + $this->RecipientsQueue = array(); + } + + /** + * Clear all filesystem, string, and binary attachments. + * @return void + */ + public function clearAttachments() + { + $this->attachment = array(); + } + + /** + * Clear all custom headers. + * @return void + */ + public function clearCustomHeaders() + { + $this->CustomHeader = array(); + } + + /** + * Add an 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['error'])) { + $msg .= $this->lang('smtp_error') . $lasterror['error']; + if (!empty($lasterror['detail'])) { + $msg .= ' Detail: '. $lasterror['detail']; + } + if (!empty($lasterror['smtp_code'])) { + $msg .= ' SMTP code: ' . $lasterror['smtp_code']; + } + if (!empty($lasterror['smtp_code_ex'])) { + $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex']; + } + } + } + $this->ErrorInfo = $msg; + } + + /** + * Return an 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'); + } + + /** + * Get the server hostname. + * Returns 'localhost.localdomain' if unknown. + * @access protected + * @return string + */ + protected function serverHostname() + { + $result = 'localhost.localdomain'; + if (!empty($this->Hostname)) { + $result = $this->Hostname; + } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) { + $result = $_SERVER['SERVER_NAME']; + } elseif (function_exists('gethostname') && gethostname() !== false) { + $result = gethostname(); + } elseif (php_uname('n') !== false) { + $result = php_uname('n'); + } + return $result; + } + + /** + * Get an error message in the current 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 (array_key_exists($key, $this->language)) { + if ($key == 'smtp_connect_failed') { + //Include a link to troubleshooting docs on SMTP connection failure + //this is by far the biggest cause of support questions + //but it's usually not PHPMailer's fault. + return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; + } + return $this->language[$key]; + } else { + //Return the key as a fallback + return $key; + } + } + + /** + * Check if an error occurred. + * @access public + * @return boolean True if an error did occur. + */ + public function isError() + { + return ($this->error_count > 0); + } + + /** + * Ensure consistent line endings in a string. + * 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) + { + // Normalise 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; + } + + /** + * Add 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); + } + } + + /** + * Returns all custom headers. + * @return array + */ + public function getCustomHeaders() + { + return $this->CustomHeader; + } + + /** + * Create a message body from an HTML string. + * Automatically inlines images and creates a plain-text version by converting the HTML, + * overwriting any existing values in Body and AltBody. + * Do not source $message content from user input! + * $basedir is prepended when handling relative URLs, e.g. and must not be empty + * will look for an image file in $basedir/images/a.png and convert it to inline. + * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email) + * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly. + * @access public + * @param string $message HTML message string + * @param string $basedir Absolute path to a base directory to prepend to relative paths to images + * @param boolean|callable $advanced Whether to use the internal HTML to text converter + * or your own custom converter @see PHPMailer::html2text() + * @return string $message The transformed message Body + */ + public function msgHTML($message, $basedir = '', $advanced = false) + { + preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images); + if (array_key_exists(2, $images)) { + if (strlen($basedir) > 1 && substr($basedir, -1) != '/') { + // Ensure $basedir has a trailing / + $basedir .= '/'; + } + foreach ($images[2] as $imgindex => $url) { + // Convert data URIs into embedded images + if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) { + $data = substr($url, strpos($url, ',')); + if ($match[2]) { + $data = base64_decode($data); + } else { + $data = rawurldecode($data); + } + $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2 + if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) { + $message = str_replace( + $images[0][$imgindex], + $images[1][$imgindex] . '="cid:' . $cid . '"', + $message + ); + } + continue; + } + if ( + // Only process relative URLs if a basedir is provided (i.e. no absolute local paths) + !empty($basedir) + // Ignore URLs containing parent dir traversal (..) + && (strpos($url, '..') === false) + // Do not change urls that are already inline images + && substr($url, 0, 4) !== 'cid:' + // Do not change absolute URLs, including anonymous protocol + && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) + ) { + $filename = basename($url); + $directory = dirname($url); + if ($directory == '.') { + $directory = ''; + } + $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2 + if (strlen($directory) > 1 && substr($directory, -1) != '/') { + $directory .= '/'; + } + if ($this->addEmbeddedImage( + $basedir . $directory . $filename, + $cid, + $filename, + 'base64', + self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION)) + ) + ) { + $message = preg_replace( + '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui', + $images[1][$imgindex] . '="cid:' . $cid . '"', + $message + ); + } + } + } + } + $this->isHTML(true); + // 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)); + if (!$this->alternativeExists()) { + $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . + self::CRLF . self::CRLF; + } + return $this->Body; + } + + /** + * Convert an HTML string into plain text. + * This is used by msgHTML(). + * Note - older versions of this function used a bundled advanced converter + * which was been removed for license reasons in #232. + * Example usage: + * + * // Use default conversion + * $plain = $mail->html2text($html); + * // Use your own custom converter + * $plain = $mail->html2text($html, function($html) { + * $converter = new MyHtml2text($html); + * return $converter->get_text(); + * }); + * + * @param string $html The HTML text to convert + * @param boolean|callable $advanced Any boolean value to use the internal converter, + * or provide your own callable for custom conversion. + * @return string + */ + public function html2text($html, $advanced = false) + { + if (is_callable($advanced)) { + return call_user_func($advanced, $html); + } + return html_entity_decode( + trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))), + ENT_QUOTES, + $this->CharSet + ); + } + + /** + * Get the MIME type for a file extension. + * @param string $ext File extension + * @access public + * @return string MIME type of file. + * @static + */ + public static function _mime_types($ext = '') + { + $mimes = array( + 'xl' => 'application/excel', + 'js' => 'application/javascript', + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'bin' => 'application/macbinary', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + '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', + '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', + 'vcf' => 'text/vcard', + 'vcard' => 'text/vcard', + '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' + ); + if (array_key_exists(strtolower($ext), $mimes)) { + return $mimes[strtolower($ext)]; + } + return 'application/octet-stream'; + } + + /** + * Map a file name to a MIME type. + * Defaults to 'application/octet-stream', i.e.. arbitrary binary data. + * @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 (false !== $qpos) { + $filename = substr($filename, 0, $qpos); + } + $pathinfo = self::mb_pathinfo($filename); + return self::_mime_types($pathinfo['extension']); + } + + /** + * Multi-byte-safe pathinfo replacement. + * 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' => ''); + $pathinfo = array(); + if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) { + if (array_key_exists(1, $pathinfo)) { + $ret['dirname'] = $pathinfo[1]; + } + if (array_key_exists(2, $pathinfo)) { + $ret['basename'] = $pathinfo[2]; + } + if (array_key_exists(5, $pathinfo)) { + $ret['extension'] = $pathinfo[5]; + } + if (array_key_exists(3, $pathinfo)) { + $ret['filename'] = $pathinfo[3]; + } + } + switch ($options) { + case PATHINFO_DIRNAME: + case 'dirname': + return $ret['dirname']; + case PATHINFO_BASENAME: + case 'basename': + return $ret['basename']; + case PATHINFO_EXTENSION: + case 'extension': + return $ret['extension']; + case PATHINFO_FILENAME: + case 'filename': + return $ret['filename']; + default: + return $ret; + } + } + + /** + * Set or reset instance properties. + * You should avoid this function - it's more verbose, less efficient, more error-prone and + * harder to debug than setting properties directly. + * Usage Example: + * `$mail->set('SMTPSecure', 'tls');` + * is the same as: + * `$mail->SMTPSecure = 'tls';` + * @access public + * @param string $name The property name to set + * @param mixed $value The value to set the property to + * @return boolean + * @TODO Should this not be using the __set() magic function? + */ + public function set($name, $value = '') + { + if (property_exists($this, $name)) { + $this->$name = $value; + return true; + } else { + $this->setError($this->lang('variable_set') . $name); + return false; + } + } + + /** + * Strip 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 line breaks in a string. + * Converts 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 public and private key files and password for S/MIME signing. + * @access public + * @param string $cert_filename + * @param string $key_filename + * @param string $key_pass Password for private key + * @param string $extracerts_filename Optional path to chain certificate + */ + public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '') + { + $this->sign_cert_file = $cert_filename; + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + $this->sign_extracerts_file = $extracerts_filename; + } + + /** + * Quoted-Printable-encode a DKIM header. + * @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 a DKIM signature. + * @access public + * @param string $signHeader + * @throws phpmailerException + * @return string The DKIM signature value + */ + public function DKIM_Sign($signHeader) + { + if (!defined('PKCS7_TEXT')) { + if ($this->exceptions) { + throw new phpmailerException($this->lang('extension_missing') . 'openssl'); + } + return ''; + } + $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private); + if ('' != $this->DKIM_passphrase) { + $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); + } else { + $privKey = openssl_pkey_get_private($privKeyStr); + } + //Workaround for missing digest algorithms in old PHP & OpenSSL versions + //@link http://stackoverflow.com/a/11117338/333340 + if (version_compare(PHP_VERSION, '5.3.0') >= 0 and + in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) { + if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { + openssl_pkey_free($privKey); + return base64_encode($signature); + } + } else { + $pinfo = openssl_pkey_get_details($privKey); + $hash = hash('sha256', $signHeader); + //'Magic' constant for SHA256 from RFC3447 + //@link https://tools.ietf.org/html/rfc3447#page-43 + $t = '3031300d060960864801650304020105000420' . $hash; + $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3); + $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t); + + if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) { + openssl_pkey_free($privKey); + return base64_encode($signature); + } + } + openssl_pkey_free($privKey); + return ''; + } + + /** + * Generate a DKIM canonicalization header. + * @access public + * @param string $signHeader Header + * @return string + */ + public function DKIM_HeaderC($signHeader) + { + $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader); + $lines = explode("\r\n", $signHeader); + foreach ($lines as $key => $line) { + list($heading, $value) = explode(':', $line, 2); + $heading = strtolower($heading); + $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces + $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value + } + $signHeader = implode("\r\n", $lines); + return $signHeader; + } + + /** + * Generate a 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 and body in a new message 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-sha256'; // 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 = ''; + $date_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'; + } elseif (strpos($header, 'Date:') === 0) { + $date_header = $header; + $current = 'date_header'; + } else { + if (!empty($$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)); + $date = str_replace('|', '=7C', $this->DKIM_QP($date_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*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body + if ('' == $this->DKIM_identity) { + $ident = ''; + } else { + $ident = ' 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:Date:Subject;\r\n" . + "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" . + "\tz=$from\r\n" . + "\t|$to\r\n" . + "\t|$date\r\n" . + "\t|$subject;\r\n" . + "\tbh=" . $DKIMb64 . ";\r\n" . + "\tb="; + $toSign = $this->DKIM_HeaderC( + $from_header . "\r\n" . + $to_header . "\r\n" . + $date_header . "\r\n" . + $subject_header . "\r\n" . + $dkimhdrs + ); + $signed = $this->DKIM_Sign($toSign); + return $dkimhdrs . $signed . "\r\n"; + } + + /** + * Detect if a string contains a line longer than the maximum line length allowed. + * @param string $str + * @return boolean + * @static + */ + public static function hasLineLongerThanMax($str) + { + //+2 to include CRLF line break for a 1000 total + return (boolean)preg_match('/^(.{'.(self::MAX_LINE_LENGTH + 2).',})/m', $str); + } + + /** + * Allows for public read access to 'to' property. + * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * @access public + * @return array + */ + public function getToAddresses() + { + return $this->to; + } + + /** + * Allows for public read access to 'cc' property. + * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * @access public + * @return array + */ + public function getCcAddresses() + { + return $this->cc; + } + + /** + * Allows for public read access to 'bcc' property. + * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * @access public + * @return array + */ + public function getBccAddresses() + { + return $this->bcc; + } + + /** + * Allows for public read access to 'ReplyTo' property. + * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * @access public + * @return array + */ + public function getReplyToAddresses() + { + return $this->ReplyTo; + } + + /** + * Allows for public read access to 'all_recipients' property. + * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included. + * @access public + * @return array + */ + public function getAllRecipientAddresses() + { + return $this->all_recipients; + } + + /** + * Perform a callback. + * @param boolean $isSent + * @param array $to + * @param array $cc + * @param array $bcc + * @param string $subject + * @param string $body + * @param string $from + */ + protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from) + { + 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); + } + } +} + +/** + * PHPMailer exception handler + * @package PHPMailer + */ +class phpmailerException extends Exception +{ + /** + * Prettify error message output + * @return string + */ + public function errorMessage() + { + $errorMsg = '' . htmlspecialchars($this->getMessage()) . "
\n"; + return $errorMsg; + } +} diff --git a/vendor/phpmailer/phpmailer/class.phpmaileroauth.php b/vendor/phpmailer/phpmailer/class.phpmaileroauth.php new file mode 100644 index 0000000..b1bb09f --- /dev/null +++ b/vendor/phpmailer/phpmailer/class.phpmaileroauth.php @@ -0,0 +1,197 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2014 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +/** + * PHPMailerOAuth - PHPMailer subclass adding OAuth support. + * @package PHPMailer + * @author @sherryl4george + * @author Marcus Bointon (@Synchro) + */ +class PHPMailerOAuth extends PHPMailer +{ + /** + * The OAuth user's email address + * @var string + */ + public $oauthUserEmail = ''; + + /** + * The OAuth refresh token + * @var string + */ + public $oauthRefreshToken = ''; + + /** + * The OAuth client ID + * @var string + */ + public $oauthClientId = ''; + + /** + * The OAuth client secret + * @var string + */ + public $oauthClientSecret = ''; + + /** + * An instance of the PHPMailerOAuthGoogle class. + * @var PHPMailerOAuthGoogle + * @access protected + */ + protected $oauth = null; + + /** + * Get a PHPMailerOAuthGoogle instance to use. + * @return PHPMailerOAuthGoogle + */ + public function getOAUTHInstance() + { + if (!is_object($this->oauth)) { + $this->oauth = new PHPMailerOAuthGoogle( + $this->oauthUserEmail, + $this->oauthClientSecret, + $this->oauthClientId, + $this->oauthRefreshToken + ); + } + return $this->oauth; + } + + /** + * Initiate a connection to an SMTP server. + * Overrides the original smtpConnect method to add support for OAuth. + * @param array $options An array of options compatible with stream_context_create() + * @uses SMTP + * @access public + * @return bool + * @throws phpmailerException + */ + public function smtpConnect($options = array()) + { + if (is_null($this->smtp)) { + $this->smtp = $this->getSMTPInstance(); + } + + if (is_null($this->oauth)) { + $this->oauth = $this->getOAUTHInstance(); + } + + // Already connected? + if ($this->smtp->connected()) { + return true; + } + + $this->smtp->setTimeout($this->Timeout); + $this->smtp->setDebugLevel($this->SMTPDebug); + $this->smtp->setDebugOutput($this->Debugoutput); + $this->smtp->setVerp($this->do_verp); + $hosts = explode(';', $this->Host); + $lastexception = null; + + foreach ($hosts as $hostentry) { + $hostinfo = array(); + if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) { + // Not a valid host entry + continue; + } + // $hostinfo[2]: optional ssl or tls prefix + // $hostinfo[3]: the hostname + // $hostinfo[4]: optional port number + // The host string prefix can temporarily override the current setting for SMTPSecure + // If it's not specified, the default value is used + $prefix = ''; + $secure = $this->SMTPSecure; + $tls = ($this->SMTPSecure == 'tls'); + if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) { + $prefix = 'ssl://'; + $tls = false; // Can't have SSL and TLS at the same time + $secure = 'ssl'; + } elseif ($hostinfo[2] == 'tls') { + $tls = true; + // tls doesn't use a prefix + $secure = 'tls'; + } + //Do we need the OpenSSL extension? + $sslext = defined('OPENSSL_ALGO_SHA1'); + if ('tls' === $secure or 'ssl' === $secure) { + //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled + if (!$sslext) { + throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL); + } + } + $host = $hostinfo[3]; + $port = $this->Port; + $tport = (integer)$hostinfo[4]; + if ($tport > 0 and $tport < 65536) { + $port = $tport; + } + if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { + try { + if ($this->Helo) { + $hello = $this->Helo; + } else { + $hello = $this->serverHostname(); + } + $this->smtp->hello($hello); + //Automatically enable TLS encryption if: + // * it's not disabled + // * we have openssl extension + // * we are not already using SSL + // * the server offers STARTTLS + if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) { + $tls = true; + } + 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, + $this->oauth + ) + ) { + throw new phpmailerException($this->lang('authenticate')); + } + } + return true; + } catch (phpmailerException $exc) { + $lastexception = $exc; + $this->edebug($exc->getMessage()); + // 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; + } +} diff --git a/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php b/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php new file mode 100644 index 0000000..71c9bd3 --- /dev/null +++ b/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php @@ -0,0 +1,77 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2014 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +/** + * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider. + * @package PHPMailer + * @author @sherryl4george + * @author Marcus Bointon (@Synchro) + * @link https://github.com/thephpleague/oauth2-client + */ +class PHPMailerOAuthGoogle +{ + private $oauthUserEmail = ''; + private $oauthRefreshToken = ''; + private $oauthClientId = ''; + private $oauthClientSecret = ''; + + /** + * @param string $UserEmail + * @param string $ClientSecret + * @param string $ClientId + * @param string $RefreshToken + */ + public function __construct( + $UserEmail, + $ClientSecret, + $ClientId, + $RefreshToken + ) { + $this->oauthClientId = $ClientId; + $this->oauthClientSecret = $ClientSecret; + $this->oauthRefreshToken = $RefreshToken; + $this->oauthUserEmail = $UserEmail; + } + + private function getProvider() + { + return new League\OAuth2\Client\Provider\Google([ + 'clientId' => $this->oauthClientId, + 'clientSecret' => $this->oauthClientSecret + ]); + } + + private function getGrant() + { + return new \League\OAuth2\Client\Grant\RefreshToken(); + } + + private function getToken() + { + $provider = $this->getProvider(); + $grant = $this->getGrant(); + return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]); + } + + public function getOauth64() + { + $token = $this->getToken(); + return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001"); + } +} diff --git a/vendor/phpmailer/phpmailer/class.pop3.php b/vendor/phpmailer/phpmailer/class.pop3.php new file mode 100644 index 0000000..5a458e5 --- /dev/null +++ b/vendor/phpmailer/phpmailer/class.pop3.php @@ -0,0 +1,407 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2014 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +/** + * PHPMailer POP-Before-SMTP Authentication Class. + * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication. + * Does not support APOP. + * @package PHPMailer + * @author Richard Davey (original author) + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + */ +class POP3 +{ + /** + * The POP3 PHPMailer Version number. + * @var string + * @access public + */ + public $Version = '5.2.27'; + + /** + * Default POP3 port number. + * @var integer + * @access public + */ + public $POP3_PORT = 110; + + /** + * Default timeout in seconds. + * @var integer + * @access public + */ + public $POP3_TIMEOUT = 30; + + /** + * POP3 Carriage Return + Line Feed. + * @var string + * @access public + * @deprecated Use the constant instead + */ + public $CRLF = "\r\n"; + + /** + * Debug display level. + * Options: 0 = no, 1+ = yes + * @var integer + * @access public + */ + public $do_debug = 0; + + /** + * POP3 mail server hostname. + * @var string + * @access public + */ + public $host; + + /** + * POP3 port number. + * @var integer + * @access public + */ + public $port; + + /** + * POP3 Timeout Value in seconds. + * @var integer + * @access public + */ + public $tval; + + /** + * POP3 username + * @var string + * @access public + */ + public $username; + + /** + * POP3 password. + * @var string + * @access public + */ + public $password; + + /** + * Resource handle for the POP3 connection socket. + * @var resource + * @access protected + */ + protected $pop_conn; + + /** + * Are we connected? + * @var boolean + * @access protected + */ + protected $connected = false; + + /** + * Error container. + * @var array + * @access protected + */ + protected $errors = array(); + + /** + * Line break constant + */ + const CRLF = "\r\n"; + + /** + * Simple static wrapper for all-in-one POP before SMTP + * @param $host + * @param integer|boolean $port The port number to connect to + * @param integer|boolean $timeout The timeout value + * @param string $username + * @param string $password + * @param integer $debug_level + * @return boolean + */ + public static function popBeforeSmtp( + $host, + $port = false, + $timeout = false, + $username = '', + $password = '', + $debug_level = 0 + ) { + $pop = new POP3; + return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level); + } + + /** + * Authenticate with a POP3 server. + * A connect, login, disconnect sequence + * appropriate for POP-before SMTP authorisation. + * @access public + * @param string $host The hostname to connect to + * @param integer|boolean $port The port number to connect to + * @param integer|boolean $timeout The timeout value + * @param string $username + * @param string $password + * @param integer $debug_level + * @return boolean + */ + public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0) + { + $this->host = $host; + // If no port value provided, use default + if (false === $port) { + $this->port = $this->POP3_PORT; + } else { + $this->port = (integer)$port; + } + // If no timeout value provided, use default + if (false === $timeout) { + $this->tval = $this->POP3_TIMEOUT; + } else { + $this->tval = (integer)$timeout; + } + $this->do_debug = $debug_level; + $this->username = $username; + $this->password = $password; + // Reset the error log + $this->errors = array(); + // connect + $result = $this->connect($this->host, $this->port, $this->tval); + if ($result) { + $login_result = $this->login($this->username, $this->password); + if ($login_result) { + $this->disconnect(); + return true; + } + } + // We need to disconnect regardless of whether the login succeeded + $this->disconnect(); + return false; + } + + /** + * Connect to a POP3 server. + * @access public + * @param string $host + * @param integer|boolean $port + * @param integer $tval + * @return boolean + */ + public function connect($host, $port = false, $tval = 30) + { + // Are we already connected? + if ($this->connected) { + return true; + } + + //On Windows this will raise a PHP Warning error if the hostname doesn't exist. + //Rather than suppress it with @fsockopen, capture it cleanly instead + set_error_handler(array($this, 'catchWarning')); + + if (false === $port) { + $port = $this->POP3_PORT; + } + + // connect to the POP3 server + $this->pop_conn = fsockopen( + $host, // POP3 Host + $port, // Port # + $errno, // Error Number + $errstr, // Error Message + $tval + ); // Timeout (seconds) + // Restore the error handler + restore_error_handler(); + + // Did we connect? + if (false === $this->pop_conn) { + // It would appear not... + $this->setError(array( + 'error' => "Failed to connect to server $host on port $port", + 'errno' => $errno, + 'errstr' => $errstr + )); + return false; + } + + // Increase the stream time-out + stream_set_timeout($this->pop_conn, $tval, 0); + + // Get the POP3 server response + $pop3_response = $this->getResponse(); + // Check for the +OK + if ($this->checkResponse($pop3_response)) { + // The connection is established and the POP3 server is talking + $this->connected = true; + return true; + } + return false; + } + + /** + * Log in to the POP3 server. + * Does not support APOP (RFC 2828, 4949). + * @access public + * @param string $username + * @param string $password + * @return boolean + */ + public function login($username = '', $password = '') + { + if (!$this->connected) { + $this->setError('Not connected to POP3 server'); + } + if (empty($username)) { + $username = $this->username; + } + if (empty($password)) { + $password = $this->password; + } + + // Send the Username + $this->sendString("USER $username" . self::CRLF); + $pop3_response = $this->getResponse(); + if ($this->checkResponse($pop3_response)) { + // Send the Password + $this->sendString("PASS $password" . self::CRLF); + $pop3_response = $this->getResponse(); + if ($this->checkResponse($pop3_response)) { + return true; + } + } + return false; + } + + /** + * Disconnect from the POP3 server. + * @access public + */ + public function disconnect() + { + $this->sendString('QUIT'); + //The QUIT command may cause the daemon to exit, which will kill our connection + //So ignore errors here + try { + @fclose($this->pop_conn); + } catch (Exception $e) { + //Do nothing + }; + } + + /** + * Get a response from the POP3 server. + * $size is the maximum number of bytes to retrieve + * @param integer $size + * @return string + * @access protected + */ + protected function getResponse($size = 128) + { + $response = fgets($this->pop_conn, $size); + if ($this->do_debug >= 1) { + echo "Server -> Client: $response"; + } + return $response; + } + + /** + * Send raw data to the POP3 server. + * @param string $string + * @return integer + * @access protected + */ + protected function sendString($string) + { + if ($this->pop_conn) { + if ($this->do_debug >= 2) { //Show client messages when debug >= 2 + echo "Client -> Server: $string"; + } + return fwrite($this->pop_conn, $string, strlen($string)); + } + return 0; + } + + /** + * Checks the POP3 server response. + * Looks for for +OK or -ERR. + * @param string $string + * @return boolean + * @access protected + */ + protected function checkResponse($string) + { + if (substr($string, 0, 3) !== '+OK') { + $this->setError(array( + 'error' => "Server reported an error: $string", + 'errno' => 0, + 'errstr' => '' + )); + return false; + } else { + return true; + } + } + + /** + * Add an error to the internal error store. + * Also display debug output if it's enabled. + * @param $error + * @access protected + */ + protected function setError($error) + { + $this->errors[] = $error; + if ($this->do_debug >= 1) { + echo '
';
+            foreach ($this->errors as $error) {
+                print_r($error);
+            }
+            echo '
'; + } + } + + /** + * Get an array of error messages, if any. + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * POP3 connection error handler. + * @param integer $errno + * @param string $errstr + * @param string $errfile + * @param integer $errline + * @access protected + */ + protected function catchWarning($errno, $errstr, $errfile, $errline) + { + $this->setError(array( + 'error' => "Connecting to the POP3 server raised a PHP warning: ", + 'errno' => $errno, + 'errstr' => $errstr, + 'errfile' => $errfile, + 'errline' => $errline + )); + } +} diff --git a/vendor/phpmailer/phpmailer/class.smtp.php b/vendor/phpmailer/phpmailer/class.smtp.php new file mode 100644 index 0000000..118cb20 --- /dev/null +++ b/vendor/phpmailer/phpmailer/class.smtp.php @@ -0,0 +1,1276 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2014 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +/** + * PHPMailer RFC821 SMTP email transport class. + * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server. + * @package PHPMailer + * @author Chris Ryan + * @author Marcus Bointon + */ +class SMTP +{ + /** + * The PHPMailer SMTP version number. + * @var string + */ + const VERSION = '5.2.27'; + + /** + * SMTP line break constant. + * @var string + */ + const CRLF = "\r\n"; + + /** + * The SMTP port to use if one is not specified. + * @var integer + */ + const DEFAULT_SMTP_PORT = 25; + + /** + * The maximum line length allowed by RFC 2822 section 2.1.1 + * @var integer + */ + const MAX_LINE_LENGTH = 998; + + /** + * Debug level for no output + */ + const DEBUG_OFF = 0; + + /** + * Debug level to show client -> server messages + */ + const DEBUG_CLIENT = 1; + + /** + * Debug level to show client -> server and server -> client messages + */ + const DEBUG_SERVER = 2; + + /** + * Debug level to show connection status, client -> server and server -> client messages + */ + const DEBUG_CONNECTION = 3; + + /** + * Debug level to show all messages + */ + const DEBUG_LOWLEVEL = 4; + + /** + * The PHPMailer SMTP Version number. + * @var string + * @deprecated Use the `VERSION` constant instead + * @see SMTP::VERSION + */ + public $Version = '5.2.27'; + + /** + * SMTP server port number. + * @var integer + * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead + * @see SMTP::DEFAULT_SMTP_PORT + */ + public $SMTP_PORT = 25; + + /** + * SMTP reply line ending. + * @var string + * @deprecated Use the `CRLF` constant instead + * @see SMTP::CRLF + */ + public $CRLF = "\r\n"; + + /** + * Debug output level. + * Options: + * * self::DEBUG_OFF (`0`) No debug output, default + * * self::DEBUG_CLIENT (`1`) Client commands + * * self::DEBUG_SERVER (`2`) Client commands and server responses + * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status + * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages + * @var integer + */ + public $do_debug = self::DEBUG_OFF; + + /** + * How to handle debug output. + * Options: + * * `echo` Output plain-text as-is, appropriate for CLI + * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output + * * `error_log` Output to error log as configured in php.ini + * + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: + * + * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; + * + * @var string|callable + */ + public $Debugoutput = 'echo'; + + /** + * Whether to use VERP. + * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path + * @link http://www.postfix.org/VERP_README.html Info on VERP + * @var boolean + */ + public $do_verp = false; + + /** + * The timeout value for connection, in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 + * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. + * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2 + * @var integer + */ + public $Timeout = 300; + + /** + * How long to wait for commands to complete, in seconds. + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 + * @var integer + */ + public $Timelimit = 300; + + /** + * @var array Patterns to extract an SMTP transaction id from reply to a DATA command. + * The first capture group in each regex will be used as the ID. + */ + protected $smtp_transaction_id_patterns = array( + 'exim' => '/[0-9]{3} OK id=(.*)/', + 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/', + 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/' + ); + + /** + * @var string The last transaction ID issued in response to a DATA command, + * if one was detected + */ + protected $last_smtp_transaction_id; + + /** + * The socket for the server connection. + * @var resource + */ + protected $smtp_conn; + + /** + * Error information, if any, for the last SMTP command. + * @var array + */ + protected $error = array( + 'error' => '', + 'detail' => '', + 'smtp_code' => '', + 'smtp_code_ex' => '' + ); + + /** + * The reply the server sent to us for HELO. + * If null, no HELO string has yet been received. + * @var string|null + */ + protected $helo_rply = null; + + /** + * The set of SMTP extensions sent in reply to EHLO command. + * Indexes of the array are extension names. + * Value at index 'HELO' or 'EHLO' (according to command that was sent) + * represents the server name. In case of HELO it is the only element of the array. + * Other values can be boolean TRUE or an array containing extension options. + * If null, no HELO/EHLO string has yet been received. + * @var array|null + */ + protected $server_caps = null; + + /** + * The most recent reply received from the server. + * @var string + */ + protected $last_reply = ''; + + /** + * Output debugging info via a user-selected method. + * @see SMTP::$Debugoutput + * @see SMTP::$do_debug + * @param string $str Debug string to output + * @param integer $level The debug level of this message; see DEBUG_* constants + * @return void + */ + protected function edebug($str, $level = 0) + { + if ($level > $this->do_debug) { + return; + } + //Avoid clash with built-in function names + if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) { + call_user_func($this->Debugoutput, $str, $level); + return; + } + switch ($this->Debugoutput) { + case 'error_log': + //Don't output, just log + error_log($str); + break; + case 'html': + //Cleans up output a bit for a better looking, HTML-safe output + echo gmdate('Y-m-d H:i:s') . ' ' . htmlentities( + preg_replace('/[\r\n]+/', '', $str), + ENT_QUOTES, + 'UTF-8' + ) . "
\n"; + break; + case 'echo': + default: + //Normalize line breaks + $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str); + echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( + "\n", + "\n \t ", + trim($str) + ) . "\n"; + } + } + + /** + * Connect to an SMTP server. + * @param string $host SMTP server IP or host name + * @param integer $port The port number to connect to + * @param integer $timeout How long to wait for the connection to open + * @param array $options An array of options for stream_context_create() + * @access public + * @return boolean + */ + public function connect($host, $port = null, $timeout = 30, $options = array()) + { + static $streamok; + //This is enabled by default since 5.0.0 but some providers disable it + //Check this once and cache the result + if (is_null($streamok)) { + $streamok = function_exists('stream_socket_client'); + } + // Clear errors to avoid confusion + $this->setError(''); + // Make sure we are __not__ connected + if ($this->connected()) { + // Already connected, generate error + $this->setError('Already connected to a server'); + return false; + } + if (empty($port)) { + $port = self::DEFAULT_SMTP_PORT; + } + // Connect to the SMTP server + $this->edebug( + "Connection: opening to $host:$port, timeout=$timeout, options=" . + var_export($options, true), + self::DEBUG_CONNECTION + ); + $errno = 0; + $errstr = ''; + if ($streamok) { + $socket_context = stream_context_create($options); + set_error_handler(array($this, 'errorHandler')); + $this->smtp_conn = stream_socket_client( + $host . ":" . $port, + $errno, + $errstr, + $timeout, + STREAM_CLIENT_CONNECT, + $socket_context + ); + restore_error_handler(); + } else { + //Fall back to fsockopen which should work in more places, but is missing some features + $this->edebug( + "Connection: stream_socket_client not available, falling back to fsockopen", + self::DEBUG_CONNECTION + ); + set_error_handler(array($this, 'errorHandler')); + $this->smtp_conn = fsockopen( + $host, + $port, + $errno, + $errstr, + $timeout + ); + restore_error_handler(); + } + // Verify we connected properly + if (!is_resource($this->smtp_conn)) { + $this->setError( + 'Failed to connect to server', + $errno, + $errstr + ); + $this->edebug( + 'SMTP ERROR: ' . $this->error['error'] + . ": $errstr ($errno)", + self::DEBUG_CLIENT + ); + return false; + } + $this->edebug('Connection: opened', self::DEBUG_CONNECTION); + // 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'); + // Don't bother if unlimited + if ($max != 0 && $timeout > $max) { + @set_time_limit($timeout); + } + stream_set_timeout($this->smtp_conn, $timeout, 0); + } + // Get any announcement + $announce = $this->get_lines(); + $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); + return true; + } + + /** + * Initiate a TLS (encrypted) session. + * @access public + * @return boolean + */ + public function startTLS() + { + if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { + return false; + } + + //Allow the best TLS version(s) we can + $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; + + //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT + //so add them back in manually if we can + if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; + } + + // Begin encrypted connection + set_error_handler(array($this, 'errorHandler')); + $crypto_ok = stream_socket_enable_crypto( + $this->smtp_conn, + true, + $crypto_method + ); + restore_error_handler(); + return $crypto_ok; + } + + /** + * Perform SMTP authentication. + * Must be run after hello(). + * @see hello() + * @param string $username The user name + * @param string $password The password + * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2) + * @param string $realm The auth realm for NTLM + * @param string $workstation The auth workstation for NTLM + * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth) + * @return bool True if successfully authenticated.* @access public + */ + public function authenticate( + $username, + $password, + $authtype = null, + $realm = '', + $workstation = '', + $OAuth = null + ) { + if (!$this->server_caps) { + $this->setError('Authentication is not allowed before HELO/EHLO'); + return false; + } + + if (array_key_exists('EHLO', $this->server_caps)) { + // SMTP extensions are available; try to find a proper authentication method + if (!array_key_exists('AUTH', $this->server_caps)) { + $this->setError('Authentication is not allowed at this stage'); + // 'at this stage' means that auth may be allowed after the stage changes + // e.g. after STARTTLS + return false; + } + + self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); + self::edebug( + 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), + self::DEBUG_LOWLEVEL + ); + + if (empty($authtype)) { + foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) { + if (in_array($method, $this->server_caps['AUTH'])) { + $authtype = $method; + break; + } + } + if (empty($authtype)) { + $this->setError('No supported authentication methods found'); + return false; + } + self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); + } + + if (!in_array($authtype, $this->server_caps['AUTH'])) { + $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); + return false; + } + } elseif (empty($authtype)) { + $authtype = 'LOGIN'; + } + switch ($authtype) { + case 'PLAIN': + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { + return false; + } + // Send encoded username and password + if (!$this->sendCommand( + 'User & Password', + base64_encode("\0" . $username . "\0" . $password), + 235 + ) + ) { + return false; + } + break; + case 'LOGIN': + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { + return false; + } + if (!$this->sendCommand("Username", base64_encode($username), 334)) { + return false; + } + if (!$this->sendCommand("Password", base64_encode($password), 235)) { + return false; + } + break; + case 'XOAUTH2': + //If the OAuth Instance is not set. Can be a case when PHPMailer is used + //instead of PHPMailerOAuth + if (is_null($OAuth)) { + return false; + } + $oauth = $OAuth->getOauth64(); + + // Start authentication + if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { + 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 Docs 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; + //Check that functions are available + if (!$ntlm_client->initialize($temp)) { + $this->setError($temp->error); + $this->edebug( + 'You need to enable some modules in your php.ini file: ' + . $this->error['error'], + self::DEBUG_CLIENT + ); + return false; + } + //msg1 + $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1 + + if (!$this->sendCommand( + 'AUTH NTLM', + 'AUTH NTLM ' . base64_encode($msg1), + 334 + ) + ) { + return false; + } + //Though 0 based, there is a white space after the 3 digit number + //msg2 + $challenge = substr($this->last_reply, 3); + $challenge = base64_decode($challenge); + $ntlm_res = $ntlm_client->NTLMResponse( + substr($challenge, 24, 8), + $password + ); + //msg3 + $msg3 = $ntlm_client->typeMsg3( + $ntlm_res, + $username, + $realm, + $workstation + ); + // send encoded username + return $this->sendCommand('Username', base64_encode($msg3), 235); + case 'CRAM-MD5': + // Start authentication + if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { + return false; + } + // Get the challenge + $challenge = base64_decode(substr($this->last_reply, 4)); + + // Build the response + $response = $username . ' ' . $this->hmac($challenge, $password); + + // send encoded credentials + return $this->sendCommand('Username', base64_encode($response), 235); + default: + $this->setError("Authentication method \"$authtype\" is not supported"); + return false; + } + return true; + } + + /** + * Calculate an MD5 HMAC hash. + * Works like hash_hmac('md5', $data, $key) + * in case that function is not available + * @param string $data The data to hash + * @param string $key The key to hash with + * @access protected + * @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 + // by Lance Rushing + + $bytelen = 64; // byte length for md5 + if (strlen($key) > $bytelen) { + $key = pack('H*', md5($key)); + } + $key = str_pad($key, $bytelen, chr(0x00)); + $ipad = str_pad('', $bytelen, chr(0x36)); + $opad = str_pad('', $bytelen, chr(0x5c)); + $k_ipad = $key ^ $ipad; + $k_opad = $key ^ $opad; + + return md5($k_opad . pack('H*', md5($k_ipad . $data))); + } + + /** + * Check connection state. + * @access public + * @return boolean True if connected. + */ + public function connected() + { + if (is_resource($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 + $this->edebug( + 'SMTP NOTICE: EOF caught while checking if connected', + self::DEBUG_CLIENT + ); + $this->close(); + return false; + } + return true; // everything looks good + } + return false; + } + + /** + * Close the socket and clean up the state of the class. + * Don't use this function without first trying to use QUIT. + * @see quit() + * @access public + * @return void + */ + public function close() + { + $this->setError(''); + $this->server_caps = null; + $this->helo_rply = null; + if (is_resource($this->smtp_conn)) { + // close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = null; //Makes for cleaner serialization + $this->edebug('Connection: closed', self::DEBUG_CONNECTION); + } + } + + /** + * Send an SMTP DATA command. + * 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 + * @param string $msg_data Message data to send + * @access public + * @return boolean + */ + public function data($msg_data) + { + //This will use the standard timelimit + if (!$this->sendCommand('DATA', 'DATA', 354)) { + return false; + } + + /* The server is ready to accept data! + * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF) + * 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. + * We will also look for lines that start with a '.' and prepend an additional '.'. + * NOTE: this does not count towards line-length limit. + */ + + // Normalize line breaks before exploding + $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data)); + + /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field + * of the first line (':' separated) does not contain a space then it _should_ be a header and we will + * process all lines before a blank line as headers. + */ + + $field = substr($lines[0], 0, strpos($lines[0], ':')); + $in_headers = false; + if (!empty($field) && strpos($field, ' ') === false) { + $in_headers = true; + } + + foreach ($lines as $line) { + $lines_out = array(); + if ($in_headers and $line == '') { + $in_headers = false; + } + //Break this line up into several smaller lines if it's too long + //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len), + while (isset($line[self::MAX_LINE_LENGTH])) { + //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on + //so as to avoid breaking in the middle of a word + $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); + //Deliberately matches both false and 0 + if (!$pos) { + //No nice break found, add a hard break + $pos = self::MAX_LINE_LENGTH - 1; + $lines_out[] = substr($line, 0, $pos); + $line = substr($line, $pos); + } else { + //Break at the found point + $lines_out[] = substr($line, 0, $pos); + //Move along by the amount we dealt with + $line = substr($line, $pos + 1); + } + //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 + if ($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + //Send the lines to the server + foreach ($lines_out as $line_out) { + //RFC2821 section 4.5.2 + if (!empty($line_out) and $line_out[0] == '.') { + $line_out = '.' . $line_out; + } + $this->client_send($line_out . self::CRLF); + } + } + + //Message data has been sent, complete the command + //Increase timelimit for end of DATA command + $savetimelimit = $this->Timelimit; + $this->Timelimit = $this->Timelimit * 2; + $result = $this->sendCommand('DATA END', '.', 250); + $this->recordLastTransactionID(); + //Restore timelimit + $this->Timelimit = $savetimelimit; + return $result; + } + + /** + * Send an SMTP HELO or EHLO command. + * Used to identify the sending server to the receiving server. + * This makes sure that client and server are in a known state. + * Implements RFC 821: HELO + * and RFC 2821 EHLO. + * @param string $host The host name or IP to connect to + * @access public + * @return boolean + */ + public function hello($host = '') + { + //Try extended hello first (RFC 2821) + return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host)); + } + + /** + * Send an SMTP HELO or EHLO command. + * Low-level implementation used by hello() + * @see hello() + * @param string $hello The HELO string + * @param string $host The hostname to say we are + * @access protected + * @return boolean + */ + protected function sendHello($hello, $host) + { + $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); + $this->helo_rply = $this->last_reply; + if ($noerror) { + $this->parseHelloFields($hello); + } else { + $this->server_caps = null; + } + return $noerror; + } + + /** + * Parse a reply to HELO/EHLO command to discover server extensions. + * In case of HELO, the only parameter that can be discovered is a server name. + * @access protected + * @param string $type - 'HELO' or 'EHLO' + */ + protected function parseHelloFields($type) + { + $this->server_caps = array(); + $lines = explode("\n", $this->helo_rply); + + foreach ($lines as $n => $s) { + //First 4 chars contain response code followed by - or space + $s = trim(substr($s, 4)); + if (empty($s)) { + continue; + } + $fields = explode(' ', $s); + if (!empty($fields)) { + if (!$n) { + $name = $type; + $fields = $fields[0]; + } else { + $name = array_shift($fields); + switch ($name) { + case 'SIZE': + $fields = ($fields ? $fields[0] : 0); + break; + case 'AUTH': + if (!is_array($fields)) { + $fields = array(); + } + break; + default: + $fields = true; + } + } + $this->server_caps[$name] = $fields; + } + } + } + + /** + * Send an SMTP MAIL command. + * 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: + * @param string $from Source address of this message + * @access public + * @return boolean + */ + public function mail($from) + { + $useVerp = ($this->do_verp ? ' XVERP' : ''); + return $this->sendCommand( + 'MAIL FROM', + 'MAIL FROM:<' . $from . '>' . $useVerp, + 250 + ); + } + + /** + * Send an SMTP QUIT command. + * Closes the socket if there is no error or the $close_on_error argument is true. + * Implements from rfc 821: QUIT + * @param boolean $close_on_error Should the connection close if an error occurs? + * @access public + * @return boolean + */ + public function quit($close_on_error = true) + { + $noerror = $this->sendCommand('QUIT', 'QUIT', 221); + $err = $this->error; //Save any error + if ($noerror or $close_on_error) { + $this->close(); + $this->error = $err; //Restore any error from the quit command + } + return $noerror; + } + + /** + * Send an SMTP RCPT command. + * Sets the TO argument to $toaddr. + * Returns true if the recipient was accepted false if it was rejected. + * Implements from rfc 821: RCPT TO: + * @param string $address The address the message is being sent to + * @access public + * @return boolean + */ + public function recipient($address) + { + return $this->sendCommand( + 'RCPT TO', + 'RCPT TO:<' . $address . '>', + array(250, 251) + ); + } + + /** + * Send an SMTP RSET command. + * Abort any transaction that is currently in progress. + * Implements rfc 821: RSET + * @access public + * @return boolean True on success. + */ + public function reset() + { + return $this->sendCommand('RSET', 'RSET', 250); + } + + /** + * Send a command to an SMTP server and check its return code. + * @param string $command The command name - not sent to the server + * @param string $commandstring The actual command to send + * @param integer|array $expect One or more expected integer success codes + * @access protected + * @return boolean True on success. + */ + protected function sendCommand($command, $commandstring, $expect) + { + if (!$this->connected()) { + $this->setError("Called $command without being connected"); + return false; + } + //Reject line breaks in all commands + if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) { + $this->setError("Command '$command' contained line breaks"); + return false; + } + $this->client_send($commandstring . self::CRLF); + + $this->last_reply = $this->get_lines(); + // Fetch SMTP code and possible error code explanation + $matches = array(); + if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) { + $code = $matches[1]; + $code_ex = (count($matches) > 2 ? $matches[2] : null); + // Cut off error code from each response line + $detail = preg_replace( + "/{$code}[ -]" . + ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . "/m", + '', + $this->last_reply + ); + } else { + // Fall back to simple parsing if regex fails + $code = substr($this->last_reply, 0, 3); + $code_ex = null; + $detail = substr($this->last_reply, 4); + } + + $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); + + if (!in_array($code, (array)$expect)) { + $this->setError( + "$command command failed", + $detail, + $code, + $code_ex + ); + $this->edebug( + 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, + self::DEBUG_CLIENT + ); + return false; + } + + $this->setError(''); + return true; + } + + /** + * Send an SMTP SAML command. + * 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: + * @param string $from The address the message is from + * @access public + * @return boolean + */ + public function sendAndMail($from) + { + return $this->sendCommand('SAML', "SAML FROM:$from", 250); + } + + /** + * Send an SMTP VRFY command. + * @param string $name The name to verify + * @access public + * @return boolean + */ + public function verify($name) + { + return $this->sendCommand('VRFY', "VRFY $name", array(250, 251)); + } + + /** + * Send an SMTP NOOP command. + * Used to keep keep-alives alive, doesn't actually do anything + * @access public + * @return boolean + */ + public function noop() + { + return $this->sendCommand('NOOP', 'NOOP', 250); + } + + /** + * Send an SMTP TURN command. + * 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 implemented in future + * Implements from rfc 821: TURN + * @access public + * @return boolean + */ + public function turn() + { + $this->setError('The SMTP TURN command is not implemented'); + $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); + return false; + } + + /** + * Send raw data to the server. + * @param string $data The data to send + * @access public + * @return integer|boolean The number of bytes sent to the server or false on error + */ + public function client_send($data) + { + $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT); + set_error_handler(array($this, 'errorHandler')); + $result = fwrite($this->smtp_conn, $data); + restore_error_handler(); + return $result; + } + + /** + * Get the latest error. + * @access public + * @return array + */ + public function getError() + { + return $this->error; + } + + /** + * Get SMTP extensions available on the server + * @access public + * @return array|null + */ + public function getServerExtList() + { + return $this->server_caps; + } + + /** + * A multipurpose method + * The method works in three ways, dependent on argument value and current state + * 1. HELO/EHLO was not sent - returns null and set up $this->error + * 2. HELO was sent + * $name = 'HELO': returns server name + * $name = 'EHLO': returns boolean false + * $name = any string: returns null and set up $this->error + * 3. EHLO was sent + * $name = 'HELO'|'EHLO': returns server name + * $name = any string: if extension $name exists, returns boolean True + * or its options. Otherwise returns boolean False + * In other words, one can use this method to detect 3 conditions: + * - null returned: handshake was not or we don't know about ext (refer to $this->error) + * - false returned: the requested feature exactly not exists + * - positive value returned: the requested feature exists + * @param string $name Name of SMTP extension or 'HELO'|'EHLO' + * @return mixed + */ + public function getServerExt($name) + { + if (!$this->server_caps) { + $this->setError('No HELO/EHLO was sent'); + return null; + } + + // the tight logic knot ;) + if (!array_key_exists($name, $this->server_caps)) { + if ($name == 'HELO') { + return $this->server_caps['EHLO']; + } + if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) { + return false; + } + $this->setError('HELO handshake was used. Client knows nothing about server extensions'); + return null; + } + + return $this->server_caps[$name]; + } + + /** + * Get the last reply from the server. + * @access public + * @return string + */ + public function getLastReply() + { + return $this->last_reply; + } + + /** + * Read the SMTP server's response. + * 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() + { + // If the connection is bad, give up straight away + if (!is_resource($this->smtp_conn)) { + return ''; + } + $data = ''; + $endtime = 0; + 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); + $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL); + $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL); + $data .= $str; + // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled), + // or 4th character is a space, we are done reading, break the loop, + // string array access is a micro-optimisation over strlen + if (!isset($str[3]) or (isset($str[3]) and $str[3] == ' ')) { + break; + } + // Timed-out? Log and break + $info = stream_get_meta_data($this->smtp_conn); + if ($info['timed_out']) { + $this->edebug( + 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', + self::DEBUG_LOWLEVEL + ); + break; + } + // Now check if reads took too long + if ($endtime and time() > $endtime) { + $this->edebug( + 'SMTP -> get_lines(): timelimit reached (' . + $this->Timelimit . ' sec)', + self::DEBUG_LOWLEVEL + ); + break; + } + } + return $data; + } + + /** + * Enable or disable VERP address generation. + * @param boolean $enabled + */ + public function setVerp($enabled = false) + { + $this->do_verp = $enabled; + } + + /** + * Get VERP address generation mode. + * @return boolean + */ + public function getVerp() + { + return $this->do_verp; + } + + /** + * Set error messages and codes. + * @param string $message The error message + * @param string $detail Further detail on the error + * @param string $smtp_code An associated SMTP error code + * @param string $smtp_code_ex Extended SMTP code + */ + protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') + { + $this->error = array( + 'error' => $message, + 'detail' => $detail, + 'smtp_code' => $smtp_code, + 'smtp_code_ex' => $smtp_code_ex + ); + } + + /** + * Set debug output method. + * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it. + */ + public function setDebugOutput($method = 'echo') + { + $this->Debugoutput = $method; + } + + /** + * Get debug output method. + * @return string + */ + public function getDebugOutput() + { + return $this->Debugoutput; + } + + /** + * Set debug output level. + * @param integer $level + */ + public function setDebugLevel($level = 0) + { + $this->do_debug = $level; + } + + /** + * Get debug output level. + * @return integer + */ + public function getDebugLevel() + { + return $this->do_debug; + } + + /** + * Set SMTP timeout. + * @param integer $timeout + */ + public function setTimeout($timeout = 0) + { + $this->Timeout = $timeout; + } + + /** + * Get SMTP timeout. + * @return integer + */ + public function getTimeout() + { + return $this->Timeout; + } + + /** + * Reports an error number and string. + * @param integer $errno The error number returned by PHP. + * @param string $errmsg The error message returned by PHP. + * @param string $errfile The file the error occurred in + * @param integer $errline The line number the error occurred on + */ + protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0) + { + $notice = 'Connection failed.'; + $this->setError( + $notice, + $errno, + $errmsg + ); + $this->edebug( + $notice . ' Error #' . $errno . ': ' . $errmsg . " [$errfile line $errline]", + self::DEBUG_CONNECTION + ); + } + + /** + * Extract and return the ID of the last SMTP transaction based on + * a list of patterns provided in SMTP::$smtp_transaction_id_patterns. + * Relies on the host providing the ID in response to a DATA command. + * If no reply has been received yet, it will return null. + * If no pattern was matched, it will return false. + * @return bool|null|string + */ + protected function recordLastTransactionID() + { + $reply = $this->getLastReply(); + + if (empty($reply)) { + $this->last_smtp_transaction_id = null; + } else { + $this->last_smtp_transaction_id = false; + foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) { + if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) { + $this->last_smtp_transaction_id = $matches[1]; + } + } + } + + return $this->last_smtp_transaction_id; + } + + /** + * Get the queue/transaction ID of the last SMTP transaction + * If no reply has been received yet, it will return null. + * If no pattern was matched, it will return false. + * @return bool|null|string + * @see recordLastTransactionID() + */ + public function getLastTransactionID() + { + return $this->last_smtp_transaction_id; + } +} diff --git a/vendor/phpmailer/phpmailer/composer.json b/vendor/phpmailer/phpmailer/composer.json new file mode 100644 index 0000000..a0ac296 --- /dev/null +++ b/vendor/phpmailer/phpmailer/composer.json @@ -0,0 +1,61 @@ +{ + "name": "phpmailer/phpmailer", + "type": "library", + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "require": { + "ext-ctype": "*", + "php": ">=5.0.0" + }, + "require-dev": { + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" + }, + "suggest": { + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + }, + "autoload": { + "classmap": [ + "class.phpmailer.php", + "class.phpmaileroauth.php", + "class.phpmaileroauthgoogle.php", + "class.smtp.php", + "class.pop3.php", + "extras/EasyPeasyICS.php", + "extras/ntlm_sasl_client.php" + ] + }, + "license": "LGPL-2.1" +} diff --git a/vendor/phpmailer/phpmailer/composer.lock b/vendor/phpmailer/phpmailer/composer.lock new file mode 100644 index 0000000..9808f28 --- /dev/null +++ b/vendor/phpmailer/phpmailer/composer.lock @@ -0,0 +1,3593 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "7e4b1bef833056eed0df39fad5399d7a", + "packages": [], + "packages-dev": [ + { + "name": "cilex/cilex", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/Cilex.git", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5", + "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5", + "shasum": "" + }, + "require": { + "cilex/console-service-provider": "1.*", + "php": ">=5.3.3", + "pimple/pimple": "~1.0", + "symfony/finder": "~2.1", + "symfony/process": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "symfony/validator": "~2.1" + }, + "suggest": { + "monolog/monolog": ">=1.0.0", + "symfony/validator": ">=1.0.0", + "symfony/yaml": ">=1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Cilex": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components", + "homepage": "http://cilex.github.com", + "keywords": [ + "cli", + "microframework" + ], + "time": "2014-03-29T14:03:13+00:00" + }, + { + "name": "cilex/console-service-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/Cilex/console-service-provider.git", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev", + "symfony/console": "~2.1" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "silex/silex": "1.*@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Cilex\\Provider\\Console": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "description": "Console Service Provider", + "keywords": [ + "cilex", + "console", + "pimple", + "service-provider", + "silex" + ], + "time": "2012-12-19T10:50:58+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Annotations\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2015-08-31T12:32:49+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/20ff8bbb57205368b4b42d094642a3e52dac85fb", + "reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2016-11-02T15:56:58+00:00" + }, + { + "name": "herrera-io/json", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/kherge-php/json.git", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-php/json/zipball/60c696c9370a1e5136816ca557c17f82a6fa83f1", + "reference": "60c696c9370a1e5136816ca557c17f82a6fa83f1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "justinrainbow/json-schema": ">=1.0,<2.0-dev", + "php": ">=5.3.3", + "seld/jsonlint": ">=1.0,<2.0-dev" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/lib/json_version.php" + ], + "psr-0": { + "Herrera\\Json": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io/", + "role": "Developer" + } + ], + "description": "A library for simplifying JSON linting and validation.", + "homepage": "http://herrera-io.github.com/php-json", + "keywords": [ + "json", + "lint", + "schema", + "validate" + ], + "abandoned": "kherge/json", + "time": "2013-10-30T16:51:34+00:00" + }, + { + "name": "herrera-io/phar-update", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/php-phar-update.git", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/php-phar-update/zipball/00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "reference": "00a79e1d5b8cf3c080a2e3becf1ddf7a7fea025b", + "shasum": "" + }, + "require": { + "herrera-io/json": "1.*", + "kherge/version": "1.*", + "php": ">=5.3.3" + }, + "require-dev": { + "herrera-io/phpunit-test-case": "1.*", + "mikey179/vfsstream": "1.1.0", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/lib/constants.php" + ], + "psr-0": { + "Herrera\\Phar\\Update": "src/lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "kevin@herrera.io", + "homepage": "http://kevin.herrera.io/", + "role": "Developer" + } + ], + "description": "A library for self-updating Phars.", + "homepage": "http://herrera-io.github.com/php-phar-update", + "keywords": [ + "phar", + "update" + ], + "abandoned": true, + "time": "2013-10-30T17:23:01+00:00" + }, + { + "name": "jms/metadata", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6a06970a10e0a532fb52d3959547123b84a3b3ab", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2016-12-05T10:18:33+00:00" + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" + }, + { + "name": "jms/serializer", + "version": "0.16.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "c8a171357ca92b6706e395c757f334902d430ea9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", + "reference": "c8a171357ca92b6706e395c757f334902d430ea9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": ">=5.3.2", + "phpcollection/phpcollection": "~0.1" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "~1.0.1", + "jackalope/jackalope-doctrine-dbal": "1.0.*", + "propel/propel1": "~1.7", + "symfony/filesystem": "2.*", + "symfony/form": "~2.1", + "symfony/translation": "~2.0", + "symfony/validator": "~2.0", + "symfony/yaml": "2.*", + "twig/twig": ">=1.8,<2.0-dev" + }, + "suggest": { + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.15-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2014-03-18T08:39:00+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "shasum": "" + }, + "require": { + "php": ">=5.3.29" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.1.0", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "~3.7" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2016-01-25T15:43:01+00:00" + }, + { + "name": "kherge/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/kherge-abandoned/Version.git", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kherge-abandoned/Version/zipball/f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "reference": "f07cf83f8ce533be8f93d2893d96d674bbeb7e30", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "KevinGH\\Version": "src/lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Herrera", + "email": "me@kevingh.com", + "homepage": "http://www.kevingh.com/" + } + ], + "description": "A parsing and comparison library for semantic versioning.", + "homepage": "http://github.com/kherge/Version", + "abandoned": true, + "time": "2012-08-16T17:13:03+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.22.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1e044bc4b34e91743943479f1be7a1d5eb93add0", + "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "~5.3" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-03-13T07:08:03+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-09-19T14:15:08+00:00" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpdocumentor/fileset", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Fileset.git", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Fileset/zipball/bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "reference": "bfa78d8fa9763dfce6d0e5d3730c1d8ab25d34b0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/finder": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Fileset component for collecting a set of files given directories and file paths", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "files", + "fileset", + "phpdoc" + ], + "time": "2013-08-06T21:07:42+00:00" + }, + { + "name": "phpdocumentor/graphviz", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/GraphViz.git", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/a906a90a9f230535f25ea31caf81b2323956283f", + "reference": "a906a90a9f230535f25ea31caf81b2323956283f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-02-02T13:00:08+00:00" + }, + { + "name": "phpdocumentor/phpdocumentor", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/phpDocumentor2.git", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/phpDocumentor2/zipball/be607da0eef9b9249c43c5b4820d25d631c73667", + "reference": "be607da0eef9b9249c43c5b4820d25d631c73667", + "shasum": "" + }, + "require": { + "cilex/cilex": "~1.0", + "erusev/parsedown": "~1.0", + "herrera-io/phar-update": "1.0.3", + "jms/serializer": ">=0.12", + "monolog/monolog": "~1.6", + "php": ">=5.3.3", + "phpdocumentor/fileset": "~1.0", + "phpdocumentor/graphviz": "~1.0", + "phpdocumentor/reflection": "^3.0", + "phpdocumentor/reflection-docblock": "~2.0", + "symfony/config": "~2.3", + "symfony/console": "~2.3", + "symfony/event-dispatcher": "~2.1", + "symfony/process": "~2.0", + "symfony/stopwatch": "~2.3", + "symfony/validator": "~2.2", + "twig/twig": "~1.3", + "zendframework/zend-cache": "~2.1", + "zendframework/zend-config": "~2.1", + "zendframework/zend-filter": "~2.1", + "zendframework/zend-i18n": "~2.1", + "zendframework/zend-serializer": "~2.1", + "zendframework/zend-servicemanager": "~2.1", + "zendframework/zend-stdlib": "~2.1", + "zetacomponents/document": ">=1.3.1" + }, + "require-dev": { + "behat/behat": "~3.0", + "mikey179/vfsstream": "~1.2", + "mockery/mockery": "~0.9@dev", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.4", + "symfony/expression-language": "~2.4" + }, + "suggest": { + "ext-twig": "Enabling the twig extension improves the generation of twig based templates.", + "ext-xslcache": "Enabling the XSLCache extension improves the generation of xml based templates." + }, + "bin": [ + "bin/phpdoc.php", + "bin/phpdoc" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "2.9-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/" + ], + "Cilex\\Provider": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Documentation Generator for PHP", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "api", + "application", + "dga", + "documentation", + "phpdoc" + ], + "time": "2016-05-22T09:50:56+00:00" + }, + { + "name": "phpdocumentor/reflection", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "reference": "793bfd92d9a0fc96ae9608fb3e947c3f59fb3a0d", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.0", + "php": ">=5.3.3", + "phpdocumentor/reflection-docblock": "~2.0", + "psr/log": "~1.0" + }, + "require-dev": { + "behat/behat": "~2.4", + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/", + "tests/unit/", + "tests/mocks/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2016-05-21T08:42:32+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03T12:10:50+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-03-02T20:05:34+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-02-06T05:18:07+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "pimple/pimple", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2013-11-22T08:30:29+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "791f8c594f300d246cdf01c6b3e1e19611e301d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/791f8c594f300d246cdf01c6b3e1e19611e301d8", + "reference": "791f8c594f300d246cdf01c6b3e1e19611e301d8", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2017-03-06T16:42:24+00:00" + }, + { + "name": "symfony/config", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "06ce6bb46c24963ec09323da45d0f4f85d3cecd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/06ce6bb46c24963ec09323da45d0f4f85d3cecd2", + "reference": "06ce6bb46c24963ec09323da45d0f4f85d3cecd2", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "require-dev": { + "symfony/yaml": "~2.7|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-03-01T18:13:50+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "81508e6fac4476771275a3f4f53c3fee9b956bfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/81508e6fac4476771275a3f4f53c3fee9b956bfa", + "reference": "81508e6fac4476771275a3f4f53c3fee9b956bfa", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-03-04T11:00:12+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e90099a2958d4833a02d05b504cc06e1c234abcc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e90099a2958d4833a02d05b504cc06e1c234abcc", + "reference": "e90099a2958d4833a02d05b504cc06e1c234abcc", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2|~3.0.0", + "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-02-18T19:13:35+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bb4ec47e8e109c1c1172145732d0aa468d967cd0", + "reference": "bb4ec47e8e109c1c1172145732d0aa468d967cd0", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-02-21T08:33:48+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e542d4765092d22552b1bf01ddccfb01d98ee325" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e542d4765092d22552b1bf01ddccfb01d98ee325", + "reference": "e542d4765092d22552b1bf01ddccfb01d98ee325", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-02-18T17:06:33+00:00" + }, + { + "name": "symfony/finder", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "5fc4b5cab38b9d28be318fcffd8066988e7d9451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/5fc4b5cab38b9d28be318fcffd8066988e7d9451", + "reference": "5fc4b5cab38b9d28be318fcffd8066988e7d9451", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-02-21T08:33:48+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/process", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "41336b20b52f5fd5b42a227e394e673c8071118f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/41336b20b52f5fd5b42a227e394e673c8071118f", + "reference": "41336b20b52f5fd5b42a227e394e673c8071118f", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2017-03-04T12:20:59+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "9e4369666d02ee9b8830da878b7f6a769eb96f4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9e4369666d02ee9b8830da878b7f6a769eb96f4b", + "reference": "9e4369666d02ee9b8830da878b7f6a769eb96f4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-02-18T17:06:33+00:00" + }, + { + "name": "symfony/translation", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b538355bc99db2ec7cc35284ec76d92ae7d1d256" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b538355bc99db2ec7cc35284ec76d92ae7d1d256", + "reference": "b538355bc99db2ec7cc35284ec76d92ae7d1d256", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.7" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8", + "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", + "symfony/yaml": "~2.2|~3.0.0" + }, + "suggest": { + "psr/log": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2017-03-04T12:20:59+00:00" + }, + { + "name": "symfony/validator", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "8d4bfa7ec24e70ebc28d0cea5f2702d3f1257a63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/8d4bfa7ec24e70ebc28d0cea5f2702d3f1257a63", + "reference": "8d4bfa7ec24e70ebc28d0cea5f2702d3f1257a63", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation": "~2.4|~3.0.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^1.2.1", + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/http-foundation": "~2.3|~3.0.0", + "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", + "symfony/property-access": "~2.3|~3.0.0", + "symfony/yaml": "^2.0.5|~3.0.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "symfony/config": "", + "symfony/expression-language": "For using the 2.4 Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For using the 2.4 Validator API", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Validator Component", + "homepage": "https://symfony.com", + "time": "2017-02-28T02:24:56+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d", + "reference": "2a7bab3c16f6f452c47818fdd08f3b1e49ffcf7d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-03-01T18:13:50+00:00" + }, + { + "name": "twig/twig", + "version": "v1.32.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "9935b662e24d6e634da88901ab534cc12e8c728f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9935b662e24d6e634da88901ab534cc12e8c728f", + "reference": "9935b662e24d6e634da88901ab534cc12e8c728f", + "shasum": "" + }, + "require": { + "php": ">=5.2.7" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.32-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2017-02-27T00:07:03+00:00" + }, + { + "name": "zendframework/zend-cache", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-cache.git", + "reference": "5999e5a03f7dcf82abbbe67eea74da641f959684" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/5999e5a03f7dcf82abbbe67eea74da641f959684", + "reference": "5999e5a03f7dcf82abbbe67eea74da641f959684", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-session": "~2.5" + }, + "suggest": { + "ext-apc": "APC >= 3.1.6 to use the APC storage adapter", + "ext-dba": "DBA, to use the DBA storage adapter", + "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter", + "ext-mongo": "Mongo, to use MongoDb storage adapter", + "ext-wincache": "WinCache, to use the WinCache storage adapter", + "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-session": "Zend\\Session component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a generic way to cache any data", + "homepage": "https://github.com/zendframework/zend-cache", + "keywords": [ + "cache", + "zf2" + ], + "time": "2015-06-03T15:31:59+00:00" + }, + { + "name": "zendframework/zend-config", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-config.git", + "reference": "ec49b1df1bdd9772df09dc2f612fbfc279bf4c27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-config/zipball/ec49b1df1bdd9772df09dc2f612fbfc279bf4c27", + "reference": "ec49b1df1bdd9772df09dc2f612fbfc279bf4c27", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-json": "~2.5", + "zendframework/zend-mvc": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes", + "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://github.com/zendframework/zend-config", + "keywords": [ + "config", + "zf2" + ], + "time": "2015-06-03T15:32:00+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "d94a16039144936f107f906896349900fd634443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/d94a16039144936f107f906896349900fd634443", + "reference": "d94a16039144936f107f906896349900fd634443", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "eventmanager", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-filter", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "93e6990a198e6cdd811064083acac4693f4b29ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/93e6990a198e6cdd811064083acac4693f4b29ae", + "reference": "93e6990a198e6cdd811064083acac4693f4b29ae", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-crypt": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-loader": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-uri": "~2.5" + }, + "suggest": { + "zendframework/zend-crypt": "Zend\\Crypt component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "homepage": "https://github.com/zendframework/zend-filter", + "keywords": [ + "filter", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-i18n", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "509271eb7947e4aabebfc376104179cffea42696" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/509271eb7947e4aabebfc376104179cffea42696", + "reference": "509271eb7947e4aabebfc376104179cffea42696", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-validator": "~2.5", + "zendframework/zend-view": "~2.5" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-i18n", + "keywords": [ + "i18n", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-json", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "c74eaf17d2dd37dc1e964be8dfde05706a821ebc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/c74eaf17d2dd37dc1e964be8dfde05706a821ebc", + "reference": "c74eaf17d2dd37dc1e964be8dfde05706a821ebc", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "~2.5", + "zendframework/zend-server": "~2.5", + "zendframework/zendxml": "~1.0" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-server": "Zend\\Server component", + "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-math", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-math.git", + "reference": "9f02a1ac4d3374d3332c80f9215deec9c71558fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-math/zipball/9f02a1ac4d3374d3332c80f9215deec9c71558fc", + "reference": "9f02a1ac4d3374d3332c80f9215deec9c71558fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "ircmaxell/random-lib": "~1.1", + "phpunit/phpunit": "~4.0", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "ext-bcmath": "If using the bcmath functionality", + "ext-gmp": "If using the gmp functionality", + "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", + "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-math", + "keywords": [ + "math", + "zf2" + ], + "time": "2015-06-03T15:32:02+00:00" + }, + { + "name": "zendframework/zend-serializer", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "b7208eb17dc4a4fb3a660b85e6c4af035eeed40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/b7208eb17dc4a4fb3a660b85e6c4af035eeed40c", + "reference": "b7208eb17dc4a4fb3a660b85e6c4af035eeed40c", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-json": "~2.5", + "zendframework/zend-math": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-servicemanager": "To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "homepage": "https://github.com/zendframework/zend-serializer", + "keywords": [ + "serializer", + "zf2" + ], + "time": "2015-06-03T15:32:02+00:00" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "3b22c403e351d92526c642cba0bd810bc22e1c56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/3b22c403e351d92526c642cba0bd810bc22e1c56", + "reference": "3b22c403e351d92526c642cba0bd810bc22e1c56", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2015-06-03T15:32:02+00:00" + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "cc8e90a60dd5d44b9730b77d07b97550091da1ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cc8e90a60dd5d44b9730b77d07b97550091da1ae", + "reference": "cc8e90a60dd5d44b9730b77d07b97550091da1ae", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2015-06-03T15:32:03+00:00" + }, + { + "name": "zetacomponents/base", + "version": "1.9", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Base.git", + "reference": "f20df24e8de3e48b6b69b2503f917e457281e687" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Base/zipball/f20df24e8de3e48b6b69b2503f917e457281e687", + "reference": "f20df24e8de3e48b6b69b2503f917e457281e687", + "shasum": "" + }, + "require-dev": { + "zetacomponents/unit-test": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sergey Alexeev" + }, + { + "name": "Sebastian Bergmann" + }, + { + "name": "Jan Borsodi" + }, + { + "name": "Raymond Bosman" + }, + { + "name": "Frederik Holljen" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Vadym Savchuk" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.", + "homepage": "https://github.com/zetacomponents", + "time": "2014-09-19T03:28:34+00:00" + }, + { + "name": "zetacomponents/document", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/zetacomponents/Document.git", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zetacomponents/Document/zipball/688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "reference": "688abfde573cf3fe0730f82538fbd7aa9fc95bc8", + "shasum": "" + }, + "require": { + "zetacomponents/base": "*" + }, + "require-dev": { + "zetacomponents/unit-test": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sebastian Bergmann" + }, + { + "name": "Kore Nordmann" + }, + { + "name": "Derick Rethans" + }, + { + "name": "Tobias Schlitt" + }, + { + "name": "Alexandru Stanoi" + } + ], + "description": "The Document components provides a general conversion framework for different semantic document markup languages like XHTML, Docbook, RST and similar.", + "homepage": "https://github.com/zetacomponents", + "time": "2013-12-19T11:40:00+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.0.0" + }, + "platform-dev": [] +} diff --git a/vendor/phpmailer/phpmailer/examples/DKIM.phps b/vendor/phpmailer/phpmailer/examples/DKIM.phps new file mode 100644 index 0000000..e3d2bae --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/DKIM.phps @@ -0,0 +1,38 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer DKIM test'; +//This should be the same as the domain of your From address +$mail->DKIM_domain = 'example.com'; +//Path to your private key file +$mail->DKIM_private = 'dkim_private.pem'; +//Set this to your own selector +$mail->DKIM_selector = 'phpmailer'; +//If your private key has a passphrase, set it here +$mail->DKIM_passphrase = ''; +//The identity you're signing as - usually your From address +$mail->DKIM_identity = $mail->From; + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/vendor/phpmailer/phpmailer/examples/code_generator.phps b/vendor/phpmailer/phpmailer/examples/code_generator.phps new file mode 100644 index 0000000..2182663 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/code_generator.phps @@ -0,0 +1,604 @@ +CharSet = 'utf-8'; +ini_set('default_charset', 'UTF-8'); +$mail->Debugoutput = $CFG['smtp_debugoutput']; +$example_code .= "\n\n\$mail = new PHPMailer(true);"; +$example_code .= "\n\$mail->CharSet = 'utf-8';"; +$example_code .= "\nini_set('default_charset', 'UTF-8');"; + +class phpmailerAppException extends phpmailerException +{ +} + +$example_code .= "\n\nclass phpmailerAppException extends phpmailerException {}"; +$example_code .= "\n\ntry {"; + +// Convert a string to its JavaScript representation. +function JSString($s) { + static $from = array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'); + static $to = array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\\"'); + return is_null($s)? 'null': '"' . str_replace($from, $to, "$s") . '"'; +} + +try { + if (isset($_POST["submit"]) && $_POST['submit'] == "Submit") { + $to = $to_email; + if (!PHPMailer::validateAddress($to)) { + throw new phpmailerAppException("Email address " . $to . " is invalid -- aborting!"); + } + + $example_code .= "\n\$to = '" . addslashes($to_email) . "';"; + $example_code .= "\nif(!PHPMailer::validateAddress(\$to)) {"; + $example_code .= "\n throw new phpmailerAppException(\"Email address \" . " . + "\$to . \" is invalid -- aborting!\");"; + $example_code .= "\n}"; + + switch ($test_type) { + case 'smtp': + $mail->isSMTP(); // telling the class to use SMTP + $mail->SMTPDebug = (integer)$smtp_debug; + $mail->Host = $smtp_server; // SMTP server + $mail->Port = (integer)$smtp_port; // set the SMTP port + if ($smtp_secure) { + $mail->SMTPSecure = strtolower($smtp_secure); + } + $mail->SMTPAuth = array_key_exists('smtp_authenticate', $_POST); // enable SMTP authentication? + if (array_key_exists('smtp_authenticate', $_POST)) { + $mail->Username = $authenticate_username; // SMTP account username + $mail->Password = $authenticate_password; // SMTP account password + } + + $example_code .= "\n\$mail->isSMTP();"; + $example_code .= "\n\$mail->SMTPDebug = " . (integer) $smtp_debug . ";"; + $example_code .= "\n\$mail->Host = \"" . addslashes($smtp_server) . "\";"; + $example_code .= "\n\$mail->Port = \"" . addslashes($smtp_port) . "\";"; + $example_code .= "\n\$mail->SMTPSecure = \"" . addslashes(strtolower($smtp_secure)) . "\";"; + $example_code .= "\n\$mail->SMTPAuth = " . (array_key_exists( + 'smtp_authenticate', + $_POST + ) ? 'true' : 'false') . ";"; + if (array_key_exists('smtp_authenticate', $_POST)) { + $example_code .= "\n\$mail->Username = \"" . addslashes($authenticate_username) . "\";"; + $example_code .= "\n\$mail->Password = \"" . addslashes($authenticate_password) . "\";"; + } + break; + case 'mail': + $mail->isMail(); // telling the class to use PHP's mail() + $example_code .= "\n\$mail->isMail();"; + break; + case 'sendmail': + $mail->isSendmail(); // telling the class to use Sendmail + $example_code .= "\n\$mail->isSendmail();"; + break; + case 'qmail': + $mail->isQmail(); // telling the class to use Qmail + $example_code .= "\n\$mail->isQmail();"; + break; + default: + throw new phpmailerAppException('Invalid test_type provided'); + } + + try { + if ($_POST['From_Name'] != '') { + $mail->addReplyTo($from_email, $from_name); + $mail->setFrom($from_email, $from_name); + + $example_code .= "\n\$mail->addReplyTo(\"" . + addslashes($from_email) . "\", \"" . addslashes($from_name) . "\");"; + $example_code .= "\n\$mail->setFrom(\"" . + addslashes($from_email) . "\", \"" . addslashes($from_name) . "\");"; + } else { + $mail->addReplyTo($from_email); + $mail->setFrom($from_email, $from_email); + + $example_code .= "\n\$mail->addReplyTo(\"" . addslashes($from_email) . "\");"; + $example_code .= "\n\$mail->setFrom(\"" . + addslashes($from_email) . "\", \"" . addslashes($from_email) . "\");"; + } + + if ($_POST['To_Name'] != '') { + $mail->addAddress($to, $to_name); + $example_code .= "\n\$mail->addAddress(\"$to\", \"" . addslashes($to_name) . "\");"; + } else { + $mail->addAddress($to); + $example_code .= "\n\$mail->addAddress(\"$to\");"; + } + + if ($_POST['bcc_Email'] != '') { + $indiBCC = explode(" ", $bcc_email); + foreach ($indiBCC as $key => $value) { + $mail->addBCC($value); + $example_code .= "\n\$mail->addBCC(\"" . addslashes($value) . "\");"; + } + } + + if ($_POST['cc_Email'] != '') { + $indiCC = explode(" ", $cc_Email); + foreach ($indiCC as $key => $value) { + $mail->addCC($value); + $example_code .= "\n\$mail->addCC(\"" . addslashes($value) . "\");"; + } + } + } catch (phpmailerException $e) { //Catch all kinds of bad addressing + throw new phpmailerAppException($e->getMessage()); + } + $mail->Subject = $subject . ' (PHPMailer test using ' . strtoupper($test_type) . ')'; + $example_code .= "\n\$mail->Subject = \"" . addslashes($subject) . + ' (PHPMailer test using ' . addslashes(strtoupper($test_type)) . ')";'; + + if ($_POST['Message'] == '') { + $body = file_get_contents('contents.html'); + } else { + $body = $message; + } + + $example_code .= "\n\$body = <<<'EOT'\n$body\nEOT;"; + + $mail->WordWrap = 78; // set word wrap to the RFC2822 limit + $mail->msgHTML($body, dirname(__FILE__), true); //Create message bodies and embed images + + $example_code .= "\n\$mail->WordWrap = 78;"; + $example_code .= "\n\$mail->msgHTML(\$body, dirname(__FILE__), true); //Create message bodies and embed images"; + + $mail->addAttachment('images/phpmailer_mini.png', 'phpmailer_mini.png'); // optional name + $mail->addAttachment('images/phpmailer.png', 'phpmailer.png'); // optional name + $example_code .= "\n\$mail->addAttachment('images/phpmailer_mini.png'," . + "'phpmailer_mini.png'); // optional name"; + $example_code .= "\n\$mail->addAttachment('images/phpmailer.png', 'phpmailer.png'); // optional name"; + + $example_code .= "\n\ntry {"; + $example_code .= "\n \$mail->send();"; + $example_code .= "\n \$results_messages[] = \"Message has been sent using " . + addslashes(strtoupper($test_type)) . "\";"; + $example_code .= "\n}"; + $example_code .= "\ncatch (phpmailerException \$e) {"; + $example_code .= "\n throw new phpmailerAppException('Unable to send to: ' . \$to. ': '.\$e->getMessage());"; + $example_code .= "\n}"; + + try { + $mail->send(); + $results_messages[] = "Message has been sent using " . strtoupper($test_type); + } catch (phpmailerException $e) { + throw new phpmailerAppException("Unable to send to: " . $to . ': ' . $e->getMessage()); + } + } +} catch (phpmailerAppException $e) { + $results_messages[] = $e->errorMessage(); +} +$example_code .= "\n}"; +$example_code .= "\ncatch (phpmailerAppException \$e) {"; +$example_code .= "\n \$results_messages[] = \$e->errorMessage();"; +$example_code .= "\n}"; +$example_code .= "\n\nif (count(\$results_messages) > 0) {"; +$example_code .= "\n echo \"

Run results

\\n\";"; +$example_code .= "\n echo \"
    \\n\";"; +$example_code .= "\nforeach (\$results_messages as \$result) {"; +$example_code .= "\n echo \"
  • \$result
  • \\n\";"; +$example_code .= "\n}"; +$example_code .= "\necho \"
\\n\";"; +$example_code .= "\n}"; +?> + + + + PHPMailer Test Page + + + + + + + + +"; + echo exit("ERROR: Wrong PHP version. Must be PHP 5 or above."); +} + +if (count($results_messages) > 0) { + echo '

Run results

'; + echo '
    '; + foreach ($results_messages as $result) { + echo "
  • $result
  • "; + } + echo '
'; +} + +if (isset($_POST["submit"]) && $_POST["submit"] == "Submit") { + echo "
\n"; + echo "
Script:\n"; + echo "
\n";
+    echo htmlentities($example_code);
+    echo "\n
\n"; + echo "\n
\n"; +} +?> +
+
+
+
+ Mail Details + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
Test will include two attachments.
+
+
+
+
+ Mail Test Specs + + + + + +
Test Type +
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+
"> + SMTP Specific Options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + value="true"> +
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contactform.phps b/vendor/phpmailer/phpmailer/examples/contactform.phps new file mode 100644 index 0000000..d85e204 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contactform.phps @@ -0,0 +1,71 @@ +isSMTP(); + $mail->Host = 'localhost'; + $mail->Port = 25; + + //Use a fixed address in your own domain as the from address + //**DO NOT** use the submitter's address here as it will be forgery + //and will cause your messages to fail SPF checks + $mail->setFrom('from@example.com', 'First Last'); + //Send the message to yourself, or whoever should receive contact for submissions + $mail->addAddress('whoto@example.com', 'John Doe'); + //Put the submitter's address in a reply-to header + //This will fail if the address provided is invalid, + //in which case we should ignore the whole request + if ($mail->addReplyTo($_POST['email'], $_POST['name'])) { + $mail->Subject = 'PHPMailer contact form'; + //Keep it simple - don't use HTML + $mail->isHTML(false); + //Build a simple message body + $mail->Body = <<send()) { + //The reason for failing to send will be in $mail->ErrorInfo + //but you shouldn't display errors to users - process the error, log it on your server. + $msg = 'Sorry, something went wrong. Please try again later.'; + } else { + $msg = 'Message sent! Thanks for contacting us.'; + } + } else { + $msg = 'Invalid email address, message ignored.'; + } +} +?> + + + + + Contact form + + +

Contact us

+$msg"; +} ?> +
+
+
+
+ +
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contents.html b/vendor/phpmailer/phpmailer/examples/contents.html new file mode 100644 index 0000000..dc3fc66 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contents.html @@ -0,0 +1,17 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

ISO-8859-1 text: ���������

+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contentsutf8.html b/vendor/phpmailer/phpmailer/examples/contentsutf8.html new file mode 100644 index 0000000..035d10c --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contentsutf8.html @@ -0,0 +1,21 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

Chinese text: 郵件內容為空

+

Russian text: Пустое тело сообщения

+

Armenian text: Հաղորդագրությունը դատարկ է

+

Czech text: Prázdné tělo zprávy

+

Emoji: 😂 🦄 💥 📤 📧

+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/exceptions.phps b/vendor/phpmailer/phpmailer/examples/exceptions.phps new file mode 100644 index 0000000..0e941e7 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/exceptions.phps @@ -0,0 +1,35 @@ +setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer Exceptions test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/vendor/phpmailer/phpmailer/examples/gmail.phps b/vendor/phpmailer/phpmailer/examples/gmail.phps new file mode 100644 index 0000000..121ca70 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/gmail.phps @@ -0,0 +1,99 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 2; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; +// use +// $mail->Host = gethostbyname('smtp.gmail.com'); +// if your network does not support SMTP over IPv6 + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Username to use for SMTP authentication - use full email address for gmail +$mail->Username = "username@gmail.com"; + +//Password to use for SMTP authentication +$mail->Password = "yourpassword"; + +//Set who the message is to be sent from +$mail->setFrom('from@example.com', 'First Last'); + +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; + //Section 2: IMAP + //Uncomment these to save your message in the 'Sent Mail' folder. + #if (save_mail($mail)) { + # echo "Message saved!"; + #} +} + +//Section 2: IMAP +//IMAP commands requires the PHP IMAP Extension, found at: https://php.net/manual/en/imap.setup.php +//Function to call which uses the PHP imap_*() functions to save messages: https://php.net/manual/en/book.imap.php +//You can use imap_getmailboxes($imapStream, '/imap/ssl') to get a list of available folders or labels, this can +//be useful if you are trying to get this working on a non-Gmail IMAP server. +function save_mail($mail) { + //You can change 'Sent Mail' to any other folder or tag + $path = "{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail"; + + //Tell your server to open an IMAP connection using the same username and password as you used for SMTP + $imapStream = imap_open($path, $mail->Username, $mail->Password); + + $result = imap_append($imapStream, $path, $mail->getSentMIMEMessage()); + imap_close($imapStream); + + return $result; +} diff --git a/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps b/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps new file mode 100644 index 0000000..2aec181 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps @@ -0,0 +1,85 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 0; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Set AuthType +$mail->AuthType = 'XOAUTH2'; + +//User Email to use for SMTP authentication - user who gave consent to our app +$mail->oauthUserEmail = "from@gmail.com"; + +//Obtained From Google Developer Console +$mail->oauthClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com"; + +//Obtained From Google Developer Console +$mail->oauthClientSecret = "RANDOMCHARS-----lGyjPcRtvP"; + +//Obtained By running get_oauth_token.php after setting up APP in Google Developer Console. +//Set Redirect URI in Developer Console as [https/http]:////get_oauth_token.php +// eg: http://localhost/phpmail/get_oauth_token.php +$mail->oauthRefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0"; + +//Set who the message is to be sent from +//For gmail, this generally needs to be the same as the user you logged in as +$mail->setFrom('from@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdd83c8ded93d00b1e05abcfe1d6cb5b2ae96ef GIT binary patch literal 5831 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 RgdfyIhIdW$>U5l={s-zotz7^B literal 0 HcmV?d00001 diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png new file mode 100644 index 0000000000000000000000000000000000000000..e6915f4317692a2591ef8c96ef74c50ea42a6fba GIT binary patch literal 1842 zcmV-22hI42P)cS z;&&eArFvNZrNTx8&q9F_J$UfI*49=(Ti!Qre+`?5s;4?sCM5$wU@&NWeB92?PCr{_ zqSMw;@*%0($^*qB(m{j=BkJz%wlJixH1->VNhVX(7ay~-B2 zwY9a(GT)!}^m4J`HFtBgo^6lOPqq0lIW5kK*IX*LY$!P<2pCjXSI06L85v;~s4wmT(7E?RPes7OO8NtDdii%h! z{r&wcFwPX`%IgXXZ}X*q-+qpER$22FIHr~_b;lDwf`dJJ^oV6rQBlDKW2FljYF*Q} zuB~mj-;tGGvh)cLcIworcO0EOdD0*l(vP{`7Dg*JM7cIVHY>t|VRWsouCmI%e*Idh zR2l<@^wR~y8$amlC$;nCVvknA?)Lj*7ErAt}3cqzHk8tJyGgWB7u&^*VIVczs_7Ju*_MGuU zwwED8;lV&fI-zM`NMlW!qYBCX+*niOi_DJC>RB!U=)mkQ7{Td!6+C7qhOx{7+&2x`M1bJkHQ7-=P<+qZ9bb#)m8tFEs8Cr&CldT(zJA$|b6b?esR;v&LPnGVa!%2;6B zSVvwk6f+wb8ew8$;y_^NY&$zUa6-VYUcHJVLh_YFB7uJ|FE0WH!O7Cn(wjGL9zTAZ zkdS~f5fKr+y}e8@IJ|c48jeoa*4A*BRVo!STU%Sx)6?_v@?dBR7(Dj%^${>c0|zoR zH8sTxM#4UDT1&w25ik15SI3VZ2Z>B3BVcF&yfeo^A&G(^@jP*Haq!FpD<~+y4i+(K z@Y&JPar5R)WDX1rAm{>tyZ-+E#)6^eU}U3WoD8k3te{E)_UzfSCk$cu?Sp|ICJhm=f7Nx`5cU}&*}bw&JQ zJiOpydV2co*|VtCU{}QX7)+oSFJ82?v>^PM35NTM4hd}dw70iswpd9?3A#GM%+OrO zDt^>vfLNLS>@_%TMr1Vd|}HzJ60aBvVG_rWmVq8E^8TZKZQ3k=w3 zG4~I0c6R<$z#ugK)2B}{N||6-QF?lMkh2elHspfgFU$WY1cok+^$k-66AaxF{i?aS z`Ocj?=xnIEsi}zzhH;Bx=&@M1F>~Nw9!vq#Xf&vpn~!h++*H;U0W&XIQq^iT*TmJ; z)!W;fH!c;CFJv;ra)+HtKtKRKVlhB1fF~OoM@Pr~TZ~(PVwlY0 + + + + PHPMailer Examples + + +

PHPMailer code examplesPHPMailer logo

+

This folder contains a collection of examples of using PHPMailer.

+

About testing email sending

+

When working on email sending code you'll find yourself worrying about what might happen if all these test emails got sent to your mailing list. The solution is to use a fake mail server, one that acts just like the real thing, but just doesn't actually send anything out. Some offer web interfaces, feedback, logging, the ability to return specific error codes, all things that are useful for testing error handling, authentication etc. Here's a selection of mail testing tools you might like to try:

+
    +
  • FakeSMTP, a Java desktop app with the ability to show an SMTP log and save messages to a folder.
  • +
  • FakeEmail, a Python-based fake mail server with a web interface.
  • +
  • smtp-sink, part of the Postfix mail server, so you probably already have this installed. This is used in the Travis-CI configuration to run PHPMailer's unit tests.
  • +
  • smtp4dev, a dummy SMTP server for Windows.
  • +
  • fakesendmail.sh, part of PHPMailer's test setup, this is a shell script that emulates sendmail for testing 'mail' or 'sendmail' methods in PHPMailer.
  • +
  • msglint, not a mail server, the IETF's MIME structure analyser checks the formatting of your messages.
  • +
+
+

Security note

+

Before running these examples you'll need to rename them with '.php' extensions. They are supplied as '.phps' files which will usually be displayed with syntax highlighting by PHP instead of running them. This prevents potential security issues with running potential spam-gateway code if you happen to deploy these code examples on a live site - please don't do that! Similarly, don't leave your passwords in these files as they will be visible to the world!

+
+

code_generator.phps

+

This script is a simple code generator - fill in the form and hit submit, and it will use when you entered to email you a message, and will also generate PHP code using your settings that you can copy and paste to use in your own apps. If you need to get going quickly, this is probably the best place to start.

+

mail.phps

+

This script is a basic example which creates an email message from an external HTML file, creates a plain text body, sets various addresses, adds an attachment and sends the message. It uses PHP's built-in mail() function which is the simplest to use, but relies on the presence of a local mail server, something which is not usually available on Windows. If you find yourself in that situation, either install a local mail server, or use a remote one and send using SMTP instead.

+

exceptions.phps

+

The same as the mail example, but shows how to use PHPMailer's optional exceptions for error handling.

+

smtp.phps

+

A simple example sending using SMTP with authentication.

+

smtp_no_auth.phps

+

A simple example sending using SMTP without authentication.

+

sendmail.phps

+

A simple example using sendmail. Sendmail is a program (usually found on Linux/BSD, OS X and other UNIX-alikes) that can be used to submit messages to a local mail server without a lengthy SMTP conversation. It's probably the fastest sending mechanism, but lacks some error reporting features. There are sendmail emulators for most popular mail servers including postfix, qmail, exim etc.

+

gmail.phps

+

Submitting email via Google's Gmail service is a popular use of PHPMailer. It's much the same as normal SMTP sending, just with some specific settings, namely using TLS encryption, authentication is enabled, and it connects to the SMTP submission port 587 on the smtp.gmail.com host. This example does all that.

+

pop_before_smtp.phps

+

Before effective SMTP authentication mechanisms were available, it was common for ISPs to use POP-before-SMTP authentication. As it implies, you authenticate using the POP3 protocol (an older protocol now mostly replaced by the far superior IMAP), and then the SMTP server will allow send access from your IP address for a short while, usually 5-15 minutes. PHPMailer includes a POP3 protocol client, so it can carry out this sequence - it's just like a normal SMTP conversation (without authentication), but connects via POP first.

+

mailing_list.phps

+

This is a somewhat naïve example of sending similar emails to a list of different addresses. It sets up a PHPMailer instance using SMTP, then connects to a MySQL database to retrieve a list of recipients. The code loops over this list, sending email to each person using their info and marks them as sent in the database. It makes use of SMTP keepalive which saves reconnecting and re-authenticating between each message.

+
+

smtp_check.phps

+

This is an example showing how to use the SMTP class by itself (without PHPMailer) to check an SMTP connection.

+
+

Most of these examples use the 'example.com' domain. This domain is reserved by IANA for illustrative purposes, as documented in RFC 2606. Don't use made-up domains like 'mydomain.com' or 'somedomain.com' in examples as someone, somewhere, probably owns them!

+ + diff --git a/vendor/phpmailer/phpmailer/examples/mail.phps b/vendor/phpmailer/phpmailer/examples/mail.phps new file mode 100644 index 0000000..8e129f4 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/mail.phps @@ -0,0 +1,31 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer mail() test'; +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/vendor/phpmailer/phpmailer/examples/mailing_list.phps b/vendor/phpmailer/phpmailer/examples/mailing_list.phps new file mode 100644 index 0000000..8644bb5 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/mailing_list.phps @@ -0,0 +1,59 @@ +isSMTP(); +$mail->Host = 'smtp.example.com'; +$mail->SMTPAuth = true; +$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead +$mail->Port = 25; +$mail->Username = 'yourname@example.com'; +$mail->Password = 'yourpassword'; +$mail->setFrom('list@example.com', 'List manager'); +$mail->addReplyTo('list@example.com', 'List manager'); + +$mail->Subject = "PHPMailer Simple database mailing list test"; + +//Same body for all messages, so set this before the sending loop +//If you generate a different body for each recipient (e.g. you're using a templating system), +//set it inside the loop +$mail->msgHTML($body); +//msgHTML also sets AltBody, but if you want a custom one, set it afterwards +$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; + +//Connect to the database and select the recipients from your mailing list that have not yet been sent to +//You'll need to alter this to match your database +$mysql = mysqli_connect('localhost', 'username', 'password'); +mysqli_select_db($mysql, 'mydb'); +$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false'); + +foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ + $mail->addAddress($row['email'], $row['full_name']); + if (!empty($row['photo'])) { + $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB + } + + if (!$mail->send()) { + echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '
'; + break; //Abandon sending + } else { + echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')
'; + //Mark it as sent in the DB + mysqli_query( + $mysql, + "UPDATE mailinglist SET sent = true WHERE email = '" . + mysqli_real_escape_string($mysql, $row['email']) . "'" + ); + } + // Clear all addresses and attachments for next loop + $mail->clearAddresses(); + $mail->clearAttachments(); +} diff --git a/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps b/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps new file mode 100644 index 0000000..164dfe8 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps @@ -0,0 +1,54 @@ +isSMTP(); + //Enable SMTP debugging + // 0 = off (for production use) + // 1 = client messages + // 2 = client and server messages + $mail->SMTPDebug = 2; + //Ask for HTML-friendly debug output + $mail->Debugoutput = 'html'; + //Set the hostname of the mail server + $mail->Host = "mail.example.com"; + //Set the SMTP port number - likely to be 25, 465 or 587 + $mail->Port = 25; + //Whether to use SMTP authentication + $mail->SMTPAuth = false; + //Set who the message is to be sent from + $mail->setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer POP-before-SMTP test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js b/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js new file mode 100644 index 0000000..feb6679 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js @@ -0,0 +1,664 @@ +// XRegExp 1.5.1 +// (c) 2007-2012 Steven Levithan +// MIT License +// +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function (undefined) { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.1"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + nativ.test.call(x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // of the provided regex in its own handling, but updates the property for compatibility + XRegExp.execAt = function (str, regex, pos, anchored) { + var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (anchored && match && match.index !== pos) + match = null; + if (regex.global) + regex.lastIndex = match ? r2.lastIndex : 0; + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, regex, callback, context) { + var r2 = clone(regex, "g"), + i = -1, match; + while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (regex.global) + regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` + callback.call(context, match, ++i, str, regex); + if (r2.lastIndex === match.index) + r2.lastIndex++; + } + if (regex.global) + regex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /]+)>/i, backref: 1}, // tag attributes + // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overridden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match, name, r2, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call((str + "").slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return match; + }; + + // Fix browser bugs in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the altered + // `exec` would take care of the `lastIndex` fixes + var match, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return !!match; + }; + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str, origLastIndex; + + // There are too many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so don't try + //if (...) + // return nativ.replace.apply(this, arguments); + + if (isRegex) { + if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + if (!search.global) + origLastIndex = search.lastIndex; + } else { + search = search + ""; // Type conversion + } + + if (Object.prototype.toString.call(replacement) === "[object Function]") { + result = nativ.replace.call(this + "", search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` (fix browsers) + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex) { + if (search.global) + search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) + else + search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + } + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return nativ.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!nativ.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (? + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); + diff --git a/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js b/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js new file mode 100644 index 0000000..9f5942e --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js @@ -0,0 +1,122 @@ +(function() { + +var sh = SyntaxHighlighter; + +/** + * Provides functionality to dynamically load only the brushes that a needed to render the current page. + * + * There are two syntaxes that autoload understands. For example: + * + * SyntaxHighlighter.autoloader( + * [ 'applescript', 'Scripts/shBrushAppleScript.js' ], + * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ] + * ); + * + * or a more easily comprehendable one: + * + * SyntaxHighlighter.autoloader( + * 'applescript Scripts/shBrushAppleScript.js', + * 'actionscript3 as3 Scripts/shBrushAS3.js' + * ); + */ +sh.autoloader = function() +{ + var list = arguments, + elements = sh.findElements(), + brushes = {}, + scripts = {}, + all = SyntaxHighlighter.all, + allCalled = false, + allParams = null, + i + ; + + SyntaxHighlighter.all = function(params) + { + allParams = params; + allCalled = true; + }; + + function addBrush(aliases, url) + { + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = url; + }; + + function getAliases(item) + { + return item.pop + ? item + : item.split(/\s+/) + ; + } + + // create table of aliases and script urls + for (i = 0; i < list.length; i++) + { + var aliases = getAliases(list[i]), + url = aliases.pop() + ; + + addBrush(aliases, url); + } + + // dynamically add - - - - - - - -"; - echo exit("ERROR: Wrong PHP version. Must be PHP 5 or above."); -} - -if (count($results_messages) > 0) { - echo '

Run results

'; - echo '
    '; - foreach ($results_messages as $result) { - echo "
  • $result
  • "; - } - echo '
'; -} - -if (isset($_POST["submit"]) && $_POST["submit"] == "Submit") { - echo "
\n"; - echo "
Script:\n"; - echo "
\n";
-    echo htmlentities($example_code);
-    echo "\n
\n"; - echo "\n
\n"; -} -?> -
-
-
-
- Mail Details - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
Test will include two attachments.
-
-
-
-
- Mail Test Specs - - - - - -
Test Type -
- - - required> -
-
- - - required> -
-
- - - required> -
-
- - - required> -
-
-
"> - SMTP Specific Options: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
- - value="true"> -
- -
- -
-
-
-
-
- -
-
- -
- -
-
-
- - diff --git a/vendor/phpmailer/phpmailer/examples/contactform.phps b/vendor/phpmailer/phpmailer/examples/contactform.phps deleted file mode 100644 index d85e204..0000000 --- a/vendor/phpmailer/phpmailer/examples/contactform.phps +++ /dev/null @@ -1,71 +0,0 @@ -isSMTP(); - $mail->Host = 'localhost'; - $mail->Port = 25; - - //Use a fixed address in your own domain as the from address - //**DO NOT** use the submitter's address here as it will be forgery - //and will cause your messages to fail SPF checks - $mail->setFrom('from@example.com', 'First Last'); - //Send the message to yourself, or whoever should receive contact for submissions - $mail->addAddress('whoto@example.com', 'John Doe'); - //Put the submitter's address in a reply-to header - //This will fail if the address provided is invalid, - //in which case we should ignore the whole request - if ($mail->addReplyTo($_POST['email'], $_POST['name'])) { - $mail->Subject = 'PHPMailer contact form'; - //Keep it simple - don't use HTML - $mail->isHTML(false); - //Build a simple message body - $mail->Body = <<send()) { - //The reason for failing to send will be in $mail->ErrorInfo - //but you shouldn't display errors to users - process the error, log it on your server. - $msg = 'Sorry, something went wrong. Please try again later.'; - } else { - $msg = 'Message sent! Thanks for contacting us.'; - } - } else { - $msg = 'Invalid email address, message ignored.'; - } -} -?> - - - - - Contact form - - -

Contact us

-$msg"; -} ?> -
-
-
-
- -
- - diff --git a/vendor/phpmailer/phpmailer/examples/contents.html b/vendor/phpmailer/phpmailer/examples/contents.html deleted file mode 100644 index dc3fc66..0000000 --- a/vendor/phpmailer/phpmailer/examples/contents.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - PHPMailer Test - - -
-

This is a test of PHPMailer.

-
- PHPMailer rocks -
-

This example uses HTML.

-

ISO-8859-1 text: ���������

-
- - diff --git a/vendor/phpmailer/phpmailer/examples/contentsutf8.html b/vendor/phpmailer/phpmailer/examples/contentsutf8.html deleted file mode 100644 index 035d10c..0000000 --- a/vendor/phpmailer/phpmailer/examples/contentsutf8.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - PHPMailer Test - - -
-

This is a test of PHPMailer.

-
- PHPMailer rocks -
-

This example uses HTML.

-

Chinese text: 郵件內容為空

-

Russian text: Пустое тело сообщения

-

Armenian text: Հաղորդագրությունը դատարկ է

-

Czech text: Prázdné tělo zprávy

-

Emoji: 😂 🦄 💥 📤 📧

-
- - diff --git a/vendor/phpmailer/phpmailer/examples/exceptions.phps b/vendor/phpmailer/phpmailer/examples/exceptions.phps deleted file mode 100644 index 0e941e7..0000000 --- a/vendor/phpmailer/phpmailer/examples/exceptions.phps +++ /dev/null @@ -1,35 +0,0 @@ -setFrom('from@example.com', 'First Last'); - //Set an alternative reply-to address - $mail->addReplyTo('replyto@example.com', 'First Last'); - //Set who the message is to be sent to - $mail->addAddress('whoto@example.com', 'John Doe'); - //Set the subject line - $mail->Subject = 'PHPMailer Exceptions test'; - //Read an HTML message body from an external file, convert referenced images to embedded, - //and convert the HTML into a basic plain-text alternative body - $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); - //Replace the plain text body with one created manually - $mail->AltBody = 'This is a plain-text message body'; - //Attach an image file - $mail->addAttachment('images/phpmailer_mini.png'); - //send the message - //Note that we don't need check the response from this because it will throw an exception if it has trouble - $mail->send(); - echo "Message sent!"; -} catch (phpmailerException $e) { - echo $e->errorMessage(); //Pretty error messages from PHPMailer -} catch (Exception $e) { - echo $e->getMessage(); //Boring error messages from anything else! -} diff --git a/vendor/phpmailer/phpmailer/examples/gmail.phps b/vendor/phpmailer/phpmailer/examples/gmail.phps deleted file mode 100644 index 121ca70..0000000 --- a/vendor/phpmailer/phpmailer/examples/gmail.phps +++ /dev/null @@ -1,99 +0,0 @@ -isSMTP(); - -//Enable SMTP debugging -// 0 = off (for production use) -// 1 = client messages -// 2 = client and server messages -$mail->SMTPDebug = 2; - -//Ask for HTML-friendly debug output -$mail->Debugoutput = 'html'; - -//Set the hostname of the mail server -$mail->Host = 'smtp.gmail.com'; -// use -// $mail->Host = gethostbyname('smtp.gmail.com'); -// if your network does not support SMTP over IPv6 - -//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission -$mail->Port = 587; - -//Set the encryption system to use - ssl (deprecated) or tls -$mail->SMTPSecure = 'tls'; - -//Whether to use SMTP authentication -$mail->SMTPAuth = true; - -//Username to use for SMTP authentication - use full email address for gmail -$mail->Username = "username@gmail.com"; - -//Password to use for SMTP authentication -$mail->Password = "yourpassword"; - -//Set who the message is to be sent from -$mail->setFrom('from@example.com', 'First Last'); - -//Set an alternative reply-to address -$mail->addReplyTo('replyto@example.com', 'First Last'); - -//Set who the message is to be sent to -$mail->addAddress('whoto@example.com', 'John Doe'); - -//Set the subject line -$mail->Subject = 'PHPMailer GMail SMTP test'; - -//Read an HTML message body from an external file, convert referenced images to embedded, -//convert HTML into a basic plain-text alternative body -$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); - -//Replace the plain text body with one created manually -$mail->AltBody = 'This is a plain-text message body'; - -//Attach an image file -$mail->addAttachment('images/phpmailer_mini.png'); - -//send the message, check for errors -if (!$mail->send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; - //Section 2: IMAP - //Uncomment these to save your message in the 'Sent Mail' folder. - #if (save_mail($mail)) { - # echo "Message saved!"; - #} -} - -//Section 2: IMAP -//IMAP commands requires the PHP IMAP Extension, found at: https://php.net/manual/en/imap.setup.php -//Function to call which uses the PHP imap_*() functions to save messages: https://php.net/manual/en/book.imap.php -//You can use imap_getmailboxes($imapStream, '/imap/ssl') to get a list of available folders or labels, this can -//be useful if you are trying to get this working on a non-Gmail IMAP server. -function save_mail($mail) { - //You can change 'Sent Mail' to any other folder or tag - $path = "{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail"; - - //Tell your server to open an IMAP connection using the same username and password as you used for SMTP - $imapStream = imap_open($path, $mail->Username, $mail->Password); - - $result = imap_append($imapStream, $path, $mail->getSentMIMEMessage()); - imap_close($imapStream); - - return $result; -} diff --git a/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps b/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps deleted file mode 100644 index 2aec181..0000000 --- a/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps +++ /dev/null @@ -1,85 +0,0 @@ -isSMTP(); - -//Enable SMTP debugging -// 0 = off (for production use) -// 1 = client messages -// 2 = client and server messages -$mail->SMTPDebug = 0; - -//Ask for HTML-friendly debug output -$mail->Debugoutput = 'html'; - -//Set the hostname of the mail server -$mail->Host = 'smtp.gmail.com'; - -//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission -$mail->Port = 587; - -//Set the encryption system to use - ssl (deprecated) or tls -$mail->SMTPSecure = 'tls'; - -//Whether to use SMTP authentication -$mail->SMTPAuth = true; - -//Set AuthType -$mail->AuthType = 'XOAUTH2'; - -//User Email to use for SMTP authentication - user who gave consent to our app -$mail->oauthUserEmail = "from@gmail.com"; - -//Obtained From Google Developer Console -$mail->oauthClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com"; - -//Obtained From Google Developer Console -$mail->oauthClientSecret = "RANDOMCHARS-----lGyjPcRtvP"; - -//Obtained By running get_oauth_token.php after setting up APP in Google Developer Console. -//Set Redirect URI in Developer Console as [https/http]:////get_oauth_token.php -// eg: http://localhost/phpmail/get_oauth_token.php -$mail->oauthRefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0"; - -//Set who the message is to be sent from -//For gmail, this generally needs to be the same as the user you logged in as -$mail->setFrom('from@example.com', 'First Last'); - -//Set who the message is to be sent to -$mail->addAddress('whoto@example.com', 'John Doe'); - -//Set the subject line -$mail->Subject = 'PHPMailer GMail SMTP test'; - -//Read an HTML message body from an external file, convert referenced images to embedded, -//convert HTML into a basic plain-text alternative body -$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); - -//Replace the plain text body with one created manually -$mail->AltBody = 'This is a plain-text message body'; - -//Attach an image file -$mail->addAttachment('images/phpmailer_mini.png'); - -//send the message, check for errors -if (!$mail->send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer.png deleted file mode 100644 index 9bdd83c8ded93d00b1e05abcfe1d6cb5b2ae96ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5831 zcmZ`-XE*jNYS*8Z~-kbfbkRA=)I& zL=Q&Y40Gq)^YcFU$G4xopS{2Jt@^I@?zd(p26WV1)I>x?bcXlz%!!DIEeQ9vlq7`f z)5P1NL_};!hI-l-A;h~M-afi%#W#Eg3tdJMlOkV7$H((Oj|&iz9I}fxNQi6Fd*67c zM1*OO(Lp4==ud;$&&mP4Xfs>STdPbC4CBRq2v*6efi0)WFI#+}yEx4`H=B<+a*9`5 z(EY2VGlpKdaTIfA;S+0U?EhKb!jOJBDVVSC--h|{tCM+yB%Ytm9+N|f+*vXXi&Im{ zsi}e%@$cSoi6W6mMv3FoQ+lsP=U$RStAo*g#}|K>J4y}U*N1!`OgwCDbIm+{)_y*^ zl$5&t?XP5EI;-?DB^}*WK0g?2kU*0r`hZK+Ol?N>>guW=T2xi_w*5XU2NzdgR+H;+ z(w{$nMn^}>%7hU}$SdqW&m!1m9e?S1dwbJTQ876(a&t>kVX@dZ)aMChY+mzqtgsvP zQgjDc%vc)Obj>K{j!um9*bA82I?smdXT;ae0fEny3=COhq@<)S_F|HfX=K|TTx)+O z@}?PTtsA4h+^0J@KU_D}1jt%#B_O>>v_br({1|gXeMSC`SrG#u(Jp)yvtC`fbM0I~Q`N$+o+TEn|Gxb&WoXs=@24 z%NTBsg)G+4ki&ziBG)COFZ0*HvyIW8TYW5e$LzVrx~U>uQFpgS5!wSt*^q6~`kv^9 zCG~VkC<_QfGN`Gkm9cG17P9*;U(~WiUUizsO^FDrZbI@z!(6YM>$(2SgK12?opR#R z&T6faL9f|)*{a=wK;iO=JfuH}}y!`RW?(rym++PB;s*DvH5@>0EecAdEmwYgy z)sLu7eIt|I4g3623xyjdrBkc`Q#&+V&;L}Q0@sYf%X2=c2b-TM(Y_+lgJyz$jivhX zlf&yr6aX(Tud0f7KIlSaA1+o-{Z{x#oa&H?de*oxYk_~aQ6^DRL1n#E5_{*H81fTu znV}I)B>w6Q( zxxorC;KzuxL)`JsAJkP-ov^I_CNn1=4)e`Ce>V>|U+)BC{a)mYssuAI0ya=u#d2;q zpGMR31^6x9r7_6si$Ft0cJ>Nc2))&dx`P21kI{uf93r4h&8f|dVL&ei+EPIazLbJA z4Gj3v($n9UrUz;AP!hC4=BC-&xBK_r2U1uhT0$<4t9)XwB(3VwZE?7x$=Q5-i|g4U z3H%Tk8Z85p`u#?aX=H2_P@gcn^vm#6_KbW)!rw>U_o%F|Z?h-3P1~*NuBjC zpS}|zr4S_$23*3LjVN-~_H1+;W23=%04Ny#^@l*?F*N>o##Ds(IrE+XMB$ZiF9C)# z(8B@P(q{!Vhfm+VaQSOC7rBiUdbQOO?&BF0Z92^i*j%@vpn0KRSK9;no0g&D_(qdVG1PPJs(}X1poflKz6XT-*4*BLk*~P^b2&)F|W)p2= z*EuvTa&{@%CB9f@9v~hC8t@mQ4GvqnLS`p?M^Z&jGeNA0Ac-imtPZRzHfCd@+OmfK zhVMiwIU8fa#RKRao~g&Y0Qp6?OrtoF0Aed!7P2aIzv_Fo{kDSJ=uLuB0WEE6k|O3I z!|E*~|Hx{QV%JHSeR)*WC4K(U*eGwPL)J4#kb2b2wcGf6LWaNIoX9u}-y2PFpC-RumMjV< zh5x(KMcNpLnyax&Sz@7ZIl~j zRfbB>UA?!4vS_R6^PlbwCq!7|8{oM1E`m@aq9ZiSk|h54>pbjCIvm-ohMEu7yWH@0XYuD zg+jHXU(#*M)OWT?jQNqFU5f2)@lLl{KzHXJT3Dcu9ABSjf3+lLPD0=oYNBmdt+EQe z=bJ-K^!2O{Hq<{(SLBF8T4Bt$7UDUt!pqqxV-`%IH&tOZl+^`S()hvm>|2|8<=FKj zol=^--D#r;FSlzPa4f@1jt1*QoX_}SSq81hIDQ*N-G1@soF4)PicHEL(v&@X7NVsP|!gFo1P+oGY4gm-ATKq)Co=){Y=5$IugU+j9XOknR&nb=fG6X|#TJ}KaK zKZA6q2yxIZ2m%B=@(U!LaVYybB~Yhg3=IT%1(H&YwU2dXZ7x|t$5&&(`6d<5#|<3_ zRd2=sGqbgocq%2iRo3h*@iO#>m<<>_Xx3>NCl;Y ze+Xe2o5WIN;wU+tgNmdeWA%JOw;&^Ngj%PIO8Q@Ut{o1{2?+^eLj~5*9_(dKj-p2s zj(}21=>$}}=X{*?4?txNosr}f5)zst?3-)F++DmeT4xQ-L_G(#^nx={5x6OCl}CnC z%gf^ggw)3v2(A;Rh3`?El0lmW@jXy?clV&6AQKaM&CV#4*1D*@#Ngndh=@r1c2-ta z>9;qdTv|~?V}AC~h}8zQmzr;iB?w}q5M~sww3!*z^GtWm}|b<*;GVi5Ok1E zE?l^k%9mbEFfN)N7#aqS9T5D)Dmh@J})K+a|uF-!-T`?cG zwkl_$+Ho99kHStOlalEFeW4Hihq$P^Ff;&7(|{w#P;jgoY3&y078HE@Phvw@0+fb2 z6IFzZFWB4_jPXhT*V9};V@|D!9`z216ha%&4h!qL{*nEk!9?8W+hwJ{O5FjvQ8>;k z+$OcCzTWf!bhmI{kbf+eHezS;?k|5;!f1VNZ`;0K5@Qv_#DVC2So$dhe~DDBHF9?(OalI8ANvB#PWAe8#x;a*CNo2E`2aqrD{uZorwsis{G6*GDL$g=`zK-XRGl)~><~_V@e?^FaX}qNVOgwT8CnG6 z7NNjTI&v>ma|LDlq3$)bOLFq0%P*|xXlY(EtiJolS=W!n;oD(;%kA<@$|3J}PIl&f zqH{m0?Clor%*I_0EOBqJ!ct%|UAi$7+trPq-Y7+Y+(Ob-Z+Gj}MqcDQDDtck`me-R zg`&ZJvnhO!P(G@kLLM)eyzVx&ku5-deH|8f9B*5cs{v@EAu#rS0#Om1*T15}hB-}l zEBhV1{7v9mNj$fwt&%kyTbu}UvCF>=h7F@gk^g|cXVVFc|76#Ol{q6!Z6M9?^DvD< z&DWur(F_@H1Es7=%>svZe*qRV^-tFi(Qw?0pWUX=FxQU3*-Tj{!mJs*KU6&lCdC;0 zsQjIz2TJp|8WXwvP+u{I9x*;A!r_N&cURUDU6o#>p!7l#UkSr9>YWga3ElSeaEyje zYL2OJ(G6LKrRJ@pjma`jzL90F$!_J4P04tJ+ECHiCS_qx-fsp*riGdeEV&TdxB8)cxyfM!QaWQFp7H8;-;JmbssU>R z;|R{}3ON+K+c8fCpjF&7(2CjkYX^zit%)1xXNCe_4+Wze$tuIY=?TEDPO@@&wn<)H z$H?(R&;Ihxmri_rec2=bn(t1CoQh}A`N8kAeH6FG#qMUc=RvX(lTx)P9P(DUUD~dd zb}c7cGY&iHcBTo$G3pdJbOn_c+(~gFkQX>a7aF4k2|sss98Tix?>9F=qA0Roz1_2? zof&6b+TLI85DKnjdBEFY4_CXxwmtNrYdToU(1_=MR%hHHyFj{p3$zI?&O z?DiLaHWYlp{gyWL=N5q%@`k2pzuu`f4e#-|=Vk)_=jjklcDj4LW4D6MK!nZ+yN`WW zkPjiUx2tUoXGv0Y5X##E5%A`e*vLTZ8QR5&ky~@;4GEV&3f>A7pb6D(YUORA@--Zo zp1mc+@ld_9nu|DxWjqUg0UWLmcfQ;S?-9~ac6+3I2a$>6B~(^^r9X+HG?3WkIalq3 zfCjWzRrC8DG^_Eh!(Ie0RFYII)h9$9G7 zz$&SGs)K!_$c5IDKi0j^j`$0v;h9ONmi*+ zl(vxI=$R};{)?P~T1&GY0Aq|*ey(DW$#`A@IpynD1gW5S!~5-CpI-pq0l)DGsxb_* z*Tx=i=XvAd6t-UL0ay&JGtG|Ou}QwkT&`Fm`O_AAMm+Qh+2HqjnwT6aR=G~obL^G(_r}PD~sjS%#jXH zhYS$0hzh3vJKDsZ8kCKPe-#_Of^^F4v1xFgVXT=$MoJskKs+<+xMs=Wro4UHK=j{5i#RM((VXR6JB>0)-hYOnl=6jNN??sTG{zN^F>hf8 zBPa?E%%(>H($vI=Ii(1RBB>XFEz7^jjt7g2$u%P(ZikG|N1KW98NZp|R7jQ7O=+k- z?TWD>85?-Kt#f#MnZ+sd-45^8Oht^dCG_KtvpGt zAkEob4fu-R9Zn=)p0yr6IJLsS_7>$?2ec?-wNsYrh|40_ZWUwRNw%8i3j67kqDleO zt$ob3_d0&Ly1L8bk3DHTe&lp@!^)}U$LM(cc@Pi}VubKRwQv#V#D}Dimn!Rl3kx*^ RgdfyIhIdW$>U5l={s-zotz7^B diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png deleted file mode 100644 index e6915f4317692a2591ef8c96ef74c50ea42a6fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1842 zcmV-22hI42P)cS z;&&eArFvNZrNTx8&q9F_J$UfI*49=(Ti!Qre+`?5s;4?sCM5$wU@&NWeB92?PCr{_ zqSMw;@*%0($^*qB(m{j=BkJz%wlJixH1->VNhVX(7ay~-B2 zwY9a(GT)!}^m4J`HFtBgo^6lOPqq0lIW5kK*IX*LY$!P<2pCjXSI06L85v;~s4wmT(7E?RPes7OO8NtDdii%h! z{r&wcFwPX`%IgXXZ}X*q-+qpER$22FIHr~_b;lDwf`dJJ^oV6rQBlDKW2FljYF*Q} zuB~mj-;tGGvh)cLcIworcO0EOdD0*l(vP{`7Dg*JM7cIVHY>t|VRWsouCmI%e*Idh zR2l<@^wR~y8$amlC$;nCVvknA?)Lj*7ErAt}3cqzHk8tJyGgWB7u&^*VIVczs_7Ju*_MGuU zwwED8;lV&fI-zM`NMlW!qYBCX+*niOi_DJC>RB!U=)mkQ7{Td!6+C7qhOx{7+&2x`M1bJkHQ7-=P<+qZ9bb#)m8tFEs8Cr&CldT(zJA$|b6b?esR;v&LPnGVa!%2;6B zSVvwk6f+wb8ew8$;y_^NY&$zUa6-VYUcHJVLh_YFB7uJ|FE0WH!O7Cn(wjGL9zTAZ zkdS~f5fKr+y}e8@IJ|c48jeoa*4A*BRVo!STU%Sx)6?_v@?dBR7(Dj%^${>c0|zoR zH8sTxM#4UDT1&w25ik15SI3VZ2Z>B3BVcF&yfeo^A&G(^@jP*Haq!FpD<~+y4i+(K z@Y&JPar5R)WDX1rAm{>tyZ-+E#)6^eU}U3WoD8k3te{E)_UzfSCk$cu?Sp|ICJhm=f7Nx`5cU}&*}bw&JQ zJiOpydV2co*|VtCU{}QX7)+oSFJ82?v>^PM35NTM4hd}dw70iswpd9?3A#GM%+OrO zDt^>vfLNLS>@_%TMr1Vd|}HzJ60aBvVG_rWmVq8E^8TZKZQ3k=w3 zG4~I0c6R<$z#ugK)2B}{N||6-QF?lMkh2elHspfgFU$WY1cok+^$k-66AaxF{i?aS z`Ocj?=xnIEsi}zzhH;Bx=&@M1F>~Nw9!vq#Xf&vpn~!h++*H;U0W&XIQq^iT*TmJ; z)!W;fH!c;CFJv;ra)+HtKtKRKVlhB1fF~OoM@Pr~TZ~(PVwlY0 - - - - PHPMailer Examples - - -

PHPMailer code examplesPHPMailer logo

-

This folder contains a collection of examples of using PHPMailer.

-

About testing email sending

-

When working on email sending code you'll find yourself worrying about what might happen if all these test emails got sent to your mailing list. The solution is to use a fake mail server, one that acts just like the real thing, but just doesn't actually send anything out. Some offer web interfaces, feedback, logging, the ability to return specific error codes, all things that are useful for testing error handling, authentication etc. Here's a selection of mail testing tools you might like to try:

-
    -
  • FakeSMTP, a Java desktop app with the ability to show an SMTP log and save messages to a folder.
  • -
  • FakeEmail, a Python-based fake mail server with a web interface.
  • -
  • smtp-sink, part of the Postfix mail server, so you probably already have this installed. This is used in the Travis-CI configuration to run PHPMailer's unit tests.
  • -
  • smtp4dev, a dummy SMTP server for Windows.
  • -
  • fakesendmail.sh, part of PHPMailer's test setup, this is a shell script that emulates sendmail for testing 'mail' or 'sendmail' methods in PHPMailer.
  • -
  • msglint, not a mail server, the IETF's MIME structure analyser checks the formatting of your messages.
  • -
-
-

Security note

-

Before running these examples you'll need to rename them with '.php' extensions. They are supplied as '.phps' files which will usually be displayed with syntax highlighting by PHP instead of running them. This prevents potential security issues with running potential spam-gateway code if you happen to deploy these code examples on a live site - please don't do that! Similarly, don't leave your passwords in these files as they will be visible to the world!

-
-

code_generator.phps

-

This script is a simple code generator - fill in the form and hit submit, and it will use when you entered to email you a message, and will also generate PHP code using your settings that you can copy and paste to use in your own apps. If you need to get going quickly, this is probably the best place to start.

-

mail.phps

-

This script is a basic example which creates an email message from an external HTML file, creates a plain text body, sets various addresses, adds an attachment and sends the message. It uses PHP's built-in mail() function which is the simplest to use, but relies on the presence of a local mail server, something which is not usually available on Windows. If you find yourself in that situation, either install a local mail server, or use a remote one and send using SMTP instead.

-

exceptions.phps

-

The same as the mail example, but shows how to use PHPMailer's optional exceptions for error handling.

-

smtp.phps

-

A simple example sending using SMTP with authentication.

-

smtp_no_auth.phps

-

A simple example sending using SMTP without authentication.

-

sendmail.phps

-

A simple example using sendmail. Sendmail is a program (usually found on Linux/BSD, OS X and other UNIX-alikes) that can be used to submit messages to a local mail server without a lengthy SMTP conversation. It's probably the fastest sending mechanism, but lacks some error reporting features. There are sendmail emulators for most popular mail servers including postfix, qmail, exim etc.

-

gmail.phps

-

Submitting email via Google's Gmail service is a popular use of PHPMailer. It's much the same as normal SMTP sending, just with some specific settings, namely using TLS encryption, authentication is enabled, and it connects to the SMTP submission port 587 on the smtp.gmail.com host. This example does all that.

-

pop_before_smtp.phps

-

Before effective SMTP authentication mechanisms were available, it was common for ISPs to use POP-before-SMTP authentication. As it implies, you authenticate using the POP3 protocol (an older protocol now mostly replaced by the far superior IMAP), and then the SMTP server will allow send access from your IP address for a short while, usually 5-15 minutes. PHPMailer includes a POP3 protocol client, so it can carry out this sequence - it's just like a normal SMTP conversation (without authentication), but connects via POP first.

-

mailing_list.phps

-

This is a somewhat naïve example of sending similar emails to a list of different addresses. It sets up a PHPMailer instance using SMTP, then connects to a MySQL database to retrieve a list of recipients. The code loops over this list, sending email to each person using their info and marks them as sent in the database. It makes use of SMTP keepalive which saves reconnecting and re-authenticating between each message.

-
-

smtp_check.phps

-

This is an example showing how to use the SMTP class by itself (without PHPMailer) to check an SMTP connection.

-
-

Most of these examples use the 'example.com' domain. This domain is reserved by IANA for illustrative purposes, as documented in RFC 2606. Don't use made-up domains like 'mydomain.com' or 'somedomain.com' in examples as someone, somewhere, probably owns them!

- - diff --git a/vendor/phpmailer/phpmailer/examples/mail.phps b/vendor/phpmailer/phpmailer/examples/mail.phps deleted file mode 100644 index 8e129f4..0000000 --- a/vendor/phpmailer/phpmailer/examples/mail.phps +++ /dev/null @@ -1,31 +0,0 @@ -setFrom('from@example.com', 'First Last'); -//Set an alternative reply-to address -$mail->addReplyTo('replyto@example.com', 'First Last'); -//Set who the message is to be sent to -$mail->addAddress('whoto@example.com', 'John Doe'); -//Set the subject line -$mail->Subject = 'PHPMailer mail() test'; -//Read an HTML message body from an external file, convert referenced images to embedded, -//convert HTML into a basic plain-text alternative body -$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); -//Replace the plain text body with one created manually -$mail->AltBody = 'This is a plain-text message body'; -//Attach an image file -$mail->addAttachment('images/phpmailer_mini.png'); - -//send the message, check for errors -if (!$mail->send()) { - echo "Mailer Error: " . $mail->ErrorInfo; -} else { - echo "Message sent!"; -} diff --git a/vendor/phpmailer/phpmailer/examples/mailing_list.phps b/vendor/phpmailer/phpmailer/examples/mailing_list.phps deleted file mode 100644 index 8644bb5..0000000 --- a/vendor/phpmailer/phpmailer/examples/mailing_list.phps +++ /dev/null @@ -1,59 +0,0 @@ -isSMTP(); -$mail->Host = 'smtp.example.com'; -$mail->SMTPAuth = true; -$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead -$mail->Port = 25; -$mail->Username = 'yourname@example.com'; -$mail->Password = 'yourpassword'; -$mail->setFrom('list@example.com', 'List manager'); -$mail->addReplyTo('list@example.com', 'List manager'); - -$mail->Subject = "PHPMailer Simple database mailing list test"; - -//Same body for all messages, so set this before the sending loop -//If you generate a different body for each recipient (e.g. you're using a templating system), -//set it inside the loop -$mail->msgHTML($body); -//msgHTML also sets AltBody, but if you want a custom one, set it afterwards -$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; - -//Connect to the database and select the recipients from your mailing list that have not yet been sent to -//You'll need to alter this to match your database -$mysql = mysqli_connect('localhost', 'username', 'password'); -mysqli_select_db($mysql, 'mydb'); -$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false'); - -foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ - $mail->addAddress($row['email'], $row['full_name']); - if (!empty($row['photo'])) { - $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB - } - - if (!$mail->send()) { - echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '
'; - break; //Abandon sending - } else { - echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')
'; - //Mark it as sent in the DB - mysqli_query( - $mysql, - "UPDATE mailinglist SET sent = true WHERE email = '" . - mysqli_real_escape_string($mysql, $row['email']) . "'" - ); - } - // Clear all addresses and attachments for next loop - $mail->clearAddresses(); - $mail->clearAttachments(); -} diff --git a/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps b/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps deleted file mode 100644 index 164dfe8..0000000 --- a/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps +++ /dev/null @@ -1,54 +0,0 @@ -isSMTP(); - //Enable SMTP debugging - // 0 = off (for production use) - // 1 = client messages - // 2 = client and server messages - $mail->SMTPDebug = 2; - //Ask for HTML-friendly debug output - $mail->Debugoutput = 'html'; - //Set the hostname of the mail server - $mail->Host = "mail.example.com"; - //Set the SMTP port number - likely to be 25, 465 or 587 - $mail->Port = 25; - //Whether to use SMTP authentication - $mail->SMTPAuth = false; - //Set who the message is to be sent from - $mail->setFrom('from@example.com', 'First Last'); - //Set an alternative reply-to address - $mail->addReplyTo('replyto@example.com', 'First Last'); - //Set who the message is to be sent to - $mail->addAddress('whoto@example.com', 'John Doe'); - //Set the subject line - $mail->Subject = 'PHPMailer POP-before-SMTP test'; - //Read an HTML message body from an external file, convert referenced images to embedded, - //and convert the HTML into a basic plain-text alternative body - $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); - //Replace the plain text body with one created manually - $mail->AltBody = 'This is a plain-text message body'; - //Attach an image file - $mail->addAttachment('images/phpmailer_mini.png'); - //send the message - //Note that we don't need check the response from this because it will throw an exception if it has trouble - $mail->send(); - echo "Message sent!"; -} catch (phpmailerException $e) { - echo $e->errorMessage(); //Pretty error messages from PHPMailer -} catch (Exception $e) { - echo $e->getMessage(); //Boring error messages from anything else! -} diff --git a/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js b/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js deleted file mode 100644 index feb6679..0000000 --- a/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js +++ /dev/null @@ -1,664 +0,0 @@ -// XRegExp 1.5.1 -// (c) 2007-2012 Steven Levithan -// MIT License -// -// Provides an augmented, extensible, cross-browser implementation of regular expressions, -// including support for additional syntax, flags, and methods - -var XRegExp; - -if (XRegExp) { - // Avoid running twice, since that would break references to native globals - throw Error("can't load XRegExp twice in the same frame"); -} - -// Run within an anonymous function to protect variables and avoid new globals -(function (undefined) { - - //--------------------------------- - // Constructor - //--------------------------------- - - // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native - // regular expression in that additional syntax and flags are supported and cross-browser - // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and - // converts to type XRegExp - XRegExp = function (pattern, flags) { - var output = [], - currScope = XRegExp.OUTSIDE_CLASS, - pos = 0, - context, tokenResult, match, chr, regex; - - if (XRegExp.isRegExp(pattern)) { - if (flags !== undefined) - throw TypeError("can't supply flags when constructing one RegExp from another"); - return clone(pattern); - } - // Tokens become part of the regex construction process, so protect against infinite - // recursion when an XRegExp is constructed within a token handler or trigger - if (isInsideConstructor) - throw Error("can't call the XRegExp constructor within token definition functions"); - - flags = flags || ""; - context = { // `this` object for custom tokens - hasNamedCapture: false, - captureNames: [], - hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, - setFlag: function (flag) {flags += flag;} - }; - - while (pos < pattern.length) { - // Check for custom tokens at the current position - tokenResult = runTokens(pattern, pos, currScope, context); - - if (tokenResult) { - output.push(tokenResult.output); - pos += (tokenResult.match[0].length || 1); - } else { - // Check for native multicharacter metasequences (excluding character classes) at - // the current position - if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { - output.push(match[0]); - pos += match[0].length; - } else { - chr = pattern.charAt(pos); - if (chr === "[") - currScope = XRegExp.INSIDE_CLASS; - else if (chr === "]") - currScope = XRegExp.OUTSIDE_CLASS; - // Advance position one character - output.push(chr); - pos++; - } - } - } - - regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); - regex._xregexp = { - source: pattern, - captureNames: context.hasNamedCapture ? context.captureNames : null - }; - return regex; - }; - - - //--------------------------------- - // Public properties - //--------------------------------- - - XRegExp.version = "1.5.1"; - - // Token scope bitflags - XRegExp.INSIDE_CLASS = 1; - XRegExp.OUTSIDE_CLASS = 2; - - - //--------------------------------- - // Private variables - //--------------------------------- - - var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, - flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags - quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, - isInsideConstructor = false, - tokens = [], - // Copy native globals for reference ("native" is an ES3 reserved keyword) - nativ = { - exec: RegExp.prototype.exec, - test: RegExp.prototype.test, - match: String.prototype.match, - replace: String.prototype.replace, - split: String.prototype.split - }, - compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups - compliantLastIndexIncrement = function () { - var x = /^/g; - nativ.test.call(x, ""); - return !x.lastIndex; - }(), - hasNativeY = RegExp.prototype.sticky !== undefined, - nativeTokens = {}; - - // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, - // excluding character classes) - nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; - nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; - - - //--------------------------------- - // Public methods - //--------------------------------- - - // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by - // the XRegExp library and can be used to create XRegExp plugins. This function is intended for - // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can - // be disabled by `XRegExp.freezeTokens` - XRegExp.addToken = function (regex, handler, scope, trigger) { - tokens.push({ - pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), - handler: handler, - scope: scope || XRegExp.OUTSIDE_CLASS, - trigger: trigger || null - }); - }; - - // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag - // combination has previously been cached, the cached copy is returned; otherwise the newly - // created regex is cached - XRegExp.cache = function (pattern, flags) { - var key = pattern + "/" + (flags || ""); - return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); - }; - - // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh - // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` - // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve - // special properties required for named capture - XRegExp.copyAsGlobal = function (regex) { - return clone(regex, "g"); - }; - - // Accepts a string; returns the string with regex metacharacters escaped. The returned string - // can safely be used at any point within a regex to match the provided literal string. Escaped - // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace - XRegExp.escape = function (str) { - return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - }; - - // Accepts a string to search, regex to search with, position to start the search within the - // string (default: 0), and an optional Boolean indicating whether matches must start at-or- - // after the position or at the specified position only. This function ignores the `lastIndex` - // of the provided regex in its own handling, but updates the property for compatibility - XRegExp.execAt = function (str, regex, pos, anchored) { - var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), - match; - r2.lastIndex = pos = pos || 0; - match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) - if (anchored && match && match.index !== pos) - match = null; - if (regex.global) - regex.lastIndex = match ? r2.lastIndex : 0; - return match; - }; - - // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing - // syntax and flag changes. Should be run after XRegExp and any plugins are loaded - XRegExp.freezeTokens = function () { - XRegExp.addToken = function () { - throw Error("can't run addToken after freezeTokens"); - }; - }; - - // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. - // Note that this is also `true` for regex literals and regexes created by the `XRegExp` - // constructor. This works correctly for variables created in another frame, when `instanceof` - // and `constructor` checks would fail to work as intended - XRegExp.isRegExp = function (o) { - return Object.prototype.toString.call(o) === "[object RegExp]"; - }; - - // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to - // iterate over regex matches compared to the traditional approaches of subverting - // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop - XRegExp.iterate = function (str, regex, callback, context) { - var r2 = clone(regex, "g"), - i = -1, match; - while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) - if (regex.global) - regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` - callback.call(context, match, ++i, str, regex); - if (r2.lastIndex === match.index) - r2.lastIndex++; - } - if (regex.global) - regex.lastIndex = 0; - }; - - // Accepts a string and an array of regexes; returns the result of using each successive regex - // to search within the matches of the previous regex. The array of regexes can also contain - // objects with `regex` and `backref` properties, in which case the named or numbered back- - // references specified are passed forward to the next regex or returned. E.g.: - // var xregexpImgFileNames = XRegExp.matchChain(html, [ - // {regex: /]+)>/i, backref: 1}, // tag attributes - // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values - // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths - // /[^\/]+$/ // filenames (strip directory paths) - // ]); - XRegExp.matchChain = function (str, chain) { - return function recurseChain (values, level) { - var item = chain[level].regex ? chain[level] : {regex: chain[level]}, - regex = clone(item.regex, "g"), - matches = [], i; - for (i = 0; i < values.length; i++) { - XRegExp.iterate(values[i], regex, function (match) { - matches.push(item.backref ? (match[item.backref] || "") : match[0]); - }); - } - return ((level === chain.length - 1) || !matches.length) ? - matches : recurseChain(matches, level + 1); - }([str], 0); - }; - - - //--------------------------------- - // New RegExp prototype methods - //--------------------------------- - - // Accepts a context object and arguments array; returns the result of calling `exec` with the - // first value in the arguments array. the context is ignored but is accepted for congruity - // with `Function.prototype.apply` - RegExp.prototype.apply = function (context, args) { - return this.exec(args[0]); - }; - - // Accepts a context object and string; returns the result of calling `exec` with the provided - // string. the context is ignored but is accepted for congruity with `Function.prototype.call` - RegExp.prototype.call = function (context, str) { - return this.exec(str); - }; - - - //--------------------------------- - // Overridden native methods - //--------------------------------- - - // Adds named capture support (with backreferences returned as `result.name`), and fixes two - // cross-browser issues per ES3: - // - Captured values for nonparticipating capturing groups should be returned as `undefined`, - // rather than the empty string. - // - `lastIndex` should not be incremented after zero-length matches. - RegExp.prototype.exec = function (str) { - var match, name, r2, origLastIndex; - if (!this.global) - origLastIndex = this.lastIndex; - match = nativ.exec.apply(this, arguments); - if (match) { - // Fix browsers whose `exec` methods don't consistently return `undefined` for - // nonparticipating capturing groups - if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { - r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); - // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed - // matching due to characters outside the match - nativ.replace.call((str + "").slice(match.index), r2, function () { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) - match[i] = undefined; - } - }); - } - // Attach named capture properties - if (this._xregexp && this._xregexp.captureNames) { - for (var i = 1; i < match.length; i++) { - name = this._xregexp.captureNames[i - 1]; - if (name) - match[name] = match[i]; - } - } - // Fix browsers that increment `lastIndex` after zero-length matches - if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) - this.lastIndex--; - } - if (!this.global) - this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) - return match; - }; - - // Fix browser bugs in native method - RegExp.prototype.test = function (str) { - // Use the native `exec` to skip some processing overhead, even though the altered - // `exec` would take care of the `lastIndex` fixes - var match, origLastIndex; - if (!this.global) - origLastIndex = this.lastIndex; - match = nativ.exec.call(this, str); - // Fix browsers that increment `lastIndex` after zero-length matches - if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) - this.lastIndex--; - if (!this.global) - this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) - return !!match; - }; - - // Adds named capture support and fixes browser bugs in native method - String.prototype.match = function (regex) { - if (!XRegExp.isRegExp(regex)) - regex = RegExp(regex); // Native `RegExp` - if (regex.global) { - var result = nativ.match.apply(this, arguments); - regex.lastIndex = 0; // Fix IE bug - return result; - } - return regex.exec(this); // Run the altered `exec` - }; - - // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, - // and provides named backreferences to replacement functions as `arguments[0].name`. Also - // fixes cross-browser differences in replacement text syntax when performing a replacement - // using a nonregex search value, and the value of replacement regexes' `lastIndex` property - // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary - // third (`flags`) parameter - String.prototype.replace = function (search, replacement) { - var isRegex = XRegExp.isRegExp(search), - captureNames, result, str, origLastIndex; - - // There are too many combinations of search/replacement types/values and browser bugs that - // preclude passing to native `replace`, so don't try - //if (...) - // return nativ.replace.apply(this, arguments); - - if (isRegex) { - if (search._xregexp) - captureNames = search._xregexp.captureNames; // Array or `null` - if (!search.global) - origLastIndex = search.lastIndex; - } else { - search = search + ""; // Type conversion - } - - if (Object.prototype.toString.call(replacement) === "[object Function]") { - result = nativ.replace.call(this + "", search, function () { - if (captureNames) { - // Change the `arguments[0]` string primitive to a String object which can store properties - arguments[0] = new String(arguments[0]); - // Store named backreferences on `arguments[0]` - for (var i = 0; i < captureNames.length; i++) { - if (captureNames[i]) - arguments[0][captureNames[i]] = arguments[i + 1]; - } - } - // Update `lastIndex` before calling `replacement` (fix browsers) - if (isRegex && search.global) - search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; - return replacement.apply(null, arguments); - }); - } else { - str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) - result = nativ.replace.call(str, search, function () { - var args = arguments; // Keep this function's `arguments` available through closure - return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { - // Numbered backreference (without delimiters) or special variable - if ($1) { - switch ($1) { - case "$": return "$"; - case "&": return args[0]; - case "`": return args[args.length - 1].slice(0, args[args.length - 2]); - case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); - // Numbered backreference - default: - // What does "$10" mean? - // - Backreference 10, if 10 or more capturing groups exist - // - Backreference 1 followed by "0", if 1-9 capturing groups exist - // - Otherwise, it's the string "$10" - // Also note: - // - Backreferences cannot be more than two digits (enforced by `replacementToken`) - // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" - // - There is no "$0" token ("$&" is the entire match) - var literalNumbers = ""; - $1 = +$1; // Type conversion; drop leading zero - if (!$1) // `$1` was "0" or "00" - return $0; - while ($1 > args.length - 3) { - literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; - $1 = Math.floor($1 / 10); // Drop the last digit - } - return ($1 ? args[$1] || "" : "$") + literalNumbers; - } - // Named backreference or delimited numbered backreference - } else { - // What does "${n}" mean? - // - Backreference to numbered capture n. Two differences from "$n": - // - n can be more than two digits - // - Backreference 0 is allowed, and is the entire match - // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture - // - Otherwise, it's the string "${n}" - var n = +$2; // Type conversion; drop leading zeros - if (n <= args.length - 3) - return args[n]; - n = captureNames ? indexOf(captureNames, $2) : -1; - return n > -1 ? args[n + 1] : $0; - } - }); - }); - } - - if (isRegex) { - if (search.global) - search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) - else - search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) - } - - return result; - }; - - // A consistent cross-browser, ES3 compliant `split` - String.prototype.split = function (s /* separator */, limit) { - // If separator `s` is not a regex, use the native `split` - if (!XRegExp.isRegExp(s)) - return nativ.split.apply(this, arguments); - - var str = this + "", // Type conversion - output = [], - lastLastIndex = 0, - match, lastLength; - - // Behavior for `limit`: if it's... - // - `undefined`: No limit - // - `NaN` or zero: Return an empty array - // - A positive number: Use `Math.floor(limit)` - // - A negative number: No limit - // - Other: Type-convert, then use the above rules - if (limit === undefined || +limit < 0) { - limit = Infinity; - } else { - limit = Math.floor(+limit); - if (!limit) - return []; - } - - // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero - // and restore it to its original value when we're done using the regex - s = XRegExp.copyAsGlobal(s); - - while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) - if (s.lastIndex > lastLastIndex) { - output.push(str.slice(lastLastIndex, match.index)); - - if (match.length > 1 && match.index < str.length) - Array.prototype.push.apply(output, match.slice(1)); - - lastLength = match[0].length; - lastLastIndex = s.lastIndex; - - if (output.length >= limit) - break; - } - - if (s.lastIndex === match.index) - s.lastIndex++; - } - - if (lastLastIndex === str.length) { - if (!nativ.test.call(s, "") || lastLength) - output.push(""); - } else { - output.push(str.slice(lastLastIndex)); - } - - return output.length > limit ? output.slice(0, limit) : output; - }; - - - //--------------------------------- - // Private helper functions - //--------------------------------- - - // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` - // instance with a fresh `lastIndex` (set to zero), preserving properties required for named - // capture. Also allows adding new flags in the process of copying the regex - function clone (regex, additionalFlags) { - if (!XRegExp.isRegExp(regex)) - throw TypeError("type RegExp expected"); - var x = regex._xregexp; - regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); - if (x) { - regex._xregexp = { - source: x.source, - captureNames: x.captureNames ? x.captureNames.slice(0) : null - }; - } - return regex; - } - - function getNativeFlags (regex) { - return (regex.global ? "g" : "") + - (regex.ignoreCase ? "i" : "") + - (regex.multiline ? "m" : "") + - (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 - (regex.sticky ? "y" : ""); - } - - function runTokens (pattern, index, scope, context) { - var i = tokens.length, - result, match, t; - // Protect against constructing XRegExps within token handler and trigger functions - isInsideConstructor = true; - // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws - try { - while (i--) { // Run in reverse order - t = tokens[i]; - if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { - t.pattern.lastIndex = index; - match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. - if (match && match.index === index) { - result = { - output: t.handler.call(context, match, scope), - match: match - }; - break; - } - } - } - } catch (err) { - throw err; - } finally { - isInsideConstructor = false; - } - return result; - } - - function indexOf (array, item, from) { - if (Array.prototype.indexOf) // Use the native array method if available - return array.indexOf(item, from); - for (var i = from || 0; i < array.length; i++) { - if (array[i] === item) - return i; - } - return -1; - } - - - //--------------------------------- - // Built-in tokens - //--------------------------------- - - // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the - // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` - - // Comment pattern: (?# ) - XRegExp.addToken( - /\(\?#[^)]*\)/, - function (match) { - // Keep tokens separated unless the following token is a quantifier - return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; - } - ); - - // Capturing group (match the opening parenthesis only). - // Required for support of named capturing groups - XRegExp.addToken( - /\((?!\?)/, - function () { - this.captureNames.push(null); - return "("; - } - ); - - // Named capturing group (match the opening delimiter only): (? - XRegExp.addToken( - /\(\?<([$\w]+)>/, - function (match) { - this.captureNames.push(match[1]); - this.hasNamedCapture = true; - return "("; - } - ); - - // Named backreference: \k - XRegExp.addToken( - /\\k<([\w$]+)>/, - function (match) { - var index = indexOf(this.captureNames, match[1]); - // Keep backreferences separate from subsequent literal numbers. Preserve back- - // references to named groups that are undefined at this point as literal strings - return index > -1 ? - "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : - match[0]; - } - ); - - // Empty character class: [] or [^] - XRegExp.addToken( - /\[\^?]/, - function (match) { - // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. - // (?!) should work like \b\B, but is unreliable in Firefox - return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; - } - ); - - // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) - // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. - XRegExp.addToken( - /^\(\?([imsx]+)\)/, - function (match) { - this.setFlag(match[1]); - return ""; - } - ); - - // Whitespace and comments, in free-spacing (aka extended) mode only - XRegExp.addToken( - /(?:\s+|#.*)+/, - function (match) { - // Keep tokens separated unless the following token is a quantifier - return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; - }, - XRegExp.OUTSIDE_CLASS, - function () {return this.hasFlag("x");} - ); - - // Dot, in dotall (aka singleline) mode only - XRegExp.addToken( - /\./, - function () {return "[\\s\\S]";}, - XRegExp.OUTSIDE_CLASS, - function () {return this.hasFlag("s");} - ); - - - //--------------------------------- - // Backward compatibility - //--------------------------------- - - // Uncomment the following block for compatibility with XRegExp 1.0-1.2: - /* - XRegExp.matchWithinChain = XRegExp.matchChain; - RegExp.prototype.addFlags = function (s) {return clone(this, s);}; - RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; - RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; - RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; - */ - -})(); - diff --git a/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js b/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js deleted file mode 100644 index 9f5942e..0000000 --- a/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js +++ /dev/null @@ -1,122 +0,0 @@ -(function() { - -var sh = SyntaxHighlighter; - -/** - * Provides functionality to dynamically load only the brushes that a needed to render the current page. - * - * There are two syntaxes that autoload understands. For example: - * - * SyntaxHighlighter.autoloader( - * [ 'applescript', 'Scripts/shBrushAppleScript.js' ], - * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ] - * ); - * - * or a more easily comprehendable one: - * - * SyntaxHighlighter.autoloader( - * 'applescript Scripts/shBrushAppleScript.js', - * 'actionscript3 as3 Scripts/shBrushAS3.js' - * ); - */ -sh.autoloader = function() -{ - var list = arguments, - elements = sh.findElements(), - brushes = {}, - scripts = {}, - all = SyntaxHighlighter.all, - allCalled = false, - allParams = null, - i - ; - - SyntaxHighlighter.all = function(params) - { - allParams = params; - allCalled = true; - }; - - function addBrush(aliases, url) - { - for (var i = 0; i < aliases.length; i++) - brushes[aliases[i]] = url; - }; - - function getAliases(item) - { - return item.pop - ? item - : item.split(/\s+/) - ; - } - - // create table of aliases and script urls - for (i = 0; i < list.length; i++) - { - var aliases = getAliases(list[i]), - url = aliases.pop() - ; - - addBrush(aliases, url); - } - - // dynamically add + + + + + + + +"; + echo exit("ERROR: Wrong PHP version. Must be PHP 5 or above."); +} + +if (count($results_messages) > 0) { + echo '

Run results

'; + echo '
    '; + foreach ($results_messages as $result) { + echo "
  • $result
  • "; + } + echo '
'; +} + +if (isset($_POST["submit"]) && $_POST["submit"] == "Submit") { + echo "
\n"; + echo "
Script:\n"; + echo "
\n";
+    echo htmlentities($example_code);
+    echo "\n
\n"; + echo "\n
\n"; +} +?> +
+
+
+
+ Mail Details + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
Test will include two attachments.
+
+
+
+
+ Mail Test Specs + + + + + +
Test Type +
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+
"> + SMTP Specific Options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + value="true"> +
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+
+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contactform.phps b/vendor/phpmailer/phpmailer/examples/contactform.phps new file mode 100644 index 0000000..d85e204 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contactform.phps @@ -0,0 +1,71 @@ +isSMTP(); + $mail->Host = 'localhost'; + $mail->Port = 25; + + //Use a fixed address in your own domain as the from address + //**DO NOT** use the submitter's address here as it will be forgery + //and will cause your messages to fail SPF checks + $mail->setFrom('from@example.com', 'First Last'); + //Send the message to yourself, or whoever should receive contact for submissions + $mail->addAddress('whoto@example.com', 'John Doe'); + //Put the submitter's address in a reply-to header + //This will fail if the address provided is invalid, + //in which case we should ignore the whole request + if ($mail->addReplyTo($_POST['email'], $_POST['name'])) { + $mail->Subject = 'PHPMailer contact form'; + //Keep it simple - don't use HTML + $mail->isHTML(false); + //Build a simple message body + $mail->Body = <<send()) { + //The reason for failing to send will be in $mail->ErrorInfo + //but you shouldn't display errors to users - process the error, log it on your server. + $msg = 'Sorry, something went wrong. Please try again later.'; + } else { + $msg = 'Message sent! Thanks for contacting us.'; + } + } else { + $msg = 'Invalid email address, message ignored.'; + } +} +?> + + + + + Contact form + + +

Contact us

+$msg"; +} ?> +
+
+
+
+ +
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contents.html b/vendor/phpmailer/phpmailer/examples/contents.html new file mode 100644 index 0000000..dc3fc66 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contents.html @@ -0,0 +1,17 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

ISO-8859-1 text: ���������

+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/contentsutf8.html b/vendor/phpmailer/phpmailer/examples/contentsutf8.html new file mode 100644 index 0000000..035d10c --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/contentsutf8.html @@ -0,0 +1,21 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

Chinese text: 郵件內容為空

+

Russian text: Пустое тело сообщения

+

Armenian text: Հաղորդագրությունը դատարկ է

+

Czech text: Prázdné tělo zprávy

+

Emoji: 😂 🦄 💥 📤 📧

+
+ + diff --git a/vendor/phpmailer/phpmailer/examples/exceptions.phps b/vendor/phpmailer/phpmailer/examples/exceptions.phps new file mode 100644 index 0000000..0e941e7 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/exceptions.phps @@ -0,0 +1,35 @@ +setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer Exceptions test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/vendor/phpmailer/phpmailer/examples/gmail.phps b/vendor/phpmailer/phpmailer/examples/gmail.phps new file mode 100644 index 0000000..121ca70 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/gmail.phps @@ -0,0 +1,99 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 2; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; +// use +// $mail->Host = gethostbyname('smtp.gmail.com'); +// if your network does not support SMTP over IPv6 + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Username to use for SMTP authentication - use full email address for gmail +$mail->Username = "username@gmail.com"; + +//Password to use for SMTP authentication +$mail->Password = "yourpassword"; + +//Set who the message is to be sent from +$mail->setFrom('from@example.com', 'First Last'); + +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; + //Section 2: IMAP + //Uncomment these to save your message in the 'Sent Mail' folder. + #if (save_mail($mail)) { + # echo "Message saved!"; + #} +} + +//Section 2: IMAP +//IMAP commands requires the PHP IMAP Extension, found at: https://php.net/manual/en/imap.setup.php +//Function to call which uses the PHP imap_*() functions to save messages: https://php.net/manual/en/book.imap.php +//You can use imap_getmailboxes($imapStream, '/imap/ssl') to get a list of available folders or labels, this can +//be useful if you are trying to get this working on a non-Gmail IMAP server. +function save_mail($mail) { + //You can change 'Sent Mail' to any other folder or tag + $path = "{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail"; + + //Tell your server to open an IMAP connection using the same username and password as you used for SMTP + $imapStream = imap_open($path, $mail->Username, $mail->Password); + + $result = imap_append($imapStream, $path, $mail->getSentMIMEMessage()); + imap_close($imapStream); + + return $result; +} diff --git a/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps b/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps new file mode 100644 index 0000000..2aec181 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps @@ -0,0 +1,85 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 0; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Set AuthType +$mail->AuthType = 'XOAUTH2'; + +//User Email to use for SMTP authentication - user who gave consent to our app +$mail->oauthUserEmail = "from@gmail.com"; + +//Obtained From Google Developer Console +$mail->oauthClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com"; + +//Obtained From Google Developer Console +$mail->oauthClientSecret = "RANDOMCHARS-----lGyjPcRtvP"; + +//Obtained By running get_oauth_token.php after setting up APP in Google Developer Console. +//Set Redirect URI in Developer Console as [https/http]:////get_oauth_token.php +// eg: http://localhost/phpmail/get_oauth_token.php +$mail->oauthRefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0"; + +//Set who the message is to be sent from +//For gmail, this generally needs to be the same as the user you logged in as +$mail->setFrom('from@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdd83c8ded93d00b1e05abcfe1d6cb5b2ae96ef GIT binary patch literal 5831 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 RgdfyIhIdW$>U5l={s-zotz7^B literal 0 HcmV?d00001 diff --git a/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png b/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png new file mode 100644 index 0000000000000000000000000000000000000000..e6915f4317692a2591ef8c96ef74c50ea42a6fba GIT binary patch literal 1842 zcmV-22hI42P)cS z;&&eArFvNZrNTx8&q9F_J$UfI*49=(Ti!Qre+`?5s;4?sCM5$wU@&NWeB92?PCr{_ zqSMw;@*%0($^*qB(m{j=BkJz%wlJixH1->VNhVX(7ay~-B2 zwY9a(GT)!}^m4J`HFtBgo^6lOPqq0lIW5kK*IX*LY$!P<2pCjXSI06L85v;~s4wmT(7E?RPes7OO8NtDdii%h! z{r&wcFwPX`%IgXXZ}X*q-+qpER$22FIHr~_b;lDwf`dJJ^oV6rQBlDKW2FljYF*Q} zuB~mj-;tGGvh)cLcIworcO0EOdD0*l(vP{`7Dg*JM7cIVHY>t|VRWsouCmI%e*Idh zR2l<@^wR~y8$amlC$;nCVvknA?)Lj*7ErAt}3cqzHk8tJyGgWB7u&^*VIVczs_7Ju*_MGuU zwwED8;lV&fI-zM`NMlW!qYBCX+*niOi_DJC>RB!U=)mkQ7{Td!6+C7qhOx{7+&2x`M1bJkHQ7-=P<+qZ9bb#)m8tFEs8Cr&CldT(zJA$|b6b?esR;v&LPnGVa!%2;6B zSVvwk6f+wb8ew8$;y_^NY&$zUa6-VYUcHJVLh_YFB7uJ|FE0WH!O7Cn(wjGL9zTAZ zkdS~f5fKr+y}e8@IJ|c48jeoa*4A*BRVo!STU%Sx)6?_v@?dBR7(Dj%^${>c0|zoR zH8sTxM#4UDT1&w25ik15SI3VZ2Z>B3BVcF&yfeo^A&G(^@jP*Haq!FpD<~+y4i+(K z@Y&JPar5R)WDX1rAm{>tyZ-+E#)6^eU}U3WoD8k3te{E)_UzfSCk$cu?Sp|ICJhm=f7Nx`5cU}&*}bw&JQ zJiOpydV2co*|VtCU{}QX7)+oSFJ82?v>^PM35NTM4hd}dw70iswpd9?3A#GM%+OrO zDt^>vfLNLS>@_%TMr1Vd|}HzJ60aBvVG_rWmVq8E^8TZKZQ3k=w3 zG4~I0c6R<$z#ugK)2B}{N||6-QF?lMkh2elHspfgFU$WY1cok+^$k-66AaxF{i?aS z`Ocj?=xnIEsi}zzhH;Bx=&@M1F>~Nw9!vq#Xf&vpn~!h++*H;U0W&XIQq^iT*TmJ; z)!W;fH!c;CFJv;ra)+HtKtKRKVlhB1fF~OoM@Pr~TZ~(PVwlY0 + + + + PHPMailer Examples + + +

PHPMailer code examplesPHPMailer logo

+

This folder contains a collection of examples of using PHPMailer.

+

About testing email sending

+

When working on email sending code you'll find yourself worrying about what might happen if all these test emails got sent to your mailing list. The solution is to use a fake mail server, one that acts just like the real thing, but just doesn't actually send anything out. Some offer web interfaces, feedback, logging, the ability to return specific error codes, all things that are useful for testing error handling, authentication etc. Here's a selection of mail testing tools you might like to try:

+
    +
  • FakeSMTP, a Java desktop app with the ability to show an SMTP log and save messages to a folder.
  • +
  • FakeEmail, a Python-based fake mail server with a web interface.
  • +
  • smtp-sink, part of the Postfix mail server, so you probably already have this installed. This is used in the Travis-CI configuration to run PHPMailer's unit tests.
  • +
  • smtp4dev, a dummy SMTP server for Windows.
  • +
  • fakesendmail.sh, part of PHPMailer's test setup, this is a shell script that emulates sendmail for testing 'mail' or 'sendmail' methods in PHPMailer.
  • +
  • msglint, not a mail server, the IETF's MIME structure analyser checks the formatting of your messages.
  • +
+
+

Security note

+

Before running these examples you'll need to rename them with '.php' extensions. They are supplied as '.phps' files which will usually be displayed with syntax highlighting by PHP instead of running them. This prevents potential security issues with running potential spam-gateway code if you happen to deploy these code examples on a live site - please don't do that! Similarly, don't leave your passwords in these files as they will be visible to the world!

+
+

code_generator.phps

+

This script is a simple code generator - fill in the form and hit submit, and it will use when you entered to email you a message, and will also generate PHP code using your settings that you can copy and paste to use in your own apps. If you need to get going quickly, this is probably the best place to start.

+

mail.phps

+

This script is a basic example which creates an email message from an external HTML file, creates a plain text body, sets various addresses, adds an attachment and sends the message. It uses PHP's built-in mail() function which is the simplest to use, but relies on the presence of a local mail server, something which is not usually available on Windows. If you find yourself in that situation, either install a local mail server, or use a remote one and send using SMTP instead.

+

exceptions.phps

+

The same as the mail example, but shows how to use PHPMailer's optional exceptions for error handling.

+

smtp.phps

+

A simple example sending using SMTP with authentication.

+

smtp_no_auth.phps

+

A simple example sending using SMTP without authentication.

+

sendmail.phps

+

A simple example using sendmail. Sendmail is a program (usually found on Linux/BSD, OS X and other UNIX-alikes) that can be used to submit messages to a local mail server without a lengthy SMTP conversation. It's probably the fastest sending mechanism, but lacks some error reporting features. There are sendmail emulators for most popular mail servers including postfix, qmail, exim etc.

+

gmail.phps

+

Submitting email via Google's Gmail service is a popular use of PHPMailer. It's much the same as normal SMTP sending, just with some specific settings, namely using TLS encryption, authentication is enabled, and it connects to the SMTP submission port 587 on the smtp.gmail.com host. This example does all that.

+

pop_before_smtp.phps

+

Before effective SMTP authentication mechanisms were available, it was common for ISPs to use POP-before-SMTP authentication. As it implies, you authenticate using the POP3 protocol (an older protocol now mostly replaced by the far superior IMAP), and then the SMTP server will allow send access from your IP address for a short while, usually 5-15 minutes. PHPMailer includes a POP3 protocol client, so it can carry out this sequence - it's just like a normal SMTP conversation (without authentication), but connects via POP first.

+

mailing_list.phps

+

This is a somewhat naïve example of sending similar emails to a list of different addresses. It sets up a PHPMailer instance using SMTP, then connects to a MySQL database to retrieve a list of recipients. The code loops over this list, sending email to each person using their info and marks them as sent in the database. It makes use of SMTP keepalive which saves reconnecting and re-authenticating between each message.

+
+

smtp_check.phps

+

This is an example showing how to use the SMTP class by itself (without PHPMailer) to check an SMTP connection.

+
+

Most of these examples use the 'example.com' domain. This domain is reserved by IANA for illustrative purposes, as documented in RFC 2606. Don't use made-up domains like 'mydomain.com' or 'somedomain.com' in examples as someone, somewhere, probably owns them!

+ + diff --git a/vendor/phpmailer/phpmailer/examples/mail.phps b/vendor/phpmailer/phpmailer/examples/mail.phps new file mode 100644 index 0000000..8e129f4 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/mail.phps @@ -0,0 +1,31 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer mail() test'; +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/vendor/phpmailer/phpmailer/examples/mailing_list.phps b/vendor/phpmailer/phpmailer/examples/mailing_list.phps new file mode 100644 index 0000000..8644bb5 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/mailing_list.phps @@ -0,0 +1,59 @@ +isSMTP(); +$mail->Host = 'smtp.example.com'; +$mail->SMTPAuth = true; +$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead +$mail->Port = 25; +$mail->Username = 'yourname@example.com'; +$mail->Password = 'yourpassword'; +$mail->setFrom('list@example.com', 'List manager'); +$mail->addReplyTo('list@example.com', 'List manager'); + +$mail->Subject = "PHPMailer Simple database mailing list test"; + +//Same body for all messages, so set this before the sending loop +//If you generate a different body for each recipient (e.g. you're using a templating system), +//set it inside the loop +$mail->msgHTML($body); +//msgHTML also sets AltBody, but if you want a custom one, set it afterwards +$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; + +//Connect to the database and select the recipients from your mailing list that have not yet been sent to +//You'll need to alter this to match your database +$mysql = mysqli_connect('localhost', 'username', 'password'); +mysqli_select_db($mysql, 'mydb'); +$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false'); + +foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ + $mail->addAddress($row['email'], $row['full_name']); + if (!empty($row['photo'])) { + $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB + } + + if (!$mail->send()) { + echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '
'; + break; //Abandon sending + } else { + echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')
'; + //Mark it as sent in the DB + mysqli_query( + $mysql, + "UPDATE mailinglist SET sent = true WHERE email = '" . + mysqli_real_escape_string($mysql, $row['email']) . "'" + ); + } + // Clear all addresses and attachments for next loop + $mail->clearAddresses(); + $mail->clearAttachments(); +} diff --git a/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps b/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps new file mode 100644 index 0000000..164dfe8 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps @@ -0,0 +1,54 @@ +isSMTP(); + //Enable SMTP debugging + // 0 = off (for production use) + // 1 = client messages + // 2 = client and server messages + $mail->SMTPDebug = 2; + //Ask for HTML-friendly debug output + $mail->Debugoutput = 'html'; + //Set the hostname of the mail server + $mail->Host = "mail.example.com"; + //Set the SMTP port number - likely to be 25, 465 or 587 + $mail->Port = 25; + //Whether to use SMTP authentication + $mail->SMTPAuth = false; + //Set who the message is to be sent from + $mail->setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer POP-before-SMTP test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js b/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js new file mode 100644 index 0000000..feb6679 --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js @@ -0,0 +1,664 @@ +// XRegExp 1.5.1 +// (c) 2007-2012 Steven Levithan +// MIT License +// +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function (undefined) { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.1"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + nativ.test.call(x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // of the provided regex in its own handling, but updates the property for compatibility + XRegExp.execAt = function (str, regex, pos, anchored) { + var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (anchored && match && match.index !== pos) + match = null; + if (regex.global) + regex.lastIndex = match ? r2.lastIndex : 0; + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, regex, callback, context) { + var r2 = clone(regex, "g"), + i = -1, match; + while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (regex.global) + regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` + callback.call(context, match, ++i, str, regex); + if (r2.lastIndex === match.index) + r2.lastIndex++; + } + if (regex.global) + regex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /]+)>/i, backref: 1}, // tag attributes + // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overridden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match, name, r2, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call((str + "").slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return match; + }; + + // Fix browser bugs in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the altered + // `exec` would take care of the `lastIndex` fixes + var match, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return !!match; + }; + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str, origLastIndex; + + // There are too many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so don't try + //if (...) + // return nativ.replace.apply(this, arguments); + + if (isRegex) { + if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + if (!search.global) + origLastIndex = search.lastIndex; + } else { + search = search + ""; // Type conversion + } + + if (Object.prototype.toString.call(replacement) === "[object Function]") { + result = nativ.replace.call(this + "", search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` (fix browsers) + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex) { + if (search.global) + search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) + else + search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + } + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return nativ.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!nativ.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (? + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); + diff --git a/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js b/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js new file mode 100644 index 0000000..9f5942e --- /dev/null +++ b/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js @@ -0,0 +1,122 @@ +(function() { + +var sh = SyntaxHighlighter; + +/** + * Provides functionality to dynamically load only the brushes that a needed to render the current page. + * + * There are two syntaxes that autoload understands. For example: + * + * SyntaxHighlighter.autoloader( + * [ 'applescript', 'Scripts/shBrushAppleScript.js' ], + * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ] + * ); + * + * or a more easily comprehendable one: + * + * SyntaxHighlighter.autoloader( + * 'applescript Scripts/shBrushAppleScript.js', + * 'actionscript3 as3 Scripts/shBrushAS3.js' + * ); + */ +sh.autoloader = function() +{ + var list = arguments, + elements = sh.findElements(), + brushes = {}, + scripts = {}, + all = SyntaxHighlighter.all, + allCalled = false, + allParams = null, + i + ; + + SyntaxHighlighter.all = function(params) + { + allParams = params; + allCalled = true; + }; + + function addBrush(aliases, url) + { + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = url; + }; + + function getAliases(item) + { + return item.pop + ? item + : item.split(/\s+/) + ; + } + + // create table of aliases and script urls + for (i = 0; i < list.length; i++) + { + var aliases = getAliases(list[i]), + url = aliases.pop() + ; + + addBrush(aliases, url); + } + + // dynamically add