mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
5.8 KiB
264 lines
5.8 KiB
8 years ago
|
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of SwiftMailer.
|
||
|
* (c) 2004-2009 Chris Corbyn
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* An ESMTP handler for AUTH support.
|
||
|
*
|
||
|
* @author Chris Corbyn
|
||
|
*/
|
||
|
class Swift_Transport_Esmtp_AuthHandler implements Swift_Transport_EsmtpHandler
|
||
|
{
|
||
|
/**
|
||
|
* Authenticators available to process the request.
|
||
|
*
|
||
|
* @var Swift_Transport_Esmtp_Authenticator[]
|
||
|
*/
|
||
|
private $_authenticators = array();
|
||
|
|
||
|
/**
|
||
|
* The username for authentication.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_username;
|
||
|
|
||
|
/**
|
||
|
* The password for authentication.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_password;
|
||
|
|
||
|
/**
|
||
|
* The auth mode for authentication.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_auth_mode;
|
||
|
|
||
|
/**
|
||
|
* The ESMTP AUTH parameters available.
|
||
|
*
|
||
|
* @var string[]
|
||
|
*/
|
||
|
private $_esmtpParams = array();
|
||
|
|
||
|
/**
|
||
|
* Create a new AuthHandler with $authenticators for support.
|
||
|
*
|
||
|
* @param Swift_Transport_Esmtp_Authenticator[] $authenticators
|
||
|
*/
|
||
|
public function __construct(array $authenticators)
|
||
|
{
|
||
|
$this->setAuthenticators($authenticators);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the Authenticators which can process a login request.
|
||
|
*
|
||
|
* @param Swift_Transport_Esmtp_Authenticator[] $authenticators
|
||
|
*/
|
||
|
public function setAuthenticators(array $authenticators)
|
||
|
{
|
||
|
$this->_authenticators = $authenticators;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the Authenticators which can process a login request.
|
||
|
*
|
||
|
* @return Swift_Transport_Esmtp_Authenticator[]
|
||
|
*/
|
||
|
public function getAuthenticators()
|
||
|
{
|
||
|
return $this->_authenticators;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the username to authenticate with.
|
||
|
*
|
||
|
* @param string $username
|
||
|
*/
|
||
|
public function setUsername($username)
|
||
|
{
|
||
|
$this->_username = $username;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the username to authenticate with.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getUsername()
|
||
|
{
|
||
|
return $this->_username;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the password to authenticate with.
|
||
|
*
|
||
|
* @param string $password
|
||
|
*/
|
||
|
public function setPassword($password)
|
||
|
{
|
||
|
$this->_password = $password;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the password to authenticate with.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getPassword()
|
||
|
{
|
||
|
return $this->_password;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the auth mode to use to authenticate.
|
||
|
*
|
||
|
* @param string $mode
|
||
|
*/
|
||
|
public function setAuthMode($mode)
|
||
|
{
|
||
|
$this->_auth_mode = $mode;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the auth mode to use to authenticate.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getAuthMode()
|
||
|
{
|
||
|
return $this->_auth_mode;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the name of the ESMTP extension this handles.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function getHandledKeyword()
|
||
|
{
|
||
|
return 'AUTH';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the parameters which the EHLO greeting indicated.
|
||
|
*
|
||
|
* @param string[] $parameters
|
||
|
*/
|
||
|
public function setKeywordParams(array $parameters)
|
||
|
{
|
||
|
$this->_esmtpParams = $parameters;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Runs immediately after a EHLO has been issued.
|
||
|
*
|
||
|
* @param Swift_Transport_SmtpAgent $agent to read/write
|
||
|
*/
|
||
|
public function afterEhlo(Swift_Transport_SmtpAgent $agent)
|
||
|
{
|
||
|
if ($this->_username) {
|
||
|
$count = 0;
|
||
|
foreach ($this->_getAuthenticatorsForAgent() as $authenticator) {
|
||
|
if (in_array(strtolower($authenticator->getAuthKeyword()),
|
||
|
array_map('strtolower', $this->_esmtpParams))) {
|
||
|
++$count;
|
||
|
if ($authenticator->authenticate($agent, $this->_username, $this->_password)) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
throw new Swift_TransportException(
|
||
|
'Failed to authenticate on SMTP server with username "'.
|
||
|
$this->_username.'" using '.$count.' possible authenticators'
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Not used.
|
||
|
*/
|
||
|
public function getMailParams()
|
||
|
{
|
||
|
return array();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Not used.
|
||
|
*/
|
||
|
public function getRcptParams()
|
||
|
{
|
||
|
return array();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Not used.
|
||
|
*/
|
||
|
public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = array(), &$failedRecipients = null, &$stop = false)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns +1, -1 or 0 according to the rules for usort().
|
||
|
*
|
||
|
* This method is called to ensure extensions can be execute in an appropriate order.
|
||
|
*
|
||
|
* @param string $esmtpKeyword to compare with
|
||
|
*
|
||
|
* @return int
|
||
|
*/
|
||
|
public function getPriorityOver($esmtpKeyword)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns an array of method names which are exposed to the Esmtp class.
|
||
|
*
|
||
|
* @return string[]
|
||
|
*/
|
||
|
public function exposeMixinMethods()
|
||
|
{
|
||
|
return array('setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Not used.
|
||
|
*/
|
||
|
public function resetState()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the authenticator list for the given agent.
|
||
|
*
|
||
|
* @param Swift_Transport_SmtpAgent $agent
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected function _getAuthenticatorsForAgent()
|
||
|
{
|
||
|
if (!$mode = strtolower($this->_auth_mode)) {
|
||
|
return $this->_authenticators;
|
||
|
}
|
||
|
|
||
|
foreach ($this->_authenticators as $authenticator) {
|
||
|
if (strtolower($authenticator->getAuthKeyword()) == $mode) {
|
||
|
return array($authenticator);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
throw new Swift_TransportException('Auth mode '.$mode.' is invalid');
|
||
|
}
|
||
|
}
|