Vergleich inc/mailhandlers/smtp.php - 1.8.11 - 1.8.24

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 204Zeile 204

if($this->connected())
{


if($this->connected())
{

			if(!$this->send_data('MAIL FROM:<'.$this->from.'>', '250'))

			if(!$this->send_data('MAIL FROM:<'.$this->from.'>', 250))

			{
$this->fatal_error("The mail server does not understand the MAIL FROM command. Reason: ".$this->get_error());
return false;

			{
$this->fatal_error("The mail server does not understand the MAIL FROM command. Reason: ".$this->get_error());
return false;

Zeile 215Zeile 215
			foreach($emails as $to)
{
$to = trim($to);

			foreach($emails as $to)
{
$to = trim($to);

				if(!$this->send_data('RCPT TO:<'.$to.'>', '250'))

				if(!$this->send_data('RCPT TO:<'.$to.'>', 250))

				{
$this->fatal_error("The mail server does not understand the RCPT TO command. Reason: ".$this->get_error());
return false;
}
}


				{
$this->fatal_error("The mail server does not understand the RCPT TO command. Reason: ".$this->get_error());
return false;
}
}


			if($this->send_data('DATA', '354'))

			if($this->send_data('DATA', 354))

			{
$this->send_data('Date: ' . gmdate('r'));
$this->send_data('To: ' . $this->to);

			{
$this->send_data('Date: ' . gmdate('r'));
$this->send_data('To: ' . $this->to);

Zeile 247Zeile 247
				return false;
}


				return false;
}


			$this->send_data('.', '250');




			if(!$this->send_data('.', 250))
{
$this->fatal_error("Mail may not be delivered. Reason: ".$this->get_error());
}


if(!$this->keep_alive)
{


if(!$this->keep_alive)
{

Zeile 297Zeile 300
				$helo = 'HELO';
}


				$helo = 'HELO';
}


			$data = $this->send_data("{$helo} {$this->helo}", '250');

			$data = $this->send_data("{$helo} {$this->helo}", 250);

			if(!$data)
{
$this->fatal_error("The server did not understand the {$helo} command");

			if(!$data)
{
$this->fatal_error("The server did not understand the {$helo} command");

Zeile 306Zeile 309

if($this->use_tls && preg_match("#250( |-)STARTTLS#mi", $data))
{


if($this->use_tls && preg_match("#250( |-)STARTTLS#mi", $data))
{

				if(!$this->send_data('STARTTLS', '220'))

				if(!$this->send_data('STARTTLS', 220))

				{

				{

						$this->fatal_error("The server did not understand the STARTTLS command. Reason: ".$this->get_error());

					$this->fatal_error("The server did not understand the STARTTLS command. Reason: ".$this->get_error());

					return false;
}
if(!@stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT))

					return false;
}
if(!@stream_socket_enable_crypto($this->connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT))

Zeile 317Zeile 320
					return false;
}
// Resend EHLO to get updated service list

					return false;
}
// Resend EHLO to get updated service list

				$data = $this->send_data("{$helo} {$this->helo}", '250');

				$data = $this->send_data("{$helo} {$this->helo}", 250);

				if(!$data)
{
$this->fatal_error("The server did not understand the EHLO command");

				if(!$data)
{
$this->fatal_error("The server did not understand the EHLO command");

					return false;

					return false;

				}
}

if(!empty($this->username) && !empty($this->password))
{

				}
}

if(!empty($this->username) && !empty($this->password))
{

				preg_match("#250( |-)AUTH( |=)(.+)$#mi", $data, $matches);





				if(!preg_match("#250( |-)AUTH( |=)(.+)$#mi", $data, $matches))
{
$this->fatal_error("The server did not understand the AUTH command");
return false;
}

				if(!$this->auth($matches[3]))
{
return false;

				if(!$this->auth($matches[3]))
{
return false;

Zeile 336Zeile 343
			return true;
}
else

			return true;
}
else

		{

		{

			$this->fatal_error("Unable to connect to the mail server with the given details. Reason: {$error_number}: {$error_string}");
return false;
}

			$this->fatal_error("Unable to connect to the mail server with the given details. Reason: {$error_number}: {$error_string}");
return false;
}

Zeile 357Zeile 364
		if(in_array("LOGIN", $auth_methods))
{
if(!$this->send_data("AUTH LOGIN", 334))

		if(in_array("LOGIN", $auth_methods))
{
if(!$this->send_data("AUTH LOGIN", 334))

			{

			{

				if($this->code == 503)
{
return true;

				if($this->code == 503)
{
return true;

Zeile 365Zeile 372
				$this->fatal_error("The SMTP server did not respond correctly to the AUTH LOGIN command");
return false;
}

				$this->fatal_error("The SMTP server did not respond correctly to the AUTH LOGIN command");
return false;
}


if(!$this->send_data(base64_encode($this->username), '334'))
{
$this->fatal_error("The SMTP server rejected the supplied SMTP username. Reason: ".$this->get_error());
return false;
}

if(!$this->send_data(base64_encode($this->password), '235'))
{
$this->fatal_error("The SMTP server rejected the supplied SMTP password. Reason: ".$this->get_error());
return false;
}
}


if(!$this->send_data(base64_encode($this->username), 334))
{
$this->fatal_error("The SMTP server rejected the supplied SMTP username. Reason: ".$this->get_error());
return false;
}

if(!$this->send_data(base64_encode($this->password), 235))
{
$this->fatal_error("The SMTP server rejected the supplied SMTP password. Reason: ".$this->get_error());
return false;
}
}

		else if(in_array("PLAIN", $auth_methods))
{

		else if(in_array("PLAIN", $auth_methods))
{

			if(!$this->send_data("AUTH PLAIN", '334'))




















			if(!$this->send_data("AUTH PLAIN", 334))
{
if($this->code == 503)
{
return true;
}
$this->fatal_error("The SMTP server did not respond correctly to the AUTH PLAIN command");
return false;
}
$auth = base64_encode(chr(0).$this->username.chr(0).$this->password);
if(!$this->send_data($auth, 235))
{
$this->fatal_error("The SMTP server rejected the supplied login username and password. Reason: ".$this->get_error());
return false;
}
}
else if(in_array("CRAM-MD5", $auth_methods))
{
$data = $this->send_data("AUTH CRAM-MD5", 334);
if(!$data)

			{
if($this->code == 503)
{
return true;
}

			{
if($this->code == 503)
{
return true;
}

				$this->fatal_error("The SMTP server did not respond correctly to the AUTH PLAIN command");

				$this->fatal_error("The SMTP server did not respond correctly to the AUTH CRAM-MD5 command");

				return false;
}

				return false;
}

			$auth = base64_encode(chr(0).$this->username.chr(0).$this->password);





$challenge = base64_decode(substr($data, 4));
$auth = base64_encode($this->username.' '.$this->cram_md5_response($this->password, $challenge));


			if(!$this->send_data($auth, 235))
{
$this->fatal_error("The SMTP server rejected the supplied login username and password. Reason: ".$this->get_error());

			if(!$this->send_data($auth, 235))
{
$this->fatal_error("The SMTP server rejected the supplied login username and password. Reason: ".$this->get_error());

				return false;
}

				return false;
}

		}
else

		}
else

		{

		{

			$this->fatal_error("The SMTP server does not support any of the AUTH methods that MyBB supports");
return false;

			$this->fatal_error("The SMTP server does not support any of the AUTH methods that MyBB supports");
return false;

		}


		}


		// Still here, we're authenticated
return true;

		// Still here, we're authenticated
return true;

	}


	}


	/**
* Fetch data from the SMTP server.
*

	/**
* Fetch data from the SMTP server.
*

Zeile 414Zeile 443
	function get_data()
{
$string = '';

	function get_data()
{
$string = '';





		while((($line = fgets($this->connection, 515)) !== false))
{
$string .= $line;

		while((($line = fgets($this->connection, 515)) !== false))
{
$string .= $line;

Zeile 427Zeile 456
		$this->data = $string;
$this->code = substr($this->data, 0, 3);
return $string;

		$this->data = $string;
$this->code = substr($this->data, 0, 3);
return $string;

	}

/**

	}

/**

	 * Check if we're currently connected to an SMTP server
*
* @return boolean true if connected

	 * Check if we're currently connected to an SMTP server
*
* @return boolean true if connected

Zeile 534Zeile 563
	function set_error($error)
{
$this->last_error = $error;

	function set_error($error)
{
$this->last_error = $error;

 
	}

/**
* Generate a CRAM-MD5 response from a server challenge.
*
* @param string $password Password.
* @param string $challenge Challenge sent from SMTP server.
*
* @return string CRAM-MD5 response.
*/
function cram_md5_response($password, $challenge)
{
if(strlen($password) > 64)
{
$password = pack('H32', md5($password));
}

if(strlen($password) < 64)
{
$password = str_pad($password, 64, chr(0));
}

$k_ipad = substr($password, 0, 64) ^ str_repeat(chr(0x36), 64);
$k_opad = substr($password, 0, 64) ^ str_repeat(chr(0x5C), 64);

$inner = pack('H32', md5($k_ipad.$challenge));

return md5($k_opad.$inner);

	}
}

	}
}