Friday, 6 October 2017

email - PHP mail() doesn’t send to some accounts



I’m having problems with mailing. I have this code:




$dni = "123456";
$nombre = "dani";
$email = "abcd@gmail.com";

$header = 'De: ' . $email . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", con dni " . $dni . " \r\n";

$mensaje .= "Su e-mail es: " . $email . " \r\n";
$mensaje .= "Mensaje: mensaje de prueba \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '1234@gmail.com,1234@innova.com,1234@educacion.net';
$asunto = '[Mensaje de Web]';

if (mail($para, $asunto, $mensaje, $header))
echo 'Mensaje enviado correctamente';
else

echo 'Error en el envio';
?>


This script print “Mensaje enviado correctamente” in the screen, and it sends well to Gmail account, and innova.com account, but the mail doesn’t arrive to educacion.net account.


Answer



Some email/domains have blocked PHP form emails, I'm surprised Gmail is working, usually you have to apply to be able to receive PHP forms.



You'll need to add your smtpServer connection and call in this function when you want to be able to send PHP emails to whomever you need.





function authgMail($from, $namefrom, $to, $nameto, $subject, $message) {

$smtpServer = "mail.domain.com"; //ip address of the mail server. This can also be the local domain name
$port = "25"; // should be 25 by default, but needs to be whichever port the mail server will be using for smtp
$timeout = "45"; // typical timeout. try 45 for slow servers
$username = "yourusername"; // the login for your smtp
$password = "yourpassword"; // the password for your smtp
$localhost = "localhost"; // Defined for the web server. Since this is where we are gathering the details for the email

$newLine = "\r\n"; // aka, carrage return line feed. var just for newlines in MS
$secure = 0; // change to 1 if your server is running under SSL

//connect to the host and port
$smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout);
$smtpResponse = fgets($smtpConnect, 4096);
if(empty($smtpConnect)) {
$output = "Failed to connect: $smtpResponse";
echo $output;
return $output;

}
else {
//$logArray['connection'] = "

Connected to: $smtpResponse";
//echo "

connection accepted
".$smtpResponse."

Continuing

";
}

//you have to say HELO again after TLS is started
fputs($smtpConnect, "HELO $localhost". $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['heloresponse2'] = "$smtpResponse";

//request for auth login
fputs($smtpConnect,"AUTH LOGIN" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authrequest'] = "$smtpResponse";

//send the username
fputs($smtpConnect, base64_encode($username) . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authusername'] = "$smtpResponse";


//send the password
fputs($smtpConnect, base64_encode($password) . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['authpassword'] = "$smtpResponse";

//email from
fputs($smtpConnect, "MAIL FROM: <$from>" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['mailfromresponse'] = "$smtpResponse";


//email to
fputs($smtpConnect, "RCPT TO: <$to>" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['mailtoresponse'] = "$smtpResponse";

//the email
fputs($smtpConnect, "DATA" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['data1response'] = "$smtpResponse";


//construct headers
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
$headers .= "To: $nameto <$to>" . $newLine;
$headers .= "From: $namefrom <$from>" . $newLine;

//observe the . after the newline, it signals the end of message
fputs($smtpConnect, "To: $to\r\nFrom: $from\r\nSubject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['data2response'] = "$smtpResponse";


// say goodbye
fputs($smtpConnect,"QUIT" . $newLine);
$smtpResponse = fgets($smtpConnect, 4096);
$logArray['quitresponse'] = "$smtpResponse";
$logArray['quitcode'] = substr($smtpResponse,0,3);
fclose($smtpConnect);
//a return value of 221 in $retVal["quitcode"] is a success
return($logArray);
}


No comments:

Post a Comment

casting - Why wasn&#39;t Tobey Maguire in The Amazing Spider-Man? - Movies &amp; TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...