I am trying to do a mail verification using telnet and php. The whole process words fine in the terminal, but when I use php shell_exec()
, it only runs upto the Telnet connection command. Once telnet is connected, the remaining telnet specific commands don't work anymore.
Is there some other way that we need to execute telnet using php?
UPDATE: I am trying to replicate this tutorial.
Here's my Code
public function mailtest(Request $request){
//Taking input email
$email = $request->input("email");
$divide = explode("@", $email);
//Find out the Domain
$server = $divide[1];
$response = shell_exec("nslookup -q=mx $server");
//Response of the nslookup
print_r($response);
$mailServerList = explode(PHP_EOL, $response);
$line = $mailServerList[4];
$serverArr = preg_split('/\s+/', $line);
$n = sizeof($serverArr);
$mailServer = $serverArr[$n-1];
//Printing out the mail server out of the nslookup response
print_r($mailServer);
//Executing Telnet command
$telnet = shell_exec("telnet $mailServer 25");
print_r("telnet response ".$telnet);
//Telnet Helo
$helo = shell_exec("Helo testing.com");
print_r("Helo response ".$helo);
//Telnet mail from
$from = shell_exec('mail from: testing@gmail.com');
print_r("MAil from response ".$from);
//Telnet RCPT to
$finalResponse = shell_exec("rcpt to: $email");
print_r("Mail to response ".$finalResponse);
}
And here's the response
Server: 10.0.80.11
Address: 10.0.80.11#53
Non-authoritative answer:
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
Authoritative answers can be found from:
gmail-smtp-in.l.google.com internet address = 173.194.64.27
gmail-smtp-in.l.google.com has AAAA address 2607:f8b0:4003:c02::1a
alt1.gmail-smtp-in.l.google.com internet address = 173.194.219.27
alt1.gmail-smtp-in.l.google.com has AAAA address 2607:f8b0:4002:c03::1b
alt4.gmail-smtp-in.l.google.com internet address = 64.233.190.26
alt4.gmail-smtp-in.l.google.com has AAAA address 2800:3f0:4003:c01::1b
alt3.gmail-smtp-in.l.google.com internet address = 74.125.141.26
alt3.gmail-smtp-in.l.google.com has AAAA address 2607:f8b0:400c:c06::1a
alt2.gmail-smtp-in.l.google.com internet address = 173.194.205.27
alt2.gmail-smtp-in.l.google.com has AAAA address 2607:f8b0:400d:c02::1b
gmail-smtp-in.l.google.com.telnet response Trying 2607:f8b0:4003:c02::1a...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
Helo response
MAil from response No message, no subject; hope that's ok
Mail to response
After taking some reference from @Lavi's answer, this is how I managed to solve the situation. fputs
did the trick, instead of fwrite
$connect = @fsockopen($mailServer, 25);
if($connect){
fputs ($connect , "HELO $mailServer\r\n");
$out = fgets ($connect, 1024);
$details .= $out."\n";
fputs ($connect , "MAIL FROM: <$fromemail>\r\n");
//$from = fgets ($connect, 1024);
fputs ($connect , "RCPT TO: <$toemail>\r\n");
//$to = fgets ($connect, 1024);
fputs ($connect , "QUIT");
fclose($connect);
}