<?php
/**
 * This uses the SMTP class alone to check that a connection can be made to an SMTP server,
 * authenticate, then disconnect
 */

//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 SMTP instance
$smtp = new SMTP;

//Enable connection-level debug output
$smtp->do_debug SMTP::DEBUG_CONNECTION;

try {
    
//Connect to an SMTP server
    
if (!$smtp->connect('mail.example.com'25)) {
        throw new 
Exception('Connect failed');
    }
    
//Say hello
    
if (!$smtp->hello(gethostname())) {
        throw new 
Exception('EHLO failed: ' $smtp->getError()['error']);
    }
    
//Get the list of ESMTP services the server offers
    
$e $smtp->getServerExtList();
    
//If server can do TLS encryption, use it
    
if (is_array($e) && array_key_exists('STARTTLS'$e)) {
        
$tlsok $smtp->startTLS();
        if (!
$tlsok) {
            throw new 
Exception('Failed to start encryption: ' $smtp->getError()['error']);
        }
        
//Repeat EHLO after STARTTLS
        
if (!$smtp->hello(gethostname())) {
            throw new 
Exception('EHLO (2) failed: ' $smtp->getError()['error']);
        }
        
//Get new capabilities list, which will usually now include AUTH if it didn't before
        
$e $smtp->getServerExtList();
    }
    
//If server supports authentication, do it (even if no encryption)
    
if (is_array($e) && array_key_exists('AUTH'$e)) {
        if (
$smtp->authenticate('username''password')) {
            echo 
"Connected ok!";
        } else {
            throw new 
Exception('Authentication failed: ' $smtp->getError()['error']);
        }
    }
} catch (
Exception $e) {
    echo 
'SMTP error: ' $e->getMessage(), "\n";
}
//Whatever happened, close the connection.
$smtp->quit(true);