mirror of
https://github.com/silverstripe/silverstripe-environmentcheck
synced 2024-10-22 17:05:40 +02:00
74 lines
1.7 KiB
PHP
74 lines
1.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Checks if the SMTP connection configured through PHP.ini works as expected.
|
|
*
|
|
* Only checks socket connection with HELO command, not actually sending the email.
|
|
*/
|
|
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 array(
|
|
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 array(
|
|
EnvironmentCheck::ERROR,
|
|
sprintf("Invalid mail server response: %s", $response)
|
|
);
|
|
}
|
|
|
|
return array(EnvironmentCheck::OK, '');
|
|
}
|
|
}
|