Ver Mensaje Individual
  #26 (permalink)  
Antiguo 23/03/2014, 19:04
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como enviar BCC a todos los contactos de mysql

Mira, para simplificar la cosa, y que se verifique que el tema es que el array no contiene lo que debería contener, vamos a hacer un experimento a fin de que puedas ver que la lógica propuesta del foreach() es correcta, y si el result contuviese datos, andaría...

Fui a crear un array de arrays, tal como sería el resultado de una consulta como la tuya. El ejemplo sería así:
Código PHP:
Ver original
  1. $Clientes = [['txtEmail' => "[email protected]"],
  2.          ['txtEmail' => "[email protected]"],
  3.          ['txtEmail' => "[email protected]"],
  4.          ['txtEmail' => "[email protected]"]];
  5.              
  6. foreach($Clientes as $mail){
  7.     echo $mail[txtEmail];
  8. }
  9.  
  10. $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  11.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  12.     $cabeceras .= 'To: $email' . "\r\n";
  13.     $cabeceras .= 'From: $email ' . "\n";
  14.     $cabeceras .= 'Bcc:';
  15.     foreach ($Clientes as $mails) {
  16.         $cabeceras .= $mails['txtEmail'].",";
  17.     }
  18.     $cabeceras .= "\r\n";
  19.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  20.     var_dump($Clientes);
  21.     var_dump($cabeceras);

La creación del array es algo desprolija (muestra algunos defectos), pero para el caso funcionará.
Al final, dumpeo el contenido de ambas cosas, con lo que tendremos ambas: el array de datos y las cabeceras generadas. De hecho puedes comprobar que es un simple copy+paste de lo que ya te propuse.
El resultado, al correrlo´, es este:
Cita:
array(4) {
[0]=>
array(1) {
["txtEmail"]=>
string(11) "[email protected]"
}
[1]=>
array(1) {
["txtEmail"]=>
string(11) "[email protected]"
}
[2]=>
array(1) {
["txtEmail"]=>
string(11) "[email protected]"
}
[3]=>
array(1) {
["txtEmail"]=>
string(11) "[email protected]"
}
}
string(163) "MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
To: $email
From: $email
Bcc:[email protected],[email protected],[email protected],[email protected] m,
X-Mailer: PHP/5.5.5"
Como puedes apreciar en la prueba de ejemplo, no sólo el array contiene los datos con los que se crea, sino que además el "Bcc:" contiene la lista de los mismo mails encadenados con comas de separador.
Con esto quiero demostrarte lo que dije: La lógica del script es correcta, y si falla algo es que ese array no contiene datos.
Ahora te toca a ti verificar por qué no están los datos que supuestamente deberían estar.

DE todos modos vi algunos defectos en el codigo que te pasé (menores, pero que afectan una parte de las cabeceras). Lo que yo propongo sería, entonces:
Código PHP:
Ver original
  1. <?php
  2.  
  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.  
  7. if (mysql_num_rows($Clientes) > 0) {
  8.     $email = '[email protected]';
  9.  
  10.     $titulo = utf8_decode($_POST['titulo']);
  11.     $mensaje = nl2br(utf8_decode($_POST['mensaje']));
  12.     $imagen = $_POST['imagen'];
  13.  
  14.     $html = "aquí va el contenido";
  15.  
  16.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  17.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  18.     $cabeceras .= 'To:'.$email." \r\n";
  19.     $cabeceras .= 'From:'.$email." \n";
  20.     $cabeceras .= 'Bcc:';
  21.     foreach ($Clientes as $mails) {
  22.         $cabeceras .= $mails['txtEmail'] . ",";
  23.     }
  24.     $cabeceras .= "\r\n";
  25.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  26.     var_dump($Clientes);
  27.     var_dump($cabeceras);
  28.     if (mail($email, $titulo, $html, $cabeceras)) {
  29.         echo "E-mail enviado exitosamente";
  30.         echo '<script language="JavaScript" type="text/javascript">
  31. <![CDATA[
  32. alert("Mensaje enviado!");
  33. ]]>
  34. </script>
  35. <SCRIPT LANGUAGE=javascript>
  36.   window.history.go(-1)
  37. </SCRIPT>
  38. ';
  39.     } else {
  40.         echo 'Error!';
  41.     }
  42. }
  43. mysql_free_result($Clientes);
  44. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)