Hola:
Tengo un pequeno script en PHP que uso para enviar boletines de noticias, avisos, renocaviones, actualiciones, etc, etc... a los usuarios de mi Base de Datos, pero como son muchos y el SMTP me limita a solo 500 mails diarios, y ademas no me permite ejecutar un script PHP por mas de 1 minutos, tuve que modificar mi script para que me envie de 50 en 50, y asi alcanzar el limite de 500.
Pero curiosamente, algunas veces el script simplemente se frena y no me da ningun resultado, ya que cuando los 50 mails se envian correctamente, este me lo indica, pero a veces simplemente se queda sin mostrar mensaje :(.... Cabe mencionar que uso AJAX para el envio de los mails.
Las veces que falla, sucede una de estas dos situaciones:
1- No muestra resultado de satisfaccion y el script simplemente se frena.
2- Me muestra este error: "No recipient addresses found in header".
La funcion que uso para envio de mails.
Pastebind: http://pastebin.com/d369f3f37 (http://pastebin.com/d369f3f37)
<?php
function enviar_correo( $to, $asunto, $modo, $enlace, $adjunto, $from, $log, $link_custom )
{
$boundary= md5(time()); //valor boundary
$htmlalt_boundary= $boundary. "_htmlalt"; //boundary suplementario
$subject=$asunto; //titulo del correo
//cabeceras para enviar correo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
$headers .= "From: ". $from. "\r\n"; //correo del que lo envia
//incia cuerpo del mensaje que se visualiza
$cuerpo="--". $boundary. "\r\n";
$cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $htmlalt_boundary. "\"\r\n\r\n"; //contenido alternativo: texto o html
$cuerpo .= "--". $htmlalt_boundary. "\r\n";
$cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";
$cuerpo .= "Te escribimos para informarte que se a publicado una nueva noticia en el sitio <b>". $_SERVER['HTTP_HOST']. "</b>, ";
$cuerpo .= "gracias por preferir nuestra comunidad y esperamos que este nuevo <b>servicio informativo</b> te sea de ayuda para enterarte ";
$cuerpo .= "de una forma rapida y facil de las novedades de nuestro sitio web.";
$cuerpo .= "\r\n\r\n";
$cuerpo .= "--". $htmlalt_boundary. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar
//archivos adjuntos
if( strcmp($adjunto, "0") && strcmp($adjunto, "vacio") )
{
set_time_limit(600);
$archivo= $adjunto;
$buf_type= obtener_extencion_stream_archivo($adjunto); //obtenemos tipo archivo
$fp= fopen( "uploads/".$archivo, "r" ); //abrimos archivo
$buf= fread( $fp, filesize("uploads/".$archivo) ); //leemos archivo completamente
fclose($fp); //cerramos apuntador;
$cuerpo .= "--". $boundary. "\r\n";
$cuerpo .= "Content-Type: ". $buf_type. "; name=\"". $archivo. "\"\r\n"; //envio directo de datos
$cuerpo .= "Content-Transfer-Encoding: base64\r\n";
$cuerpo .= "Content-Disposition: attachment; filename=\"". $archivo. "\"\r\n\r\n";
$cuerpo .= chunk_split(base64_encode($buf)). "\r\n\r\n";
}
$cuerpo .= "--". $boundary. "--\r\n\r\n";
//funcion para enviar correo
set_time_limit(600); //establecemos tiempo de ejecucion scrtip a 10 minutos
if( mail($to, $subject, $cuerpo, $headers) == FALSE )
return 0;
return 1;
}
?>
mira, no conozco mucho la funcion, pero es medio logico, te dice que el problemas es que no se encontro el "recipient" en el "header", entonces, elproblema sabemops donde esta:
//cabeceras para enviar correo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
$headers .= "From: ". $from. "\r\n"; //correo del que lo envia
y sabemos cual es, que no hay recipient (parece recipiente, pero como para mandar un mail no se usa recipiente debe ser el quelo recibe, osea "To:").
entonces esto se arregla asi:
//cabeceras para enviar correo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
$header .="From: ". $from. "\r\nReply-To: ".$to."\nX-Mailer: PHP/";
entendes cual fue le problema? decime si funco o no...
Cita de: cɐstg en 24 Enero 2010, 06:32 AM
mira, no conozco mucho la funcion, pero es medio logico, te dice que el problemas es que no se encontro el "recipient" en el "header", entonces, elproblema sabemops donde esta:
//cabeceras para enviar correo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
$headers .= "From: ". $from. "\r\n"; //correo del que lo envia
y sabemos cual es, que no hay recipient (parece recipiente, pero como para mandar un mail no se usa recipiente debe ser el quelo recibe, osea "To:").
entonces esto se arregla asi:
//cabeceras para enviar correo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
$header .="From: ". $from. "\r\nReply-To: ".$to."\nX-Mailer: PHP/";
entendes cual fue le problema? decime si funco o no...
Primeramente gracias por responder y tu tiempo....
Bueno, entonces solo falto agregar el
Reply-To, pero respecto a
X-Mailer: PHP, eso debo ponerlo forzosamente ?, puedo omitir eso ?.
Por otro parte, me sigue la duda de porque anteriormente no recivia error alguno, sino es hasta ahorita, y estamos hablando que tengo mas de 24 meses usando mi sistema de envio de mails para mi web y jamas habia obtenido dicho error, solamente que a veces el script se frenaba (uso AJAX), pero fuera de eso no salia dicho error :(.... Alguna idea ?
Por favor confirmame si es necesario o no tambien agregar lo de
X-Mailer: PHP, ya que tengo en mente
no agregarlo, pero primero quiero tener tu opinion antes de hacer las pruebas ! :D
Por ultimo... en
Reply-To, debo anexar lo que YO TENGO en la variable
$to ?... Ya que en dicha variable tengo el correo de la persona a quien le voy a enviar el mail, y pues me imagino que
Reply-To se usaria en caso de que el usuario contestara al mail, no ?
hagamos algo, porq no lo probas? primero sacale lo del x-mailer, y proba entre dos correos tuyos, lo de replay-to te lo explico asi:
from = desde (correo emisor)
to = a, hacia donde (correo receptor)
Cita de: cɐstg en 25 Enero 2010, 05:59 AM
hagamos algo, porq no lo probas? primero sacale lo del x-mailer, y proba entre dos correos tuyos, lo de replay-to te lo explico asi:
from = desde (correo emisor)
to = a, hacia donde (correo receptor)
Aun sigue la duda men...
Mira, en mis funciones lo manejo asi las variables:
$from --> tengo el mail mio, del emisor vaya.
$to --> tengo el mail del receptor.
Y Reply-To ???.... se supone que deberia poner el $from en esta cabecera, no ?... aparte, no se supone que si NO envio dicha cabecera, aun asi deberia enviarse el mail y si el gestor de correo no detecta una cabecera Reply-To entonces asume que cualquier Replay (contestacion) lo haria al mail que este escrito en la cabecera To:... que no ?