--- a/wp/wp-includes/PHPMailer/SMTP.php Fri Sep 05 18:40:08 2025 +0200
+++ b/wp/wp-includes/PHPMailer/SMTP.php Fri Sep 05 18:52:52 2025 +0200
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 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
+ * @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.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.
@@ -35,7 +35,7 @@
*
* @var string
*/
- const VERSION = '6.9.1';
+ const VERSION = '6.9.3';
/**
* SMTP line break constant.
@@ -62,7 +62,7 @@
* 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
+ * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.6
*
* @var int
*/
@@ -72,7 +72,7 @@
* 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
+ * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.5
*
* @var int
*/
@@ -152,8 +152,8 @@
/**
* Whether to use VERP.
*
- * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path
- * @see http://www.postfix.org/VERP_README.html Info on VERP
+ * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
+ * @see https://www.postfix.org/VERP_README.html Info on VERP
*
* @var bool
*/
@@ -164,7 +164,7 @@
* 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.
*
- * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2
+ * @see https://www.rfc-editor.org/rfc/rfc2821#section-4.5.3.2
*
* @var int
*/
@@ -187,12 +187,12 @@
*/
protected $smtp_transaction_id_patterns = [
'exim' => '/[\d]{3} OK id=(.*)/',
- 'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/',
- 'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/',
- 'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/',
+ 'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/',
+ 'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/',
+ 'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/',
'Amazon_SES' => '/[\d]{3} Ok (.*)/',
'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
- 'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/',
+ 'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/',
'Haraka' => '/[\d]{3} Message Queued \((.*)\)/',
'ZoneMTA' => '/[\d]{3} Message queued as (.*)/',
'Mailjet' => '/[\d]{3} OK queued as (.*)/',
@@ -280,7 +280,8 @@
}
//Is this a PSR-3 logger?
if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
- $this->Debugoutput->debug($str);
+ //Remove trailing line breaks potentially added by calls to SMTP::client_send()
+ $this->Debugoutput->debug(rtrim($str, "\r\n"));
return;
}
@@ -293,6 +294,7 @@
switch ($this->Debugoutput) {
case 'error_log':
//Don't output, just log
+ /** @noinspection ForgottenDebugOutputInspection */
error_log($str);
break;
case 'html':
@@ -371,7 +373,7 @@
}
//Anything other than a 220 response means something went wrong
//RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error
- //https://tools.ietf.org/html/rfc5321#section-3.1
+ //https://www.rfc-editor.org/rfc/rfc5321#section-3.1
if ($responseCode === 554) {
$this->quit();
}
@@ -404,7 +406,9 @@
$errstr = '';
if ($streamok) {
$socket_context = stream_context_create($options);
- set_error_handler([$this, 'errorHandler']);
+ set_error_handler(function () {
+ call_user_func_array([$this, 'errorHandler'], func_get_args());
+ });
$connection = stream_socket_client(
$host . ':' . $port,
$errno,
@@ -419,7 +423,9 @@
'Connection: stream_socket_client not available, falling back to fsockopen',
self::DEBUG_CONNECTION
);
- set_error_handler([$this, 'errorHandler']);
+ set_error_handler(function () {
+ call_user_func_array([$this, 'errorHandler'], func_get_args());
+ });
$connection = fsockopen(
$host,
$port,
@@ -483,7 +489,9 @@
}
//Begin encrypted connection
- set_error_handler([$this, 'errorHandler']);
+ set_error_handler(function () {
+ call_user_func_array([$this, 'errorHandler'], func_get_args());
+ });
$crypto_ok = stream_socket_enable_crypto(
$this->smtp_conn,
true,
@@ -574,7 +582,7 @@
}
//Send encoded username and password
if (
- //Format from https://tools.ietf.org/html/rfc4616#section-2
+ //Format from https://www.rfc-editor.org/rfc/rfc4616#section-2
//We skip the first field (it's forgery), so the string starts with a null byte
!$this->sendCommand(
'User & Password',
@@ -648,7 +656,7 @@
}
//The following borrowed from
- //http://php.net/manual/en/function.mhash.php#27225
+ //https://www.php.net/manual/en/function.mhash.php#27225
//RFC 2104 HMAC implementation for php.
//Creates an md5 HMAC.
@@ -787,7 +795,7 @@
//Send the lines to the server
foreach ($lines_out as $line_out) {
//Dot-stuffing as per RFC5321 section 4.5.2
- //https://tools.ietf.org/html/rfc5321#section-4.5.2
+ //https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2
if (!empty($line_out) && $line_out[0] === '.') {
$line_out = '.' . $line_out;
}
@@ -1162,7 +1170,9 @@
} else {
$this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
}
- set_error_handler([$this, 'errorHandler']);
+ set_error_handler(function () {
+ call_user_func_array([$this, 'errorHandler'], func_get_args());
+ });
$result = fwrite($this->smtp_conn, $data);
restore_error_handler();
@@ -1265,7 +1275,9 @@
while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
//Must pass vars in here as params are by reference
//solution for signals inspired by https://github.com/symfony/symfony/pull/6540
- set_error_handler([$this, 'errorHandler']);
+ set_error_handler(function () {
+ call_user_func_array([$this, 'errorHandler'], func_get_args());
+ });
$n = stream_select($selR, $selW, $selW, $this->Timelimit);
restore_error_handler();