Ver Mensaje Individual
  #27 (permalink)  
Antiguo 23/03/2014, 20:27
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
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:

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. ?>
gnzsoloyo de verdad que te agradezco todo el tiempo que me estás dedicando, pero no consigo ir a ningún sitio. El ejemplo del array lo entiendo perfectamente, ya he trabajado con arrays. El problema es que el array tome los valores de la BD, y trabajando sobre los ejemplos que me das no he conseguido nada. Te he pegado el código entero y no se, la consulta la hace bien, el envío lo hace correctamente también, lo que falla es el Bcc. Entiendo que si das los valores directamente en la programación para armar un array te los devuelva correctamente, pero al sacarlos de la base de datos.... algo falla. Te copia y pego una vez más el código entero por si ves alguna cosa que falle.... yo no la encuentro, y ya ves que entre los dos le hemos dado bastantes vueltas. Si tu tampoco me sabes decir por donde debo tirar.... no es tan fácil entonces ¿no?

Código PHP:
<?php require_once('../Connections/bd.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}
mysql_select_db($db_con$con);
$query_Clientes "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
$Clientes mysql_query($query_Clientes$opencel) or die(mysql_error());
 
if (
mysql_num_rows($Clientes) > 0) {
//esta línea me dijiste en un mensaje anterior que no sabía para que la usaba.... y eso me pregunto yo, la has vuelto a usar??
    
$email '[email protected]';
 
    
$titulo utf8_decode($_POST['titulo']);
    
$mensaje nl2br(utf8_decode($_POST['mensaje']));
    
$imagen $_POST['imagen'];
    
$nombre $row_Clientes['txtNombre'];
    
$apellidos $row_Clientes['txtApellidos'];

                        
$html mensaje;

    
$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:MiEmpresa" \n";
    $cabeceras .= '
Bcc:';
    foreach ($Clientes as $mails) {
        $cabeceras .= $mails['
txtEmail'] . ",";
    }
    $cabeceras .= "\r\n";
    $cabeceras .= '
X-MailerPHP/' . phpversion();
    var_dump($Clientes);
    var_dump($cabeceras);
    if (mail($email, $titulo, $html, $cabeceras)) {
        echo '
<script language="JavaScript" type="text/javascript">
<![
CDATA[
alert("Mensaje enviado!");
]]>
</script>
//<SCRIPT LANGUAGE=javascript>
   //window.history.go(-1)
//</SCRIPT>
';
    } else {
        echo 'Error!';
    }
}
mysql_free_result($Clientes);
?>
Aquí está el código completo, y lo que me devuelve es lo siguiente

resource(4) of type (mysql result) string(151) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To:[email protected] From: MiEmpresa Bcc: X-Mailer: PHP/5.4.26" E-mail enviado exitosamente //

Una vez más se me envía correctamente a $mail pero no Bcc

¿Alguna idea?