"Support STARTTLS when doing a ping mail"
This commit is contained in:
Wytze van der Raay 2014-12-05 09:05:04 +00:00
parent ece0f2b8ee
commit 8477354c33

View file

@ -555,28 +555,77 @@
foreach($mxhosts as $key => $domain)
{
$fp = @fsockopen($domain,25,$errno,$errstr,5);
$fp_opt = array(
'ssl' => array(
'verify_peer' => false, // Opportunistic Encryption
)
);
$fp_ctx = stream_context_create($fp_opt);
$fp = @stream_socket_client("tcp://$domain:25",$errno,$errstr,5,STREAM_CLIENT_CONNECT,$fp_ctx);
if($fp)
{
stream_set_blocking($fp, true);
$line = fgets($fp, 4096);
while(substr($line, 0, 4) == "220-")
$line = fgets($fp, 4096);
if(substr($line, 0, 3) != "220")
continue;
fputs($fp, "HELO www.cacert.org\r\n");
$line = fgets($fp, 4096);
while(substr($line, 0, 3) == "220")
$has_starttls = false;
do {
$line = fgets($fp, 4096);
if(substr($line, 0, 3) != "250")
} while(substr($line, 0, 4) == "220-");
if(substr($line, 0, 3) != "220") {
fclose($fp);
continue;
fputs($fp, "MAIL FROM:<returns@cacert.org>\r\n");
$line = fgets($fp, 4096);
}
if(substr($line, 0, 3) != "250")
fputs($fp, "EHLO www.cacert.org\r\n");
do {
$line = fgets($fp, 4096);
$has_starttls |= substr(trim($line),4) == "STARTTLS";
} while(substr($line, 0, 4) == "250-");
if(substr($line, 0, 3) != "250") {
fclose($fp);
continue;
}
if($has_starttls) {
fputs($fp, "STARTTLS\r\n");
do {
$line = fgets($fp, 4096);
} while(substr($line, 0, 4) == "220-");
if(substr($line, 0, 3) != "220") {
fclose($fp);
continue;
}
stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
fputs($fp, "EHLO www.cacert.org\r\n");
do {
$line = fgets($fp, 4096);
} while(substr($line, 0, 4) == "250-");
if(substr($line, 0, 3) != "250") {
fclose($fp);
continue;
}
}
fputs($fp, "MAIL FROM:<returns@cacert.org>\r\n");
do {
$line = fgets($fp, 4096);
} while(substr($line, 0, 4) == "250-");
if(substr($line, 0, 3) != "250") {
fclose($fp);
continue;
}
fputs($fp, "RCPT TO:<$email>\r\n");
$line = trim(fgets($fp, 4096));
do {
$line = fgets($fp, 4096);
} while(substr($line, 0, 4) == "250-");
if(substr($line, 0, 3) != "250") {
fclose($fp);
continue;
}
fputs($fp, "QUIT\r\n");
fclose($fp);