mail(), error raro al intentar enviar mail !

Iniciado por Diabliyo, 23 Enero 2010, 16:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

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
Código (php) [Seleccionar]
<?php
function enviar_correo$to$asunto$modo$enlace$adjunto$from$log$link_custom )
{
$boundarymd5(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_typeobtener_extencion_stream_archivo($adjunto); //obtenemos tipo archivo

$fpfopen"uploads/".$archivo"r" ); //abrimos archivo
$buffread$fpfilesize("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;
}
?>


Castg!

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:

Código (php) [Seleccionar]
//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:

Código (php,4) [Seleccionar]
//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...

Diabliyo

#2
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:

Código (php) [Seleccionar]
//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:

Código (php,4) [Seleccionar]
//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 ?

Castg!

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)

Diabliyo

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 ?