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 )
{
$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;
}
?>


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 ?