Skip to content

Commit

Permalink
XOAUTH Changes
Browse files Browse the repository at this point in the history
  • Loading branch information
sherryl4george committed May 17, 2015
1 parent d2b8b99 commit c4d2359
Show file tree
Hide file tree
Showing 323 changed files with 36,542 additions and 7 deletions.
27 changes: 21 additions & 6 deletions class.phpmailer.php
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,18 @@ class PHPMailer
* @type string
*/
public $XMailer = '';


/**
* Only For XOAUTH - Google
* Options: An empty string for PHPMailer default, Enter the email used to get access token
* @type string
*/
public $UserEmail = '';
public $RefreshToken = '';
public $ClientId = '';
public $ClientSecret = '';


/**
* An instance of the SMTP sender class.
* @type SMTP
Expand Down Expand Up @@ -1392,11 +1403,15 @@ public function smtpConnect($options = array())
}
if ($this->SMTPAuth) {
if (!$this->smtp->authenticate(
$this->Username,
$this->Password,
$this->AuthType,
$this->Realm,
$this->Workstation
$this->Username,
$this->Password,
$this->AuthType,
$this->Realm,
$this->Workstation,
$this->UserEmail,
$this->RefreshToken,
$this->ClientId,
$this->ClientSecret
)
) {
throw new phpmailerException($this->lang('authenticate'));
Expand Down
28 changes: 27 additions & 1 deletion class.smtp.php
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,11 @@ public function authenticate(
$password,
$authtype = null,
$realm = '',
$workstation = ''
$workstation = '',
$useremail='',
$refreshtoken='',
$clientid = '',
$clientsecret= ''
) {
if (!$this->server_caps) {
$this->setError('Authentication is not allowed before HELO/EHLO');
Expand Down Expand Up @@ -436,6 +440,28 @@ public function authenticate(
return false;
}
break;
case 'XOAUTH':

//To be refined
require 'extras/oauth2/vendor/autoload.php';

$refreshToken = $refreshtoken;

$provider = new League\OAuth2\Client\Provider\Google([
'clientId' => $clientid,
'clientSecret' => $clientsecret
]);

$grant = new \League\OAuth2\Client\Grant\RefreshToken();
$TOKEN = $provider->getAccessToken($grant, ['refresh_token' => $refreshToken]);

$oauth = base64_encode("user=" . $useremail . "\001auth=Bearer " . $TOKEN . "\001\001");

// Start authentication
if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
return false;
}
break;
case 'NTLM':
/*
* ntlm_sasl_client.php
Expand Down
84 changes: 84 additions & 0 deletions examples/gmail_xoauth.phps
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?php
/**
* This example shows settings to use when sending via Google's Gmail servers.
*/

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require 'PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer;

//Tell PHPMailer to use SMTP
$mail->isSMTP();

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;

//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';

//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';

//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;

//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';

//Whether to use SMTP authentication
$mail->SMTPAuth = true;

//Set AuthTYpe
$mail->AuthType = 'XOAUTH';

//UserEmail to use for SMTP authentication - Use the same Email used in Google Developer Console
$mail->UserEmail = "[email protected]";

//Obtained From Google Developer Console
$mail->ClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com";

//Obtained From Google Developer Console
$mail->ClientSecret = "RANDOMCHARS-----lGyjPcRtvP";

//Obtained By running get_oauth_token.php after setting up APP in Google Developer Console.
//Set Redirect URI in Developer Console as [https/http]:https://<yourdomain>/<folder>/get_oauth_token.php
// eg: https://localhost/phpmail/get_oauth_token.php
$mail->RefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0";

//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'First Last');

//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'First Last');

//Set who the message is to be sent to
$mail->addAddress('[email protected]', 'John Doe');

//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';

//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));

//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');

//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>
35 changes: 35 additions & 0 deletions extras/oauth2/composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "league/oauth2-client",
"description": "OAuth 2.0 Client Library",
"license": "MIT",
"require": {
"php": ">=5.4.0",
"guzzle/guzzle": "~3.7"

},

"keywords": [
"oauth",
"oauth2",
"authorization",
"authentication",
"idp",
"identity",
"sso",
"single sign on"
],
"authors": [
{
"name": "Alex Bilbie",
"email": "[email protected]",
"homepage": "https://www.alexbilbie.com",
"role": "Developer"
}
],
"autoload": {
"psr-4": {
"League\\OAuth2\\Client\\": "src/"
}
}
}

174 changes: 174 additions & 0 deletions extras/oauth2/composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit c4d2359

Please sign in to comment.