source-class-PHPMailerOAuth

It appears that you are using AdBlocking software. The cost of running this website is covered by advertisements. If you like it please feel free to a small amount of money to secure the future of this website.
Overview

Classes

Interfaces

Exceptions

Functions

  1: <?php
  2: /**
  3:  * PHPMailer - PHP email creation and transport class.
  4:  * PHP Version 5.4
  5:  * @package PHPMailer
  6:  * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
  7:  * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
  8:  * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
  9:  * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 10:  * @author Brent R. Matzelle (original founder)
 11:  * @copyright 2012 - 2014 Marcus Bointon
 12:  * @copyright 2010 - 2012 Jim Jagielski
 13:  * @copyright 2004 - 2009 Andy Prevost
 14:  * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 15:  * @note This program is distributed in the hope that it will be useful - WITHOUT
 16:  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 17:  * FITNESS FOR A PARTICULAR PURPOSE.
 18:  */
 19: 
 20: /**
 21:  * PHPMailerOAuth - PHPMailer subclass adding OAuth support.
 22:  * @package PHPMailer
 23:  * @author @sherryl4george
 24:  * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
 25:  */
 26: class PHPMailerOAuth extends PHPMailer
 27: {
 28:     /**
 29:      * The OAuth user's email address
 30:      * @var string
 31:      */
 32:     public $oauthUserEmail = '';
 33: 
 34:     /**
 35:      * The OAuth refresh token
 36:      * @var string
 37:      */
 38:     public $oauthRefreshToken = '';
 39: 
 40:     /**
 41:      * The OAuth client ID
 42:      * @var string
 43:      */
 44:     public $oauthClientId = '';
 45: 
 46:     /**
 47:      * The OAuth client secret
 48:      * @var string
 49:      */
 50:     public $oauthClientSecret = '';
 51: 
 52:     /**
 53:      * An instance of the PHPMailerOAuthGoogle class.
 54:      * @var PHPMailerOAuthGoogle
 55:      * @access protected
 56:      */
 57:     protected $oauth = null;
 58: 
 59:     /**
 60:      * Get a PHPMailerOAuthGoogle instance to use.
 61:      * @return PHPMailerOAuthGoogle
 62:      */
 63:     public function getOAUTHInstance()
 64:     {
 65:         if (!is_object($this->oauth)) {
 66:             $this->oauth = new PHPMailerOAuthGoogle(
 67:                 $this->oauthUserEmail,
 68:                 $this->oauthClientSecret,
 69:                 $this->oauthClientId,
 70:                 $this->oauthRefreshToken
 71:             );
 72:         }
 73:         return $this->oauth;
 74:     }
 75: 
 76:     /**
 77:      * Initiate a connection to an SMTP server.
 78:      * Overrides the original smtpConnect method to add support for OAuth.
 79:      * @param array $options An array of options compatible with stream_context_create()
 80:      * @uses SMTP
 81:      * @access public
 82:      * @return bool
 83:      * @throws phpmailerException
 84:      */
 85:     public function smtpConnect($options = array())
 86:     {
 87:         if (is_null($this->smtp)) {
 88:             $this->smtp = $this->getSMTPInstance();
 89:         }
 90: 
 91:         if (is_null($this->oauth)) {
 92:             $this->oauth = $this->getOAUTHInstance();
 93:         }
 94: 
 95:         // Already connected?
 96:         if ($this->smtp->connected()) {
 97:             return true;
 98:         }
 99: 
100:         $this->smtp->setTimeout($this->Timeout);
101:         $this->smtp->setDebugLevel($this->SMTPDebug);
102:         $this->smtp->setDebugOutput($this->Debugoutput);
103:         $this->smtp->setVerp($this->do_verp);
104:         $hosts = explode(';', $this->Host);
105:         $lastexception = null;
106: 
107:         foreach ($hosts as $hostentry) {
108:             $hostinfo = array();
109:             if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
110:                 // Not a valid host entry
111:                 continue;
112:             }
113:             // $hostinfo[2]: optional ssl or tls prefix
114:             // $hostinfo[3]: the hostname
115:             // $hostinfo[4]: optional port number
116:             // The host string prefix can temporarily override the current setting for SMTPSecure
117:             // If it's not specified, the default value is used
118:             $prefix = '';
119:             $secure = $this->SMTPSecure;
120:             $tls = ($this->SMTPSecure == 'tls');
121:             if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
122:                 $prefix = 'ssl://';
123:                 $tls = false; // Can't have SSL and TLS at the same time
124:                 $secure = 'ssl';
125:             } elseif ($hostinfo[2] == 'tls') {
126:                 $tls = true;
127:                 // tls doesn't use a prefix
128:                 $secure = 'tls';
129:             }
130:             //Do we need the OpenSSL extension?
131:             $sslext = defined('OPENSSL_ALGO_SHA1');
132:             if ('tls' === $secure or 'ssl' === $secure) {
133:                 //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
134:                 if (!$sslext) {
135:                     throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
136:                 }
137:             }
138:             $host = $hostinfo[3];
139:             $port = $this->Port;
140:             $tport = (integer)$hostinfo[4];
141:             if ($tport > 0 and $tport < 65536) {
142:                 $port = $tport;
143:             }
144:             if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
145:                 try {
146:                     if ($this->Helo) {
147:                         $hello = $this->Helo;
148:                     } else {
149:                         $hello = $this->serverHostname();
150:                     }
151:                     $this->smtp->hello($hello);
152:                     //Automatically enable TLS encryption if:
153:                     // * it's not disabled
154:                     // * we have openssl extension
155:                     // * we are not already using SSL
156:                     // * the server offers STARTTLS
157:                     if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
158:                         $tls = true;
159:                     }
160:                     if ($tls) {
161:                         if (!$this->smtp->startTLS()) {
162:                             throw new phpmailerException($this->lang('connect_host'));
163:                         }
164:                         // We must resend HELO after tls negotiation
165:                         $this->smtp->hello($hello);
166:                     }
167:                     if ($this->SMTPAuth) {
168:                         if (!$this->smtp->authenticate(
169:                             $this->Username,
170:                             $this->Password,
171:                             $this->AuthType,
172:                             $this->Realm,
173:                             $this->Workstation,
174:                             $this->oauth
175:                         )
176:                         ) {
177:                             throw new phpmailerException($this->lang('authenticate'));
178:                         }
179:                     }
180:                     return true;
181:                 } catch (phpmailerException $exc) {
182:                     $lastexception = $exc;
183:                     $this->edebug($exc->getMessage());
184:                     // We must have connected, but then failed TLS or Auth, so close connection nicely
185:                     $this->smtp->quit();
186:                 }
187:             }
188:         }
189:         // If we get here, all connection attempts have failed, so close connection hard
190:         $this->smtp->close();
191:         // As we've caught all exceptions, just report whatever the last one was
192:         if ($this->exceptions and !is_null($lastexception)) {
193:             throw $lastexception;
194:         }
195:         return false;
196:     }
197: }
198: 
 

© 2004-2018 – Nicola Asuni - Tecnick.com - All rights reserved.
about - disclaimer - privacy