* The PHPMailer SMTP version number.
* @var string
*/
- const VERSION = '5.2.22';
+ const VERSION = '5.2.14';
/**
* SMTP line break constant.
* @deprecated Use the `VERSION` constant instead
* @see SMTP::VERSION
*/
- public $Version = '5.2.22';
+ public $Version = '5.2.14';
/**
* SMTP server port number.
*/
public $Timelimit = 300;
- /**
- * @var array patterns to extract smtp transaction id from smtp reply
- * Only first capture group will be use, use non-capturing group to deal with it
- * Extend this class to override this property to fulfil your needs.
- */
- 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 (.*)/'
- );
-
/**
* The socket for the server connection.
* @var resource
}
//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);
+ call_user_func($this->Debugoutput, $str, $this->do_debug);
return;
}
switch ($this->Debugoutput) {
$errstr = '';
if ($streamok) {
$socket_context = stream_context_create($options);
- set_error_handler(array($this, 'errorHandler'));
- $this->smtp_conn = stream_socket_client(
+ //Suppress errors; connection failures are handled at a higher level
+ $this->smtp_conn = @stream_socket_client(
$host . ":" . $port,
$errno,
$errstr,
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,
$errstr,
$timeout
);
- restore_error_handler();
}
// Verify we connected properly
if (!is_resource($this->smtp_conn)) {
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
if (!stream_socket_enable_crypto(
$this->smtp_conn,
true,
- $crypto_method
+ STREAM_CRYPTO_METHOD_TLS_CLIENT
)) {
return false;
}
* @see hello()
* @param string $username The user name
* @param string $password The password
- * @param string $authtype The auth type (PLAIN, LOGIN, CRAM-MD5)
+ * @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)
);
if (empty($authtype)) {
- foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN') as $method) {
+ foreach (array('LOGIN', 'CRAM-MD5', 'PLAIN') as $method) {
if (in_array($method, $this->server_caps['AUTH'])) {
$authtype = $method;
break;
protected function parseHelloFields($type)
{
$this->server_caps = array();
- $lines = explode("\n", $this->helo_rply);
+ $lines = explode("\n", $this->last_reply);
foreach ($lines as $n => $s) {
//First 4 chars contain response code followed by - or space
{
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.
- */
- protected function errorHandler($errno, $errmsg)
- {
- $notice = 'Connection: Failed to connect to server.';
- $this->setError(
- $notice,
- $errno,
- $errmsg
- );
- $this->edebug(
- $notice . ' Error number ' . $errno . '. "Error notice: ' . $errmsg,
- self::DEBUG_CONNECTION
- );
- }
-
- /**
- * Will return the ID of the last smtp transaction based on a list of patterns provided
- * in SMTP::$smtp_transaction_id_patterns.
- * If no reply has been received yet, it will return null.
- * If no pattern has been matched, it will return false.
- * @return bool|null|string
- */
- public function getLastTransactionID()
- {
- $reply = $this->getLastReply();
-
- if (empty($reply)) {
- return null;
- }
-
- foreach($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
- if(preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
- return $matches[1];
- }
- }
-
- return false;
- }
}