silverstripe-environmentcheck/src/Checks/SMTPConnectCheck.php
Robbie Averill b9af2d0734 FIX Update config API, Logger alias, dotenv config, remove PHP 5.5, other fixes
Remove PHP 5.5 from Travis configuration. Dotenv used for environment management now,
examples and tests updated to use putenv instead of define. Logger alias update to
LoggerInterface. Update mutable config API calls. Replace array declaration with
short version: []. Update license year.
2017-05-04 16:11:25 +12:00

80 lines
1.8 KiB
PHP

<?php
namespace SilverStripe\EnvironmentCheck\Checks;
use SilverStripe\EnvironmentCheck\EnvironmentCheck;
/**
* Checks if the SMTP connection configured through PHP.ini works as expected.
*
* Only checks socket connection with HELO command, not actually sending the email.
*
* @package environmentcheck
*/
class SMTPConnectCheck implements EnvironmentCheck
{
/**
* @var string
*/
protected $host;
/**
* @var int
*/
protected $port;
/**
* Timeout (in seconds).
*
* @var int
*/
protected $timeout;
/**
* @param null|string $host
* @param null|int $port
* @param int $timeout
*/
public function __construct($host = null, $port = null, $timeout = 15)
{
$this->host = ($host) ? $host : ini_get('SMTP');
if (!$this->host) {
$this->host = 'localhost';
}
$this->port = ($port) ? $port : ini_get('smtp_port');
if (!$this->port) {
$this->port = 25;
}
$this->timeout = $timeout;
}
/**
* {@inheritDoc}
*
* @return array
*/
public function check()
{
$f = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if (!$f) {
return [
EnvironmentCheck::ERROR,
sprintf("Couldn't connect to SMTP on %s:%s (Error: %s %s)", $this->host, $this->port, $errno, $errstr)
];
}
fwrite($f, "HELO its_me\r\n");
$response = fread($f, 26);
if (substr($response, 0, 3) != '220') {
return [
EnvironmentCheck::ERROR,
sprintf('Invalid mail server response: %s', $response)
];
}
return [EnvironmentCheck::OK, ''];
}
}