"Support STARTTLS when doing a ping mail"
pull/1/head
Wytze van der Raay 10 years ago
parent ece0f2b8ee
commit 8477354c33

@ -555,28 +555,77 @@
foreach($mxhosts as $key => $domain) 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) if($fp)
{ {
stream_set_blocking($fp, true);
$line = fgets($fp, 4096); $has_starttls = false;
while(substr($line, 0, 4) == "220-")
$line = fgets($fp, 4096); do {
if(substr($line, 0, 3) != "220") $line = fgets($fp, 4096);
} while(substr($line, 0, 4) == "220-");
if(substr($line, 0, 3) != "220") {
fclose($fp);
continue; continue;
fputs($fp, "HELO www.cacert.org\r\n"); }
$line = fgets($fp, 4096);
while(substr($line, 0, 3) == "220") fputs($fp, "EHLO www.cacert.org\r\n");
do {
$line = fgets($fp, 4096); $line = fgets($fp, 4096);
if(substr($line, 0, 3) != "250") $has_starttls |= substr(trim($line),4) == "STARTTLS";
} while(substr($line, 0, 4) == "250-");
if(substr($line, 0, 3) != "250") {
fclose($fp);
continue; continue;
fputs($fp, "MAIL FROM:<returns@cacert.org>\r\n"); }
$line = fgets($fp, 4096);
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;
}
}
if(substr($line, 0, 3) != "250") 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; continue;
}
fputs($fp, "RCPT TO:<$email>\r\n"); 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"); fputs($fp, "QUIT\r\n");
fclose($fp); fclose($fp);

Loading…
Cancel
Save