forked from Synchro/PHPMailer
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d2b8b99
commit b4cf92e
Showing
8 changed files
with
491 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
|
||
require_once 'vendor/autoload.php'; | ||
|
||
class OAuth { | ||
|
||
private $oauthUserEmail = ''; | ||
private $oauthRefreshToken = ''; | ||
private $oauthClientId = ''; | ||
private $oauthClientSecret = ''; | ||
|
||
public function __construct($UserEmail, | ||
$ClientSecret, | ||
$ClientId, | ||
$RefreshToken | ||
) { | ||
$this->oauthClientId = $ClientId; | ||
$this->oauthClientSecret = $ClientSecret; | ||
$this->oauthRefreshToken = $RefreshToken; | ||
$this->oauthUserEmail = $UserEmail; | ||
} | ||
|
||
private function getProvider() { | ||
return new League\OAuth2\Client\Provider\Google([ | ||
'clientId' => $this->oauthClientId, | ||
'clientSecret' => $this->oauthClientSecret | ||
]); | ||
} | ||
|
||
private function getGrant(){ | ||
return new \League\OAuth2\Client\Grant\RefreshToken(); | ||
} | ||
|
||
private function getToken(){ | ||
$provider = $this->getProvider(); | ||
$grant = $this->getGrant(); | ||
return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]); | ||
} | ||
|
||
public function getOauth64(){ | ||
$token = $this->getToken(); | ||
echo $this->oauthUserEmail; | ||
return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001"); | ||
} | ||
|
||
|
||
} | ||
?> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
<?php | ||
|
||
class PHPMailer54 extends PHPMailer { | ||
|
||
public $oauthUserEmail = ''; | ||
public $oauthRefreshToken = ''; | ||
public $oauthClientId = ''; | ||
public $oauthClientSecret = ''; | ||
|
||
/** | ||
* An instance of the SMTP sender class. | ||
* @type SMTP | ||
* @access protected | ||
*/ | ||
protected $oauth = null; | ||
|
||
public function __construct() | ||
{ | ||
parent::__construct($exceptions = false); | ||
} | ||
|
||
/** | ||
* Destructor. | ||
*/ | ||
public function __destruct() | ||
{ | ||
//Close any open SMTP connection nicely | ||
parent::__destruct(); | ||
} | ||
|
||
/** | ||
* Get an instance to use for SMTP operations. | ||
* Override this function to load your own SMTP implementation | ||
* @return SMTP | ||
*/ | ||
public function getOAUTHInstance() | ||
{ | ||
if (!is_object($this->oauth)) { | ||
$this->oauth = new OAuth($this->oauthUserEmail, | ||
$this->oauthClientSecret, | ||
$this->oauthClientId, | ||
$this->oauthRefreshToken | ||
); | ||
} | ||
return $this->oauth; | ||
} | ||
|
||
public function smtpConnect($options = array()) | ||
{ | ||
if (is_null($this->smtp)) { | ||
$this->smtp = $this->getSMTPInstance(); | ||
} | ||
|
||
if (is_null($this->oauth)) { | ||
$this->oauth = $this->getOAUTHInstance(); | ||
} | ||
|
||
// Already connected? | ||
if ($this->smtp->connected()) { | ||
return true; | ||
} | ||
|
||
$this->smtp->setTimeout($this->Timeout); | ||
$this->smtp->setDebugLevel($this->SMTPDebug); | ||
$this->smtp->setDebugOutput($this->Debugoutput); | ||
$this->smtp->setVerp($this->do_verp); | ||
$hosts = explode(';', $this->Host); | ||
$lastexception = null; | ||
|
||
foreach ($hosts as $hostentry) { | ||
$hostinfo = array(); | ||
if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) { | ||
// Not a valid host entry | ||
continue; | ||
} | ||
// $hostinfo[2]: optional ssl or tls prefix | ||
// $hostinfo[3]: the hostname | ||
// $hostinfo[4]: optional port number | ||
// The host string prefix can temporarily override the current setting for SMTPSecure | ||
// If it's not specified, the default value is used | ||
$prefix = ''; | ||
$secure = $this->SMTPSecure; | ||
$tls = ($this->SMTPSecure == 'tls'); | ||
if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) { | ||
$prefix = 'ssl://'; | ||
$tls = false; // Can't have SSL and TLS at the same time | ||
$secure = 'ssl'; | ||
} elseif ($hostinfo[2] == 'tls') { | ||
$tls = true; | ||
// tls doesn't use a prefix | ||
$secure = 'tls'; | ||
} | ||
//Do we need the OpenSSL extension? | ||
$sslext = defined('OPENSSL_ALGO_SHA1'); | ||
if ('tls' === $secure or 'ssl' === $secure) { | ||
//Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled | ||
if (!$sslext) { | ||
throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL); | ||
} | ||
} | ||
$host = $hostinfo[3]; | ||
$port = $this->Port; | ||
$tport = (integer)$hostinfo[4]; | ||
if ($tport > 0 and $tport < 65536) { | ||
$port = $tport; | ||
} | ||
if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { | ||
try { | ||
if ($this->Helo) { | ||
$hello = $this->Helo; | ||
} else { | ||
$hello = $this->serverHostname(); | ||
} | ||
$this->smtp->hello($hello); | ||
//Automatically enable TLS encryption if: | ||
// * it's not disabled | ||
// * we have openssl extension | ||
// * we are not already using SSL | ||
// * the server offers STARTTLS | ||
if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) { | ||
$tls = true; | ||
} | ||
if ($tls) { | ||
if (!$this->smtp->startTLS()) { | ||
throw new phpmailerException($this->lang('connect_host')); | ||
} | ||
// We must resend HELO after tls negotiation | ||
$this->smtp->hello($hello); | ||
} | ||
if ($this->SMTPAuth) { | ||
if (!$this->smtp->authenticate( | ||
$this->Username, | ||
$this->Password, | ||
$this->AuthType, | ||
$this->Realm, | ||
$this->Workstation, | ||
$this->oauth | ||
) | ||
) { | ||
throw new phpmailerException($this->lang('authenticate')); | ||
} | ||
} | ||
return true; | ||
} catch (phpmailerException $exc) { | ||
$lastexception = $exc; | ||
$this->edebug($exc->getMessage()); | ||
// We must have connected, but then failed TLS or Auth, so close connection nicely | ||
$this->smtp->quit(); | ||
} | ||
} | ||
} | ||
// If we get here, all connection attempts have failed, so close connection hard | ||
$this->smtp->close(); | ||
// As we've caught all exceptions, just report whatever the last one was | ||
if ($this->exceptions and !is_null($lastexception)) { | ||
throw $lastexception; | ||
} | ||
return false; | ||
} | ||
|
||
} | ||
|
||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,39 +1,43 @@ | ||
{ | ||
"name": "phpmailer/phpmailer", | ||
"type": "library", | ||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", | ||
"authors": [ | ||
"name": "phpmailer/phpmailer", | ||
"type": "library", | ||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", | ||
"authors": [ | ||
{ | ||
"name": "Marcus Bointon", | ||
"email": "phpmailer@synchromedia.co.uk" | ||
"name": "Marcus Bointon", | ||
"email": "phpmailer@synchromedia.co.uk" | ||
}, | ||
{ | ||
"name": "Jim Jagielski", | ||
"email": "jimjag@gmail.com" | ||
"name": "Jim Jagielski", | ||
"email": "jimjag@gmail.com" | ||
}, | ||
{ | ||
"name": "Andy Prevost", | ||
"email": "codeworxtech@users.sourceforge.net" | ||
"name": "Andy Prevost", | ||
"email": "codeworxtech@users.sourceforge.net" | ||
}, | ||
{ | ||
"name": "Brent R. Matzelle" | ||
"name": "Brent R. Matzelle" | ||
} | ||
], | ||
"require": { | ||
"php": ">=5.0.0" | ||
}, | ||
"require-dev": { | ||
], | ||
"require": { | ||
"php": ">=5.0.0", | ||
"league/oauth2-client": "0.10.*", | ||
"guzzle/guzzle": "~3.7" | ||
}, | ||
"require-dev": { | ||
"phpdocumentor/phpdocumentor": "*", | ||
"phpunit/phpunit": "4.3.*" | ||
}, | ||
"autoload": { | ||
"phpunit/phpunit": "4.3.*" | ||
}, | ||
"autoload": { | ||
"classmap": [ | ||
"class.phpmailer.php", | ||
"class.smtp.php", | ||
"class.pop3.php", | ||
"extras/EasyPeasyICS.php", | ||
"extras/ntlm_sasl_client.php" | ||
"class.phpmailer.php", | ||
"class.phpmailer54.php", | ||
"class.oauth.php", | ||
"class.smtp.php", | ||
"class.pop3.php", | ||
"extras/EasyPeasyICS.php", | ||
"extras/ntlm_sasl_client.php" | ||
] | ||
}, | ||
"license": "LGPL-2.1" | ||
} | ||
}, | ||
"license": "LGPL-2.1" | ||
} |
Oops, something went wrong.