12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?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);
|