2014-09-25 14:18:57 +02:00
|
|
|
<?php
|
2020-10-13 15:08:42 +02:00
|
|
|
|
2014-09-25 14:18:57 +02:00
|
|
|
/**
|
|
|
|
* This uses the SMTP class alone to check that a connection can be made to an SMTP server,
|
|
|
|
* authenticate, then disconnect
|
|
|
|
*/
|
2016-04-22 19:13:15 +02:00
|
|
|
|
|
|
|
//Import the PHPMailer SMTP class into the global namespace
|
|
|
|
use PHPMailer\PHPMailer\SMTP;
|
|
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
|
|
|
|
require '../vendor/autoload.php';
|
2014-09-25 14:18:57 +02:00
|
|
|
|
|
|
|
//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');
|
|
|
|
|
|
|
|
//Create a new SMTP instance
|
2020-10-13 15:08:42 +02:00
|
|
|
$smtp = new SMTP();
|
2014-09-25 14:18:57 +02:00
|
|
|
|
|
|
|
//Enable connection-level debug output
|
|
|
|
$smtp->do_debug = SMTP::DEBUG_CONNECTION;
|
|
|
|
|
|
|
|
try {
|
2016-03-29 10:28:12 +02:00
|
|
|
//Connect to an SMTP server
|
|
|
|
if (!$smtp->connect('mail.example.com', 25)) {
|
|
|
|
throw new Exception('Connect failed');
|
|
|
|
}
|
|
|
|
//Say hello
|
|
|
|
if (!$smtp->hello(gethostname())) {
|
2016-04-07 09:24:49 +02:00
|
|
|
throw new Exception('EHLO failed: ' . $smtp->getError()['error']);
|
2016-03-29 10:28:12 +02:00
|
|
|
}
|
|
|
|
//Get the list of ESMTP services the server offers
|
|
|
|
$e = $smtp->getServerExtList();
|
|
|
|
//If server can do TLS encryption, use it
|
2016-07-06 09:29:37 +02:00
|
|
|
if (is_array($e) && array_key_exists('STARTTLS', $e)) {
|
2016-03-29 10:28:12 +02:00
|
|
|
$tlsok = $smtp->startTLS();
|
|
|
|
if (!$tlsok) {
|
2016-04-07 09:24:49 +02:00
|
|
|
throw new Exception('Failed to start encryption: ' . $smtp->getError()['error']);
|
2016-03-29 10:28:12 +02:00
|
|
|
}
|
|
|
|
//Repeat EHLO after STARTTLS
|
|
|
|
if (!$smtp->hello(gethostname())) {
|
2016-04-07 09:24:49 +02:00
|
|
|
throw new Exception('EHLO (2) failed: ' . $smtp->getError()['error']);
|
2016-03-29 10:28:12 +02:00
|
|
|
}
|
|
|
|
//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)
|
2016-07-06 09:29:37 +02:00
|
|
|
if (is_array($e) && array_key_exists('AUTH', $e)) {
|
2016-03-29 10:28:12 +02:00
|
|
|
if ($smtp->authenticate('username', 'password')) {
|
2019-10-08 13:35:03 +02:00
|
|
|
echo 'Connected ok!';
|
2014-09-25 14:18:57 +02:00
|
|
|
} else {
|
2016-04-07 09:24:49 +02:00
|
|
|
throw new Exception('Authentication failed: ' . $smtp->getError()['error']);
|
2014-09-25 14:18:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception $e) {
|
2016-03-29 10:28:12 +02:00
|
|
|
echo 'SMTP error: ' . $e->getMessage(), "\n";
|
2014-09-25 14:18:57 +02:00
|
|
|
}
|
|
|
|
//Whatever happened, close the connection.
|
2019-10-08 13:35:03 +02:00
|
|
|
$smtp->quit();
|