Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support google XOAUTH2 authentication Issues #350 - Added Code #421

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Next Next commit
XOAUTH Changes
  • Loading branch information
sherryl4george committed May 17, 2015
commit c4d235922da6e83f2d559349ff6ee3212695ef7b
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: http: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": "http: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.