Ver Mensaje Individual
  #23 (permalink)  
Antiguo 23/03/2014, 16:08
raulgranadosraul
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
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
  1. <?php
  2. mysql_select_db($database_db, $db);
  3. $query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
  4. $Clientes = mysql_query($query_Clientes, $db) or die(mysql_error());
  5. if (mysql_num_rows($Clientes) > 0) {
  6.     var_dump($Clientes);
  7. }
  8. else
  9.     {echo "La consulta no devolvió datos.";}
  10.     mysql_free_result($Clientes);
  11. ?>
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
  1. <?php
  2. mysql_select_db($database_db, $db);
  3. $query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
  4. $Clientes = mysql_query($query_Clientes, $db) or die(mysql_error());
  5. if (mysql_num_rows($Clientes) > 0) {
  6.     $email = '[email protected]';
  7.     $titulo= utf8_decode($_POST['titulo']);
  8.     $mensaje = nl2br(utf8_decode($_POST['mensaje']));
  9.     $imagen = $_POST['imagen'];
  10.     $html = "aquí va el contenido";
  11.  
  12.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  13.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  14.     $cabeceras .= 'To: $email' . "\r\n";
  15.     $cabeceras .= 'From: $email ' . "\n";
  16.     $cabeceras .= 'Bcc:';
  17.     foreach ($Clientes as $mails) {
  18.         $cabeceras .= $mails['txtEmail'].",";
  19.     }
  20.     $cabeceras .= "\r\n";
  21.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  22.     var_dump($cabeceras);
  23.     var_dump($Clientes);
  24.     var_dump($email );
  25.     var_dump($titulo);
  26.     var_dump($mensaje );
  27.     var_dump($html );
  28.  
  29. }
  30. mysql_free_result($Clientes);
  31. ?>

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
  1. <?php
  2. // Por cierto, aquí no está la conexión, por lo que quiero suponer
  3. // que este codigo no está completo...
  4. mysql_select_db($database_db, $db);
  5. $query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
  6. $Clientes = mysql_query($query_Clientes, $db) or die(mysql_error());
  7.  
  8. if (mysql_num_rows($Clientes) > 0) {
  9.     // esto no tiene ningún uso. No tengo idea de para qué lo pones.
  10.     // $totalRows_Clientes = mysql_num_rows($Clientes);
  11.     $email = '[email protected]';
  12.  
  13.     $titulo= utf8_decode($_POST['titulo']);
  14.     $mensaje = nl2br(utf8_decode($_POST['mensaje']));ç
  15.  
  16.     // Estos datos no existen en este punto. Es simple basura en el código.
  17.     // $nombre = $row_Clientes['txtNombre'];
  18.     // $apellidos = $row_Clientes['txtApellidos'];
  19.     // $email_clientes = $row_Clientes['txtEmail'];
  20.  
  21.     $imagen = $_POST['imagen'];
  22.  
  23.     // Esto es redundante. Carece de utilidad.
  24.     //$asunto = $titulo;
  25.  
  26.     // Voy a suponer que es una prueba...
  27.     $html = "aquí va el contenido";
  28.  
  29.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  30.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  31.     $cabeceras .= 'To: $email' . "\r\n";
  32.     $cabeceras .= 'From: $email ' . "\n";
  33.     $cabeceras .= 'Bcc:';
  34.     foreach ($Clientes as $mails) {
  35.         $cabeceras .= $mails['txtEmail'].",";
  36.     }
  37.     $cabeceras .= "\r\n";
  38.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  39.     var_dump($Clientes);
  40.     var_dump($cabeceras);
  41.     if (mail($email, $titulo, $html, $cabeceras)) {
  42.         echo "E-mail enviado exitosamente";
  43.         // Vamos a cancelar todo lo siguiente hasta que se haga la prueba completa.
  44. //        echo '<script language="JavaScript" type="text/javascript">
  45. //<![CDATA[
  46. //alert("Mensaje enviado!");
  47. //]]>
  48. //</script>
  49. //<SCRIPT LANGUAGE=javascript>
  50. //   window.history.go(-1)
  51. //</SCRIPT>
  52. //';
  53.     } else {
  54.         echo 'Error!';
  55.     }
  56.  
  57. }
  58. // Esto estaba mal colocado.
  59. mysql_free_result($Clientes);
  60.  
  61. ?>

¿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.
De veras, que aunque pienses que no lo he comprobado, si que lo he hecho, pero no consigo resultados.
La conexión está en un include, con eso no tengo problema. Además me duvuelve valores, pero sigue sin devolverme los emails de la base de datos.
Este es el resultado que me muestra en pantalla una vez enviado el email

array(3) { ["idNombre"]=> string(1) "1" ["txtNombre"]=> string(4) "Raul" ["txtEmail"]=> string(26) "[email protected]" } string(131) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To: $email From: MiEmpresa Bcc: X-Mailer: PHP/5.4.26"

Como ves aqui, no me da ningún resultado en BCC: que realmente es el que más me interesa..... o la parte que me interesa, porque enviar un email a un destinatario o a mas destinatarios con BCC lo se hacer, el problema se me presenta cuando tengo que enviar en Bcc con los resultados de la consulta de BD. Las líneas de código las voy probando y enviando a ver si recibe valores o no, y me hace el envío correctamente, pero solo a la dirección que tengo en $email. De la base de datos solo me recupera la primera línea, no me va foreach. Vuelvo a pegar el código:

Código PHP:
Ver original
  1. <?php
  2. //La conexión está en un include, siempre trabajo mis códigos así, está al principio de cada página.
  3. mysql_select_db($database_db, $db);
  4. $query_Clientes = "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
  5. $Clientes = mysql_query($query_Clientes, $db) or die(mysql_error());
  6. $row_Clientes = mysql_fetch_assoc($Clientes);
  7. $totalRows_Clientes = mysql_num_rows($Clientes);
  8.  
  9.  
  10.     $email = '[email protected]';
  11.     $titulo= utf8_decode($_POST['titulo']);
  12.     $mensaje = nl2br(utf8_decode($_POST['mensaje']));ç
  13.  
  14.     // Estos datos no son basura en el código. Los empleo para individualizar cada mensaje con el nombre y apellidos del cliente. Esto funciona perfectamente.
  15.     // $nombre = $row_Clientes['txtNombre'];
  16.     // $apellidos = $row_Clientes['txtApellidos'];
  17.     // $email_clientes = $row_Clientes['txtEmail'];
  18.  
  19.     $imagen = $_POST['imagen'];
  20.  
  21.     $html = "aquí va el contenido";
  22.  
  23.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  24.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  25.     $cabeceras .= 'To: $email' . "\r\n";
  26.     $cabeceras .= 'From: $email ' . "\n";
  27.     $cabeceras .= 'Bcc:';
  28.     foreach ($Clientes as $mails) {
  29.         $cabeceras .= $mails['txtEmail'].",";
  30.     }
  31.     $cabeceras .= "\r\n";
  32.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  33.     var_dump($Clientes);
  34.     var_dump($cabeceras);
  35.  
  36. if (mail($email,$asunto,$html,$cabeceras)) {
  37.     echo '<script language="JavaScript" type="text/javascript">
  38. //<![CDATA[
  39. alert("Mensaje enviado!");
  40. //]]>
  41. </script>
  42. <SCRIPT LANGUAGE=javascript>
  43. window.history.go(-1)
  44. </SCRIPT>
  45. ';
  46.   }
  47.   else {
  48.     echo 'Error!';
  49.   }
  50. mysql_free_result($Clientes);
  51. ?>