Cita: No encuentro el error por más vueltas que le dé, he hecho mil cambios y no consigo que ande.
Yo en ningún momento te he dicho que hagas "cambios". Te he dicho que pruebes parte a parte. Eso se hace simplemente separando cada bloque de ejecución en diferentes scripts y probando que corra sin errores.
Vamos a ver si se entiende: Primero prueba eliminando todo el envío y veamos:
Código PHP:
Ver original<?php
$query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
}
else
{echo "La consulta no devolvió datos.";}
?>
Con eso verificas si efectivamente devuelve los datos esperados, o retorna vacía.
Una vez que eso se prueba, le agregas la siguiente fase, verificando cómo toma los datos de la tabla:
Código PHP:
Ver original<?php
$query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
$imagen = $_POST['imagen'];
$html = "aquí va el contenido";
$cabeceras = 'MIME-Version: 1.0' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$cabeceras .= 'To: $email' . "\r\n";
$cabeceras .= 'From: $email ' . "\n";
$cabeceras .= 'Bcc:';
foreach ($Clientes as $mails) {
$cabeceras .= $mails['txtEmail'].",";
}
$cabeceras .= "\r\n";
}
?>
Recién en ese punto se puede hacer una prueba más integral. Y aclaro que en este lugar estoy sacando basura que estás poniendo sin ningún sentido, y cambiando cosas
mal colocadas:
Código PHP:
Ver original<?php
// Por cierto, aquí no está la conexión, por lo que quiero suponer
// que este codigo no está completo...
$query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
// esto no tiene ningún uso. No tengo idea de para qué lo pones.
// $totalRows_Clientes = mysql_num_rows($Clientes);
// Estos datos no existen en este punto. Es simple basura en el código.
// $nombre = $row_Clientes['txtNombre'];
// $apellidos = $row_Clientes['txtApellidos'];
// $email_clientes = $row_Clientes['txtEmail'];
$imagen = $_POST['imagen'];
// Esto es redundante. Carece de utilidad.
//$asunto = $titulo;
// Voy a suponer que es una prueba...
$html = "aquí va el contenido";
$cabeceras = 'MIME-Version: 1.0' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$cabeceras .= 'To: $email' . "\r\n";
$cabeceras .= 'From: $email ' . "\n";
$cabeceras .= 'Bcc:';
foreach ($Clientes as $mails) {
$cabeceras .= $mails['txtEmail'].",";
}
$cabeceras .= "\r\n";
if (mail($email, $titulo, $html, $cabeceras)) { echo "E-mail enviado exitosamente";
// Vamos a cancelar todo lo siguiente hasta que se haga la prueba completa.
// echo '<script language="JavaScript" type="text/javascript">
//<![CDATA[
//alert("Mensaje enviado!");
//]]>
//</script>
//<SCRIPT LANGUAGE=javascript>
// window.history.go(-1)
//</SCRIPT>
//';
} else {
echo 'Error!';
}
}
// Esto estaba mal colocado.
?>
¿Se va entendiendo cómo se debuggea?
La cosa no pasa por "cambiar" el código, sino simplemente verificarlo, que no es lo mismo.
Ignoraré el resto de los comentarios. No vienen al caso y no aportan nada. Sólo demuestran falta de tolerancia, y que no has tenido mínimamente en cuenta todo lo que he intentado para ayudarte. Que no fue poco.