<?php
/**
 * Connecto to an SMTP and send the given message
 */

ini_set('default_socket_timeout', 3);
/*
$user = 'jothivaradha@kvcodes.com';
$pass = 'Honeykutty';
$host = 'ssl://sg3plcpnl0027.prod.sin3.secureserver.net';
//$host = 'ssl://email-smtp.us-east-1.amazonaws.com'; //Amazon SES
$port = 465;*/

$user = 'kvcodes@gmail.com';
$pass = 'kvcodes@123';
$host = 'ssl://mail.gmail.com';
//$host = 'ssl://email-smtp.us-east-1.amazonaws.com'; //Amazon SES
$port = 465;

$to = 'kvvaradha@gmail.com';
$from = 'kvcodes@gmail.com';
$subject = "test";
$body = 'test<br/>test';

//var_dump(smtp_mail2 ( $to, $from, $subject, $body, $user, $pass, $host, $port ));
function smtp_mail2($to, $from, $subject, $body, $user, $pass, $host, $port) {
	$message = implode ( "\r\n", array (
			'Subject: =?UTF-8?B?' . base64_encode ( $subject ) . '?=',
			'To: <' . $to . '>',
			'From: ' . $from,
			'MIME-Version: 1.0',
			'Content-Type: text/html; charset=utf-8',
			'Content-Transfer-Encoding: base64',
			"\r\n" . base64_encode ( $body )  // the (double) \r\n separate request headers from request body.
	) );
	$data = array (
			"EHLO " . parse_url ( $host, PHP_URL_HOST ),
			'AUTH LOGIN',
			base64_encode ( $user ),
			base64_encode ( $pass ),
			"MAIL FROM: <$from>",
			"RCPT TO: <$to>",
			'DATA',
			$message 
	);
	// $sock = fsockopen ( $host, $port, $errno, $errstr );
	$sslstuff = array (
			"ssl" => array (
					"verify_peer" => false,
					"verify_peer_name" => false 
				// "cafile" => "/path/to/bundle/cacert.pem",
				// "verify_peer"=> true,
				// "verify_peer_name"=> true,
			) 
	);
	$socket_write_all = function ($sock, $data) {
		$len = strlen ( $data );
		while ( $len > 0 ) {
			echo "writing...";
			$written = fwrite ( $sock, $data );
			if ($written === false) {
				throw new RuntimeException ( 'socket_write failed. errno: ' . socket_last_error ( $sock ) . '. error: ' . socket_strerror ( socket_last_error ( $sock ) ) );
			}
			$len -= $written;
			$data = substr ( $data, $written );
		}
		return; // all data written
	};
	$sock = stream_socket_client ( $host . ':' . $port, $errno, $errstr, 10, STREAM_CLIENT_CONNECT, stream_context_create ( $sslstuff ) );
	if (false === $sock) {
		throw new \RuntimeException ( 'failed to connect! errno: ' . $errno . '. errstr: ' . $errstr );
	}
	$debugMessageLog = array ();
	stream_set_blocking ( $sock, true );
	$welcomeMessage = fgets ( $sock );
	$debugMessageLog [] = array (
			'connect',
			$welcomeMessage 
	);
	// var_dump ( $welcomeMessage );
	foreach ( $data as $message ) {
		$socket_write_all ( $sock, $message . "\r\n" );
		$tmpFullResponse = '';
		while ( false !== ($tmpResponse = fgets ( $sock )) ) {
			var_dump ( $tmpResponse );
			$tmpFullResponse .= $tmpResponse;
		}
		$debugMessageLog [] = array (
				$message,
				$tmpFullResponse 
		);
		unset ( $tmpFullResponse, $tmpResponse, $message );
	}
	$socket_write_all ( $sock, "QUIT\r\n" );
	var_dump ( $debugMessageLog );
	return fclose ( $sock );

}