3.4.0
This commit is contained in:
25
kirby/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php
vendored
Executable file
25
kirby/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php
vendored
Executable file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* Afrikaans PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: kon nie geverifieer word nie.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon nie aan SMTP-verbind nie.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data nie aanvaar nie.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Boodskapliggaam leeg.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Onbekende kodering: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Kon nie uitvoer nie: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Kon nie lêer oopmaak nie: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Lêerfout: Kon nie lêer oopmaak nie: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Die volgende Van adres misluk: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Kon nie posfunksie instansieer nie.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Ongeldige adres: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer word nie ondersteun nie.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'U moet ten minste een ontvanger e-pos adres verskaf.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: Die volgende ontvangers het misluk: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Ondertekening Fout: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP-verbinding () misluk.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP-bediener fout: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Kan nie veranderlike instel of herstel nie: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Uitbreiding ontbreek: ';
|
@@ -2,25 +2,27 @@
|
||||
/**
|
||||
* Danish PHPMailer language file: refer to English translation for definitive list
|
||||
* @package PHPMailer
|
||||
* @author Mikael Stokkebro <info@stokkebro.dk>
|
||||
* @author John Sebastian <jms@iwb.dk>
|
||||
* Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
|
||||
*
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Kunne ikke logge på.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data kunne ikke accepteres.';
|
||||
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
|
||||
$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Kunne ikke køre: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Ingen adgang til fil: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Kunne ikke initialisere email funktionen.';
|
||||
//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Du skal indtaste mindst en modtagers emailadresse.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: ';
|
||||
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
|
||||
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
|
||||
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
|
||||
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
|
||||
//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Signeringsfejl: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';
|
||||
|
@@ -24,4 +24,4 @@ $PHPMAILER_LANG['signing'] = 'خطا در امضا: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'خطا در اتصال به SMTP.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'خطا در SMTP Server: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'امکان ارسال یا ارسال مجدد متغیرها وجود ندارد: ';
|
||||
//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'افزونه موجود نیست: ';
|
||||
|
@@ -16,6 +16,8 @@ $PHPMAILER_LANG['file_open'] = 'Bestandsfout: kon bestand niet openen
|
||||
$PHPMAILER_LANG['from_failed'] = 'Het volgende afzendersadres is mislukt: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Kon mailfunctie niet initialiseren.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Ongeldig adres: ';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Ongeldige hostentry: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Ongeldige host: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Er moet minstens één ontvanger worden opgegeven.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';
|
||||
|
@@ -26,4 +26,4 @@ $PHPMAILER_LANG['signing'] = 'Erro de Assinatura: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Extensão ausente: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: ';
|
||||
|
@@ -7,21 +7,21 @@
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к серверу SMTP.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Неизвестный вид кодировки: ';
|
||||
$PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удается открыть файл: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один адрес e-mail получателя.';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: отправка по следующим адресам получателей не удалась: ';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: ';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не отослано, неправильный формат email адреса: ';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Ошибка подписи: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Невозможно установить или переустановить переменную: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: ';
|
||||
|
@@ -7,21 +7,21 @@
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'Помилка SMTP: помилка авторизації.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Помилка SMTP: не вдається під\'єднатися до серверу SMTP.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Помилка SMTP: дані не прийняті.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Невідомий тип кодування: ';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Помилка SMTP: не вдається під\'єднатися до SMTP-серверу.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Помилка SMTP: дані не прийнято.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Невідоме кодування: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Неможливо виконати команду: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Немає доступу до файлу: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Помилка файлової системи: не вдається відкрити файл: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Невірна адреса відправника: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Будь-ласка, введіть хоча б одну адресу e-mail отримувача.';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail().';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Будь-ласка, введіть хоча б одну email-адресу отримувача.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: відправлення наступним отримувачам не вдалося: ';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Пусте тіло повідомлення';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не відправлено, невірний формат адреси e-mail: ';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: ';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Пусте повідомлення';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через невірний формат email-адреси: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Помилка підпису: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання із SMTP-сервером';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання з SMTP-сервером';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Помилка SMTP-сервера: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Неможливо встановити або перевстановити змінну: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Не знайдено розширення: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Неможливо встановити або скинути змінну: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Розширення відсутнє: ';
|
||||
|
@@ -23,7 +23,7 @@ namespace PHPMailer\PHPMailer;
|
||||
/**
|
||||
* PHPMailer exception handler.
|
||||
*
|
||||
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
|
||||
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
|
||||
*/
|
||||
class Exception extends \Exception
|
||||
{
|
||||
|
@@ -123,7 +123,7 @@ class OAuth
|
||||
public function getOauth64()
|
||||
{
|
||||
// Get a new token if it's not available or has expired
|
||||
if (null === $this->oauthToken or $this->oauthToken->hasExpired()) {
|
||||
if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {
|
||||
$this->oauthToken = $this->getToken();
|
||||
}
|
||||
|
||||
|
1368
kirby/vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
1368
kirby/vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
File diff suppressed because it is too large
Load Diff
20
kirby/vendor/phpmailer/phpmailer/src/POP3.php
vendored
20
kirby/vendor/phpmailer/phpmailer/src/POP3.php
vendored
@@ -3,13 +3,13 @@
|
||||
* PHPMailer POP-Before-SMTP Authentication Class.
|
||||
* PHP Version 5.5.
|
||||
*
|
||||
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
|
||||
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
|
||||
*
|
||||
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
|
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
|
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
|
||||
* @author Brent R. Matzelle (original founder)
|
||||
* @copyright 2012 - 2017 Marcus Bointon
|
||||
* @copyright 2012 - 2019 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
|
||||
@@ -29,14 +29,14 @@ namespace PHPMailer\PHPMailer;
|
||||
* and then loop through your mail sending script. Providing this process doesn't
|
||||
* take longer than the verification period lasts on your POP3 server, you should be fine.
|
||||
* 3) This is really ancient technology; you should only need to use it to talk to very old systems.
|
||||
* 4) This POP3 class is deliberately lightweight and incomplete, and implements just
|
||||
* 4) This POP3 class is deliberately lightweight and incomplete, implementing just
|
||||
* enough to do authentication.
|
||||
* If you want a more complete class there are other POP3 classes for PHP available.
|
||||
*
|
||||
* @author Richard Davey (original author) <rich@corephp.co.uk>
|
||||
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
|
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
|
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
|
||||
* @author Richard Davey (original author) <rich@corephp.co.uk>
|
||||
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
|
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
|
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
|
||||
*/
|
||||
class POP3
|
||||
{
|
||||
@@ -45,7 +45,7 @@ class POP3
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.0.7';
|
||||
const VERSION = '6.1.6';
|
||||
|
||||
/**
|
||||
* Default POP3 port number.
|
||||
@@ -230,6 +230,8 @@ class POP3
|
||||
}
|
||||
|
||||
// connect to the POP3 server
|
||||
$errno = 0;
|
||||
$errstr = '';
|
||||
$this->pop_conn = fsockopen(
|
||||
$host, // POP3 Host
|
||||
$port, // Port #
|
||||
@@ -364,7 +366,7 @@ class POP3
|
||||
*/
|
||||
protected function checkResponse($string)
|
||||
{
|
||||
if (substr($string, 0, 3) !== '+OK') {
|
||||
if (strpos($string, '+OK') !== 0) {
|
||||
$this->setError("Server reported an error: $string");
|
||||
|
||||
return false;
|
||||
|
139
kirby/vendor/phpmailer/phpmailer/src/SMTP.php
vendored
139
kirby/vendor/phpmailer/phpmailer/src/SMTP.php
vendored
@@ -9,7 +9,7 @@
|
||||
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
|
||||
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
|
||||
* @author Brent R. Matzelle (original founder)
|
||||
* @copyright 2012 - 2017 Marcus Bointon
|
||||
* @copyright 2012 - 2019 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
|
||||
@@ -24,8 +24,8 @@ namespace PHPMailer\PHPMailer;
|
||||
* PHPMailer RFC821 SMTP email transport class.
|
||||
* Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
|
||||
*
|
||||
* @author Chris Ryan
|
||||
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
|
||||
* @author Chris Ryan
|
||||
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
|
||||
*/
|
||||
class SMTP
|
||||
{
|
||||
@@ -34,7 +34,7 @@ class SMTP
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.0.7';
|
||||
const VERSION = '6.1.6';
|
||||
|
||||
/**
|
||||
* SMTP line break constant.
|
||||
@@ -51,34 +51,57 @@ class SMTP
|
||||
const DEFAULT_PORT = 25;
|
||||
|
||||
/**
|
||||
* The maximum line length allowed by RFC 2822 section 2.1.1.
|
||||
* The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
|
||||
* *excluding* a trailing CRLF break.
|
||||
*
|
||||
* @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const MAX_LINE_LENGTH = 998;
|
||||
|
||||
/**
|
||||
* The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
|
||||
* *including* a trailing CRLF line break.
|
||||
*
|
||||
* @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const MAX_REPLY_LENGTH = 512;
|
||||
|
||||
/**
|
||||
* Debug level for no output.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const DEBUG_OFF = 0;
|
||||
|
||||
/**
|
||||
* Debug level to show client -> server messages.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const DEBUG_CLIENT = 1;
|
||||
|
||||
/**
|
||||
* Debug level to show client -> server and server -> client messages.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const DEBUG_SERVER = 2;
|
||||
|
||||
/**
|
||||
* Debug level to show connection status, client -> server and server -> client messages.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const DEBUG_CONNECTION = 3;
|
||||
|
||||
/**
|
||||
* Debug level to show all messages.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
const DEBUG_LOWLEVEL = 4;
|
||||
|
||||
@@ -197,7 +220,7 @@ class SMTP
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $helo_rply = null;
|
||||
protected $helo_rply;
|
||||
|
||||
/**
|
||||
* The set of SMTP extensions sent in reply to EHLO command.
|
||||
@@ -209,7 +232,7 @@ class SMTP
|
||||
*
|
||||
* @var array|null
|
||||
*/
|
||||
protected $server_caps = null;
|
||||
protected $server_caps;
|
||||
|
||||
/**
|
||||
* The most recent reply received from the server.
|
||||
@@ -239,7 +262,7 @@ class SMTP
|
||||
return;
|
||||
}
|
||||
//Avoid clash with built-in function names
|
||||
if (!in_array($this->Debugoutput, ['error_log', 'html', 'echo']) and is_callable($this->Debugoutput)) {
|
||||
if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
|
||||
call_user_func($this->Debugoutput, $str, $level);
|
||||
|
||||
return;
|
||||
@@ -260,12 +283,12 @@ class SMTP
|
||||
case 'echo':
|
||||
default:
|
||||
//Normalize line breaks
|
||||
$str = preg_replace('/\r\n|\r/ms', "\n", $str);
|
||||
$str = preg_replace('/\r\n|\r/m', "\n", $str);
|
||||
echo gmdate('Y-m-d H:i:s'),
|
||||
"\t",
|
||||
//Trim trailing space
|
||||
trim(
|
||||
//Indent for readability, except for trailing break
|
||||
//Indent for readability, except for trailing break
|
||||
str_replace(
|
||||
"\n",
|
||||
"\n \t ",
|
||||
@@ -348,7 +371,7 @@ class SMTP
|
||||
'Failed to connect to server',
|
||||
'',
|
||||
(string) $errno,
|
||||
(string) $errstr
|
||||
$errstr
|
||||
);
|
||||
$this->edebug(
|
||||
'SMTP ERROR: ' . $this->error['error']
|
||||
@@ -361,10 +384,10 @@ class SMTP
|
||||
$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');
|
||||
if (strpos(PHP_OS, 'WIN') !== 0) {
|
||||
$max = (int) ini_get('max_execution_time');
|
||||
// Don't bother if unlimited
|
||||
if (0 != $max and $timeout > $max) {
|
||||
if (0 !== $max && $timeout > $max) {
|
||||
@set_time_limit($timeout);
|
||||
}
|
||||
stream_set_timeout($this->smtp_conn, $timeout, 0);
|
||||
@@ -444,14 +467,14 @@ class SMTP
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
|
||||
$this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
|
||||
$this->edebug(
|
||||
'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
|
||||
self::DEBUG_LOWLEVEL
|
||||
);
|
||||
|
||||
//If we have requested a specific auth type, check the server supports it before trying others
|
||||
if (null !== $authtype and !in_array($authtype, $this->server_caps['AUTH'])) {
|
||||
if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
|
||||
$this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
|
||||
$authtype = null;
|
||||
}
|
||||
@@ -460,7 +483,7 @@ class SMTP
|
||||
//If no auth mechanism is specified, attempt to use these, in this order
|
||||
//Try CRAM-MD5 first as it's more secure than the others
|
||||
foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
|
||||
if (in_array($method, $this->server_caps['AUTH'])) {
|
||||
if (in_array($method, $this->server_caps['AUTH'], true)) {
|
||||
$authtype = $method;
|
||||
break;
|
||||
}
|
||||
@@ -470,10 +493,10 @@ class SMTP
|
||||
|
||||
return false;
|
||||
}
|
||||
self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
|
||||
$this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
|
||||
}
|
||||
|
||||
if (!in_array($authtype, $this->server_caps['AUTH'])) {
|
||||
if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
|
||||
$this->setError("The requested authentication method \"$authtype\" is not supported by the server");
|
||||
|
||||
return false;
|
||||
@@ -663,13 +686,13 @@ class SMTP
|
||||
|
||||
$field = substr($lines[0], 0, strpos($lines[0], ':'));
|
||||
$in_headers = false;
|
||||
if (!empty($field) and strpos($field, ' ') === false) {
|
||||
if (!empty($field) && strpos($field, ' ') === false) {
|
||||
$in_headers = true;
|
||||
}
|
||||
|
||||
foreach ($lines as $line) {
|
||||
$lines_out = [];
|
||||
if ($in_headers and $line == '') {
|
||||
if ($in_headers && $line === '') {
|
||||
$in_headers = false;
|
||||
}
|
||||
//Break this line up into several smaller lines if it's too long
|
||||
@@ -700,7 +723,7 @@ class SMTP
|
||||
//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] == '.') {
|
||||
if (!empty($line_out) && $line_out[0] === '.') {
|
||||
$line_out = '.' . $line_out;
|
||||
}
|
||||
$this->client_send($line_out . static::LE, 'DATA');
|
||||
@@ -710,7 +733,7 @@ class SMTP
|
||||
//Message data has been sent, complete the command
|
||||
//Increase timelimit for end of DATA command
|
||||
$savetimelimit = $this->Timelimit;
|
||||
$this->Timelimit = $this->Timelimit * 2;
|
||||
$this->Timelimit *= 2;
|
||||
$result = $this->sendCommand('DATA END', '.', 250);
|
||||
$this->recordLastTransactionID();
|
||||
//Restore timelimit
|
||||
@@ -745,7 +768,7 @@ class SMTP
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @see hello()
|
||||
* @see hello()
|
||||
*/
|
||||
protected function sendHello($hello, $host)
|
||||
{
|
||||
@@ -838,7 +861,7 @@ class SMTP
|
||||
{
|
||||
$noerror = $this->sendCommand('QUIT', 'QUIT', 221);
|
||||
$err = $this->error; //Save any error
|
||||
if ($noerror or $close_on_error) {
|
||||
if ($noerror || $close_on_error) {
|
||||
$this->close();
|
||||
$this->error = $err; //Restore any error from the quit command
|
||||
}
|
||||
@@ -853,14 +876,35 @@ class SMTP
|
||||
* Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
|
||||
*
|
||||
* @param string $address The address the message is being sent to
|
||||
* @param string $dsn Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
|
||||
* or DELAY. If you specify NEVER all other notifications are ignored.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function recipient($address)
|
||||
public function recipient($address, $dsn = '')
|
||||
{
|
||||
if (empty($dsn)) {
|
||||
$rcpt = 'RCPT TO:<' . $address . '>';
|
||||
} else {
|
||||
$dsn = strtoupper($dsn);
|
||||
$notify = [];
|
||||
|
||||
if (strpos($dsn, 'NEVER') !== false) {
|
||||
$notify[] = 'NEVER';
|
||||
} else {
|
||||
foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
|
||||
if (strpos($dsn, $value) !== false) {
|
||||
$notify[] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
|
||||
}
|
||||
|
||||
return $this->sendCommand(
|
||||
'RCPT TO',
|
||||
'RCPT TO:<' . $address . '>',
|
||||
$rcpt,
|
||||
[250, 251]
|
||||
);
|
||||
}
|
||||
@@ -894,7 +938,7 @@ class SMTP
|
||||
return false;
|
||||
}
|
||||
//Reject line breaks in all commands
|
||||
if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
|
||||
if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
|
||||
$this->setError("Command '$command' contained line breaks");
|
||||
|
||||
return false;
|
||||
@@ -904,8 +948,8 @@ class SMTP
|
||||
$this->last_reply = $this->get_lines();
|
||||
// Fetch SMTP code and possible error code explanation
|
||||
$matches = [];
|
||||
if (preg_match('/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/', $this->last_reply, $matches)) {
|
||||
$code = $matches[1];
|
||||
if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
|
||||
$code = (int) $matches[1];
|
||||
$code_ex = (count($matches) > 2 ? $matches[2] : null);
|
||||
// Cut off error code from each response line
|
||||
$detail = preg_replace(
|
||||
@@ -916,14 +960,14 @@ class SMTP
|
||||
);
|
||||
} else {
|
||||
// Fall back to simple parsing if regex fails
|
||||
$code = substr($this->last_reply, 0, 3);
|
||||
$code = (int) 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)) {
|
||||
if (!in_array($code, (array) $expect, true)) {
|
||||
$this->setError(
|
||||
"$command command failed",
|
||||
$detail,
|
||||
@@ -1014,9 +1058,9 @@ class SMTP
|
||||
{
|
||||
//If SMTP transcripts are left enabled, or debug output is posted online
|
||||
//it can leak credentials, so hide credentials in all but lowest level
|
||||
if (self::DEBUG_LOWLEVEL > $this->do_debug and
|
||||
if (self::DEBUG_LOWLEVEL > $this->do_debug &&
|
||||
in_array($command, ['User & Password', 'Username', 'Password'], true)) {
|
||||
$this->edebug('CLIENT -> SERVER: <credentials hidden>', self::DEBUG_CLIENT);
|
||||
$this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
|
||||
} else {
|
||||
$this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
|
||||
}
|
||||
@@ -1062,7 +1106,7 @@ class SMTP
|
||||
*
|
||||
* @param string $name Name of SMTP extension or 'HELO'|'EHLO'
|
||||
*
|
||||
* @return mixed
|
||||
* @return string|bool|null
|
||||
*/
|
||||
public function getServerExt($name)
|
||||
{
|
||||
@@ -1073,10 +1117,10 @@ class SMTP
|
||||
}
|
||||
|
||||
if (!array_key_exists($name, $this->server_caps)) {
|
||||
if ('HELO' == $name) {
|
||||
if ('HELO' === $name) {
|
||||
return $this->server_caps['EHLO'];
|
||||
}
|
||||
if ('EHLO' == $name || array_key_exists('EHLO', $this->server_caps)) {
|
||||
if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
|
||||
return false;
|
||||
}
|
||||
$this->setError('HELO handshake was used; No information about server extensions available');
|
||||
@@ -1120,36 +1164,36 @@ class SMTP
|
||||
}
|
||||
$selR = [$this->smtp_conn];
|
||||
$selW = null;
|
||||
while (is_resource($this->smtp_conn) and !feof($this->smtp_conn)) {
|
||||
while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
|
||||
//Must pass vars in here as params are by reference
|
||||
if (!stream_select($selR, $selW, $selW, $this->Timelimit)) {
|
||||
$this->edebug(
|
||||
'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
|
||||
'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
|
||||
self::DEBUG_LOWLEVEL
|
||||
);
|
||||
break;
|
||||
}
|
||||
//Deliberate noise suppression - errors are handled afterwards
|
||||
$str = @fgets($this->smtp_conn, 515);
|
||||
$str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
|
||||
$this->edebug('SMTP INBOUND: "' . trim($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] == ' ')) {
|
||||
// or 4th character is a space or a line break char, we are done reading, break the loop.
|
||||
// String array access is a significant micro-optimisation over strlen
|
||||
if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
|
||||
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)',
|
||||
'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',
|
||||
self::DEBUG_LOWLEVEL
|
||||
);
|
||||
break;
|
||||
}
|
||||
// Now check if reads took too long
|
||||
if ($endtime and time() > $endtime) {
|
||||
if ($endtime && time() > $endtime) {
|
||||
$this->edebug(
|
||||
'SMTP -> get_lines(): timelimit reached (' .
|
||||
$this->Timelimit . ' sec)',
|
||||
@@ -1289,7 +1333,7 @@ class SMTP
|
||||
* If no reply has been received yet, it will return null.
|
||||
* If no pattern was matched, it will return false.
|
||||
*
|
||||
* @return bool|null|string
|
||||
* @return bool|string|null
|
||||
*/
|
||||
protected function recordLastTransactionID()
|
||||
{
|
||||
@@ -1300,6 +1344,7 @@ class SMTP
|
||||
} else {
|
||||
$this->last_smtp_transaction_id = false;
|
||||
foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
|
||||
$matches = [];
|
||||
if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
|
||||
$this->last_smtp_transaction_id = trim($matches[1]);
|
||||
break;
|
||||
@@ -1315,7 +1360,7 @@ class SMTP
|
||||
* If no reply has been received yet, it will return null.
|
||||
* If no pattern was matched, it will return false.
|
||||
*
|
||||
* @return bool|null|string
|
||||
* @return bool|string|null
|
||||
*
|
||||
* @see recordLastTransactionID()
|
||||
*/
|
||||
|
Reference in New Issue
Block a user