| 1 | 
        
            2
         | 
        
            Manuela
         | 
        <?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 | 
        
         | 
        
         | 
        }
  |