Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como enviar BCC a todos los contactos de mysql

Estas en el tema de Como enviar BCC a todos los contactos de mysql en el foro de PHP en Foros del Web. Hola a todos amigos del web. Estoy creando un página para enviar correos a clientes de mi base de datos. El caso es que lo ...

  #1 (permalink)  
Antiguo 05/03/2014, 21:15
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Como enviar BCC a todos los contactos de mysql

Hola a todos amigos del web.

Estoy creando un página para enviar correos a clientes de mi base de datos. El caso es que lo tengo hecho sin problema pero definiendo las direcciones BCC pero no desde la base de datos.

Asi es como lo tengo:
Código PHP:
$cabeceras "Content-type: text/html\r\n";
                
$cabeceras .= 'From: MiEmpresa' "\n";
                
$cabeceras .= 'Bcc: eMail1' "\r\n";
                
$cabeceras .= 'Bcc: eMail2' "\r\n";
                
$cabeceras .= 'Bcc: eMail3' "\r\n"
Pero la intención es que me envía a todos los clientes de la base de datos. He probado a ponerle un do while de una consulta pero no se envía.

¿Cómo puedo conseguir eso?
Gracias de antemano.
  #2 (permalink)  
Antiguo 05/03/2014, 21:17
Avatar de 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

OFF TOPIC en MySQL.

Movido a PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/03/2014, 21:18
Avatar de 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

La indicación de "Bcc:" es única. Luego las direcciones se ponen con los separadores que correspondan.
¿Nunca has mandado un e-Mail a múltiples destinatarios?
Bueno, ESO es lo que estás haciendo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 05/03/2014, 21:24
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La indicación de "Bcc:" es única. Luego las direcciones se ponen con los separadores que correspondan.
¿Nunca has mandado un e-Mail a múltiples destinatarios?
Bueno, ESO es lo que estás haciendo...
Si he mandado un email, pero ¿no debería utilizar un do while para recorrer toda la tabla?
  #5 (permalink)  
Antiguo 06/03/2014, 06:41
Avatar de 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

Por supuesto que si, pero ¿qué tiene que ver eso con que en cada instancia de un e-Mail pongas de nuevo "Bcc:" en la cabecera.
ESO es lo que está mal, y creo que debería ser bastante evidente para ti lo que te digo. Pones ese "Bcc:" una sola vez, y luego concatenas uno a uno los emails, de la misma forma en que estás concatenando el resto de la cabecera, separando cada uno de esos mails por un separado (por ejemplo ";")... exactamente como te lo muestra el Outlook...
Me resulta extraño que no lo veas.

Sería algo así como:
Código PHP:
$cabeceras "Content-type: text/html\r\n";
$cabeceras .= "From: MiEmpresa \r\n";
$cabeceras .= "Bcc: ";  
foreach (
$row as $email ) {
    
$cabeceras .= "$email;";
}
$cabeceras .= "\r\n"
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/03/2014, 15:28
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por supuesto que si, pero ¿qué tiene que ver eso con que en cada instancia de un e-Mail pongas de nuevo "Bcc:" en la cabecera.
ESO es lo que está mal, y creo que debería ser bastante evidente para ti lo que te digo. Pones ese "Bcc:" una sola vez, y luego concatenas uno a uno los emails, de la misma forma en que estás concatenando el resto de la cabecera, separando cada uno de esos mails por un separado (por ejemplo ";")... exactamente como te lo muestra el Outlook...
Me resulta extraño que no lo veas.

Sería algo así como:
Código PHP:
$cabeceras "Content-type: text/html\r\n";
$cabeceras .= "From: MiEmpresa \r\n";
$cabeceras .= "Bcc: ";  
foreach (
$row as $email ) {
    
$cabeceras .= "$email;";
}
$cabeceras .= "\r\n"
No me funciona así.
  #7 (permalink)  
Antiguo 22/03/2014, 15:48
Avatar de 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

¿Sabes? Una respuesta así:
Cita:
No me funciona así.
No sirve absolutamente para nada.
En serio. No aporta ninguna información relevante.

Por lo menos tómate el trabajo de explicar claramente por qué dices que no te funciona, y como mínimo postea el código completo de lo que intentaste hacer.
Sin eso, estamos hablando vacuidades.
Hasta lo que podemos imaginar, podrías estar adaptando mal el código que te propongo, y no lo sabríamos porque no lo vemos...

¿No te parece?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 22/03/2014, 15:58
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Sabes? Una respuesta así:

No sirve absolutamente para nada.
En serio. No aporta ninguna información relevante.

Por lo menos tómate el trabajo de explicar claramente por qué dices que no te funciona, y como mínimo postea el código completo de lo que intentaste hacer.
Sin eso, estamos hablando vacuidades.
Hasta lo que podemos imaginar, podrías estar adaptando mal el código que te propongo, y no lo sabríamos porque no lo vemos...

¿No te parece?
No lo he puesto porque he probado la opción que me recomendaste tal cual está. Me pareció molesto repetir tanto. Pongo el código. No te sientas molesto.

Código PHP:
Ver original
  1. $cabeceras .= "Bcc: ";  
  2. foreach ($row_Clientes['txtEmail'] as $email ) {
  3.     $cabeceras .= "$email;";
  4. }
  5. $cabeceras .= "\r\n";

Última edición por raulgranadosraul; 22/03/2014 a las 16:07
  #9 (permalink)  
Antiguo 22/03/2014, 16:39
Avatar de 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

OK. Ese es el código.
¿Exactamente qué problema se te presenta y en qué momento?
¿No llegan?
¿No salen?
¿Se produce algún error en alguna parte de la ejecución?

¿Hiciste una verificación previa a la salida? Algo como:
Código PHP:
Ver original
  1. $cabeceras .= "Bcc: ";  
  2. foreach ($row_Clientes['txtEmail'] as $email ) {
  3.     $cabeceras .= "$email;";
  4. }
  5. $cabeceras .= "\r\n";
  6. var_dump($row_Clientes);
  7. var_dump($cabeceras );
Por lo menos así podríamos verificar la construcción.

Otra cosa: Te pedí el código completo, con lo cual estoy pidiendo todo lo anterior, y todo lo posterior a ese bloque.
El hecho de que esa parte funcione, no implica que no estés cometiendo errores previos o posteriores. ¿No lo consideraste?
Postea todo. ASí por lo menos estaremos seguros.
Y verifica las variables como te sugiero. Así también confirmaremos lo que stás procesando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 22/03/2014, 17:15
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK. Ese es el código.
¿Exactamente qué problema se te presenta y en qué momento?
¿No llegan?
¿No salen?
¿Se produce algún error en alguna parte de la ejecución?

¿Hiciste una verificación previa a la salida? Algo como:
Código PHP:
Ver original
  1. $cabeceras .= "Bcc: ";  
  2. foreach ($row_Clientes['txtEmail'] as $email ) {
  3.     $cabeceras .= "$email;";
  4. }
  5. $cabeceras .= "\r\n";
  6. var_dump($row_Clientes);
  7. var_dump($cabeceras );
Por lo menos así podríamos verificar la construcción.

Otra cosa: Te pedí el código completo, con lo cual estoy pidiendo todo lo anterior, y todo lo posterior a ese bloque.
El hecho de que esa parte funcione, no implica que no estés cometiendo errores previos o posteriores. ¿No lo consideraste?
Postea todo. ASí por lo menos estaremos seguros.
Y verifica las variables como te sugiero. Así también confirmaremos lo que stás procesando.
Me envía solo a la dirección que esta en $email y no la que esta en BCC

Código PHP:
$email '[email protected]';

$asunto $titulo;
$html "aquí va el contenido";

$cabeceras "Content-type: text/html\r\n";
$cabeceras .= 'From: MiEmpresa' "\n";
$cabeceras .= "Bcc: "
foreach (
$row_Clientes['txtEmail'] as $email ) {
$cabeceras .= $email;
}
$cabeceras .= "\r\n";                    

if (
mail($email,$asunto,$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); 
  #11 (permalink)  
Antiguo 22/03/2014, 17:29
Avatar de 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

No verificaste lo que te dije:

Código PHP:
Ver original
  1. var_dump($row_Clientes);
  2. var_dump($cabeceras );

Si no intentas lo que se te pide es difícil ayudarte. Tienes que tener en cuenta que nosotros no estamos viendo tu pantalla, ni tampoco trabajando en tu PC.

De todos modos, yo estoy viendo el error a simple vista... Esta delante de tus ojos, en las variables que usas.

Estás sobreescribiendo $email. Mira con cuidado y te darás cuenta.

Si hubieses hecho el var_dup() en ambas variables lo habrías descubierto por ti mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 22/03/2014, 17:33
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No verificaste lo que te dije:

Código PHP:
Ver original
  1. var_dump($row_Clientes);
  2. var_dump($cabeceras );

Si no intentas lo que se te pide es difícil ayudarte. Tienes que tener en cuenta que nosotros no estamos viendo tu pantalla, ni tampoco trabajando en tu PC.

De todos modos, yo estoy viendo el error a simple vista... Esta delante de tus ojos, en las variables que usas.

Estás sobreescribiendo $email. Mira con cuidado y te darás cuenta.
Lo he hecho, pero no me da ningún error ni ningún resultado ni por pantalla ni en el email, me sigue haciendo lo mismo, me envía solo a $email.

Haciendo esto:
Código PHP:
Ver original
  1. $email = '[email protected]';
  2.  
  3. $asunto = $titulo;
  4. $html = "aquí va el contenido";
  5.  
  6. $cabeceras = "Content-type: text/html\r\n";
  7. $cabeceras .= 'From: MiEmpresa' . "\n";
  8. $cabeceras .= "Bcc: ";
  9. foreach ($row_Clientes['txtEmail'] as $email ) {
  10. $cabeceras .= $email;
  11. }
  12. $cabeceras .= "\r\n";
  13.             var_dump($row_Clientes);
  14.             var_dump($cabeceras );                  
  15.  
  16. if (mail($email,$asunto,$html,$cabeceras)) {
  17.     echo '<script language="JavaScript" type="text/javascript">
  18. //<![CDATA[
  19. alert("Mensaje enviado!");
  20. //]]>
  21. </script>
  22. <SCRIPT LANGUAGE=javascript>
  23.   window.history.go(-1)
  24. </SCRIPT>
  25. ';
  26.   }
  27.   else {
  28.     echo 'Error!';
  29.   }
  30.  
  31. mysql_free_result($Clientes);

Última edición por raulgranadosraul; 22/03/2014 a las 17:44 Razón: Faltó código
  #13 (permalink)  
Antiguo 22/03/2014, 17:55
Avatar de 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

Cita:
no me da ningún error ni ningún resultado ni por pantalla ni en el email
La idea de var_dump(), lo mismo que usar echo, es que te muestre por pantalla el contenido de las variables, una vez caragas, para puedas ver el error en la construcción.

Para que se entienda lo que quiero que visualices, al dumpear $cabeceras deberías obtener algo como
Cita:
Content-type: text/html
To: /* Aqui no estas poniendo nada */
From: Mi Empresa
Bcc: //* Aqui la lista de e-mails */
La verdad es que me parece que no consultaste ni siquiera el manual de referencia (http://www.php.net/manual/es/function.mail.php). Allí tienes un ejemplo clarísimo de cómo debe estar armado el encabezado de un e-mail.

Veamos cómo debería quedar, según yo lo veo:
Código PHP:
Ver original
  1. $email = "[email protected]";
  2.  
  3. $asunto = $titulo;
  4. $html = "aquí va el contenido";
  5.  
  6. $cabeceras  = 'MIME-Version: 1.0' . "\r\n";
  7. $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  8. $cabeceras .= 'To: $email'."\r\n";
  9. $cabeceras .= 'From: $email '."\n";
  10. $cabeceras .= 'Bcc:';
  11. foreach ($row_Clientes['txtEmail'] as $mails ) {
  12.     $cabeceras .= $mails.",";
  13.     }
  14. $cabeceras .= "\r\n";
  15. $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  16.  
  17. if (mail($email,$asunto,$html,$cabeceras)) {
  18.     echo '<script language="JavaScript" type="text/javascript">
  19. //<![CDATA[
  20. alert("Mensaje enviado!");
  21. //]]>
  22. </script>
  23. <SCRIPT LANGUAGE=javascript>
  24.   window.history.go(-1)
  25. </SCRIPT>
  26. ';
  27.   }
  28.   else {
  29.     echo 'Error!';
  30.   }
  31.  
  32. mysql_free_result($Clientes);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 22/03/2014, 19:12
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La idea de var_dump(), lo mismo que usar echo, es que te muestre por pantalla el contenido de las variables, una vez caragas, para puedas ver el error en la construcción.

Para que se entienda lo que quiero que visualices, al dumpear $cabeceras deberías obtener algo como

La verdad es que me parece que no consultaste ni siquiera el manual de referencia (http://www.php.net/manual/es/function.mail.php). Allí tienes un ejemplo clarísimo de cómo debe estar armado el encabezado de un e-mail.

Veamos cómo debería quedar, según yo lo veo:
Código PHP:
Ver original
  1. $email = "[email protected]";
  2.  
  3. $asunto = $titulo;
  4. $html = "aquí va el contenido";
  5.  
  6. $cabeceras  = 'MIME-Version: 1.0' . "\r\n";
  7. $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  8. $cabeceras .= 'To: $email'."\r\n";
  9. $cabeceras .= 'From: $email '."\n";
  10. $cabeceras .= 'Bcc:';
  11. foreach ($row_Clientes['txtEmail'] as $mails ) {
  12.     $cabeceras .= $mails.",";
  13.     }
  14. $cabeceras .= "\r\n";
  15. $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  16.  
  17. if (mail($email,$asunto,$html,$cabeceras)) {
  18.     echo '<script language="JavaScript" type="text/javascript">
  19. //<![CDATA[
  20. alert("Mensaje enviado!");
  21. //]]>
  22. </script>
  23. <SCRIPT LANGUAGE=javascript>
  24.   window.history.go(-1)
  25. </SCRIPT>
  26. ';
  27.   }
  28.   else {
  29.     echo 'Error!';
  30.   }
  31.  
  32. mysql_free_result($Clientes);
Colocando así las cabeceras
Código PHP:
$cabeceras  'MIME-Version: 1.0' "\r\n";
                    
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
                    
$cabeceras .= "To: ".$email."\n";
                    
$cabeceras .= 'From: Opencel Telde-Santana '."\n";
                    
$cabeceras .= 'Bcc:'
                    foreach (
$row_Clientes['txtEmail'] as $mails ) {
                        
$cabeceras .= $mails.",";
                        }
                    
$cabeceras .= "\r\n";
                    
$cabeceras .= 'X-Mailer: PHP/' phpversion();                        
                    
var_dump($row_Clientes);
                    
var_dump($cabeceras ); 
Me muestra por pantalla
array(1) { ["txtEmail"]=> string(26) "[email protected]" } string(150) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To: [email protected] From: MiEmpresa Bcc: X-Mailer: PHP/5.4.26"

Sigue sin utilizar los mails de la base de datos. Sigo mirando el manual pero no consigo hacerlo. Si estoy pidiendo ayuda es porque no encuentro la respuesta. No porque no me quiera molestar, noto hostilidad en tus respuestas. No obligo a nadie a decirme como se hace, solo pregunto por mis dudas despues de buscar respuestas sin encontrar. Paz
  #15 (permalink)  
Antiguo 22/03/2014, 20:25
Avatar de 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

Cita:
Sigue sin utilizar los mails de la base de datos.
Pues razónalo: Si el dump de las cabeceras, luego de cargarlas, dice lo siguiente:
Cita:
MIME-Version: 1.0
Content-type: text/html;
charset=iso-8859-1
To: [email protected]
From: MiEmpresa
Bcc:
X-Mailer: PHP/5.4.26
el problema para mi pasa a ser medio obvio: el array $row_Clientes está vacío.
Esto es, además , evidente desde el momento en que el var_dump($row_Clientes), está devolviendo:
Cita:
array(1) { ["txtEmail"]=> string(26) "[email protected]" }
A mi entender, no estás obteniendo datos de la consulta. Si en realidad ese array tuviese algo, debería devolver algo como esto:
Código PHP:
Ver original
  1. array(4) {
  2.   [0]=>
  3.   string(11) "[email protected]"
  4.   [1]=>
  5.   string(11) "[email protected]"
  6.   [2]=>
  7.   string(11) "[email protected]"
  8.   [3]=>
  9.   string(11) "[email protected]"
  10. }
¿Podrías mostrarnos en qué momento obtienes ese array "$row_Clientes"? Vale decir, muestranos la query y cómo buscas el dato.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/03/2014 a las 20:39
  #16 (permalink)  
Antiguo 22/03/2014, 20:41
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pues razónalo: Si el dump de las cabeceras, luego de cargarlas, dice lo siguiente:

el problema para mi pasa a ser medio obvio: el array $row_Clientes está vacío.
Esto es, además , evidente desde el momento en que el var_dump($row_Clientes), está devolviendo:
A mi entender, no estás obteniendo datos de la consulta.
¿Podrías mostrarnos en qué momento obtienes ese array "$row_Clientes"? Vale decir, muestranos la query y cómo buscas el dato.
No se por qué muestra eso, el resultado por pantalla muestra el primer email de la tabla. Al publicar aquí lo muestra así, y no se por qué. Vuelvo a copiarlo a ver. Solo envía al primero de la tabla.

Código Javascript:
Ver original
  1. array(1) { ["txtEmail"]=> string(26) "[email protected]" } string(150) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To: [email protected] From: MiEmpresa Bcc: X-Mailer: PHP/5.4.26"

La consulta es esta:
Código PHP:
mysql_select_db($database_db$db);
$query_Clientes "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
$Clientes mysql_query($query_Clientes$db) or die(mysql_error());
$row_Clientes mysql_fetch_assoc($Clientes);
$totalRows_Clientes mysql_num_rows($Clientes); 
  #17 (permalink)  
Antiguo 22/03/2014, 20:57
Avatar de 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

Bueno, tienes un par de errores conceptuales, pero nada que no se pueda solucionar rápidamente.
En primer lugar, mysql_fetch_asoc() no recupera el resultado completo, sino sólo una fila, y lo que haces es crear un array de una única entrada. Por consecuencia estás recorriendo algo que no se recorre, sencillamente.
Cita:
Manual de referncia:

Descripción
Código PHP:
Ver original
  1. array mysql_fetch_assoc ( resource $result )

Devuelve un array asociativo que corresponde a la fila recuperada y mueve el puntero de datos interno hacia adelante. mysql_fetch_assoc() es equivalente a llamar a mysql_fetch_array() con MYSQL_ASSOC como segundo parámetro opcional. Únicamente devuelve un array asociativo.
En segundo lugar, debes siempre verificar que la consulta devuelva efectivamente algo, aunque sea nada más que por cuestiones preventivas.
Finalmente, lo que recorres con el foreach es el mismo resource devuelto por la query. No necesitas otra cosa, no lo compliques.

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. if (mysql_num_rows($Clientes) > 0) {
  7.     $totalRows_Clientes = mysql_num_rows($Clientes);
  8.     $email = "[email protected]";
  9.  
  10.     $asunto = $titulo;
  11.     $html = "aquí va el contenido";
  12.  
  13.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  14.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  15.     $cabeceras .= 'To: $email' . "\r\n";
  16.     $cabeceras .= 'From: $email ' . "\n";
  17.     $cabeceras .= 'Bcc:';
  18.     foreach ($Clientes as $mails) {
  19.         $cabeceras .= $mails['txtEmail'].",";
  20.     }
  21.     $cabeceras .= "\r\n";
  22.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  23.     var_dump($cabeceras);
  24.     var_dump($Clientes);
  25.     if (mail($email, $asunto, $html, $cabeceras)) {
  26.         echo '<script language="JavaScript" type="text/javascript">
  27. //<![CDATA[
  28. alert("Mensaje enviado!");
  29. //]]>
  30. </script>
  31. <SCRIPT LANGUAGE=javascript>
  32.   window.history.go(-1)
  33. </SCRIPT>
  34. ';
  35.     } else {
  36.         echo 'Error!';
  37.     }
  38.  
  39.     mysql_free_result($Clientes);
  40. }
  41. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 22/03/2014, 22:08
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Como enviar BCC a todos los contactos de mysql

deberías tener en cuenta que tu server puede ser sancionado si envias demasiados correos a la vez, no estoy seguro hasta cuantos destinatarios puedes enviar en un mismo correo, para eso hay servicios y servidores especiales..
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #19 (permalink)  
Antiguo 23/03/2014, 06:16
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, tienes un par de errores conceptuales, pero nada que no se pueda solucionar rápidamente.
En primer lugar, mysql_fetch_asoc() no recupera el resultado completo, sino sólo una fila, y lo que haces es crear un array de una única entrada. Por consecuencia estás recorriendo algo que no se recorre, sencillamente.

En segundo lugar, debes siempre verificar que la consulta devuelva efectivamente algo, aunque sea nada más que por cuestiones preventivas.
Finalmente, lo que recorres con el foreach es el mismo resource devuelto por la query. No necesitas otra cosa, no lo compliques.

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. if (mysql_num_rows($Clientes) > 0) {
  7.     $totalRows_Clientes = mysql_num_rows($Clientes);
  8.     $email = "[email protected]";
  9.  
  10.     $asunto = $titulo;
  11.     $html = "aquí va el contenido";
  12.  
  13.     $cabeceras = 'MIME-Version: 1.0' . "\r\n";
  14.     $cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  15.     $cabeceras .= 'To: $email' . "\r\n";
  16.     $cabeceras .= 'From: $email ' . "\n";
  17.     $cabeceras .= 'Bcc:';
  18.     foreach ($Clientes as $mails) {
  19.         $cabeceras .= $mails['txtEmail'].",";
  20.     }
  21.     $cabeceras .= "\r\n";
  22.     $cabeceras .= 'X-Mailer: PHP/' . phpversion();
  23.     var_dump($cabeceras);
  24.     var_dump($Clientes);
  25.     if (mail($email, $asunto, $html, $cabeceras)) {
  26.         echo '<script language="JavaScript" type="text/javascript">
  27. //<![CDATA[
  28. alert("Mensaje enviado!");
  29. //]]>
  30. </script>
  31. <SCRIPT LANGUAGE=javascript>
  32.   window.history.go(-1)
  33. </SCRIPT>
  34. ';
  35.     } else {
  36.         echo 'Error!';
  37.     }
  38.  
  39.     mysql_free_result($Clientes);
  40. }
  41. ?>
Este es el código con los cambios que me indicaste. Ahora mismo no envía email ni me devuelve el dump. La pantalla simplemente se queda en blanco. La verdad es que llevo dándole vueltas una semana y no consigo hallar qué estoy haciendo mal.
Código PHP:
<?php
mysql_select_db
($database_db$db);
$query_Clientes "SELECT txtEmail FROM Publicidad_tbl ORDER BY Publicidad_tbl.idNombre";
$Clientes mysql_query($query_Clientes$db) or die(mysql_error());
if (
mysql_num_rows($Clientes) > 0) {
$totalRows_Clientes mysql_num_rows($Clientes);
$email '[email protected]';

    
$tituloutf8_decode($_POST['titulo']);
    
$mensaje nl2br(utf8_decode($_POST['mensaje']));
    
$nombre $row_Clientes['txtNombre'];
    
$apellidos $row_Clientes['txtApellidos'];
    
$email_clientes $row_Clientes['txtEmail'];
    
$imagen $_POST['imagen'];

$asunto $titulo;
$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";
    
$cabeceras .= 'X-Mailer: PHP/' phpversion();
    
var_dump($cabeceras);
    
var_dump($Clientes);
    if (
mail($email$asunto$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);
}
?>
  #20 (permalink)  
Antiguo 23/03/2014, 06:32
Avatar de 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

Cita:
Ahora mismo no envía email ni me devuelve el dump
A esta altura, me parece que ya eres incapaz de analizar el problema por tí mismo, siendo decirlo de ese modo.
¿No alcanzas a ver que si no devuelve ningún dump de las variables es que ni siquiera está llegando allí?
Al menos eso deberías deducirlo sólo...

Rvisa el código y debuggea parte a parte. Haz al menos una prueba de escritorio, segmento a segmento, y verifica cada salida hasta que encuentres el error.
Yo no estoy en tu computadora, por consecuencia no puedo hacer tu trabajo.
La lógica y los problemas ya te los ayude a resolver. Lo que tienes ahora es un problema de ejecución, y eso no puedo resolverlo yo. Lo debes hacer tu.

Cuando hayas encontrado el problema en TU pc, veremos si funciona o no.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 23/03/2014, 06:48
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
A esta altura, me parece que ya eres incapaz de analizar el problema por tí mismo, siendo decirlo de ese modo.
¿No alcanzas a ver que si no devuelve ningún dump de las variables es que ni siquiera está llegando allí?
Al menos eso deberías deducirlo sólo...

Rvisa el código y debuggea parte a parte. Haz al menos una prueba de escritorio, segmento a segmento, y verifica cada salida hasta que encuentres el error.
Yo no estoy en tu computadora, por consecuencia no puedo hacer tu trabajo.
La lógica y los problemas ya te los ayude a resolver. Lo que tienes ahora es un problema de ejecución, y eso no puedo resolverlo yo. Lo debes hacer tu.

Cuando hayas encontrado el problema en TU pc, veremos si funciona o no.
No encuentro el error por más vueltas que le dé, he hecho mil cambios y no consigo que ande. Soy capaz de analizar en busca del problema, aunque no lo encuentro.
¿Alguna vez te ha pasado? ¿O quizá ya sabias al nacer? Para escribirme diciendo que mi trabajo lo tengo que hacer yo y no tu.... mejor abstente. Si supiera en este momento hacerlo no hubiese abierto el nuevo tema. Tampoco he abierto el tema para que me respondan con aires de superioridad y perfeccionismo. Si puedes y quieres echarme una mano te lo agradezco.... pero si la mano va al cuello.... prefiero que no me la des.

Si a alguien se le ocurre una idea que esté dispuesto a compartir estaré por aqui.
  #22 (permalink)  
Antiguo 23/03/2014, 08:28
Avatar de 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

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
  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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 23/03/2014, 16:08
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 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. ?>
  #24 (permalink)  
Antiguo 23/03/2014, 18:05
Avatar de 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

Quita esta línea:
Código PHP:
Ver original
  1. $row_Clientes = mysql_fetch_assoc($Clientes);
Es pura basura, no cumple ninguna utilidad. Y está destruyendo el único registro que esa consulta está devolviendo.
Si quieres entender por qué, simplemente lee lo que te copié antes, del manual de referencia: Mueve el puntero de lectura del result.

Esta también en tu script, no parece cumplir ninguna tarea:
Código PHP:
Ver original
  1. $totalRows_Clientes = mysql_num_rows($Clientes);

Por cierto: ¿Probaste secuencialmente los tres scripts que te puse, o seguiste probando el tuyo solamente?
Te puse esos tres para que nos muestres aquí lo que eso devuelve, no para que los mires solamente tu.

Postea los resultados de cada uno de los tres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 23/03/2014 a las 18:10
  #25 (permalink)  
Antiguo 23/03/2014, 18:34
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Quita esta línea:
Código PHP:
Ver original
  1. $row_Clientes = mysql_fetch_assoc($Clientes);
Es pura basura, no cumple ninguna utilidad. Y está destruyendo el único registro que esa consulta está devolviendo.
Si quieres entender por qué, simplemente lee lo que te copié antes, del manual de referencia: Mueve el puntero de lectura del result.

Esta también en tu script, no parece cumplir ninguna tarea:
Código PHP:
Ver original
  1. $totalRows_Clientes = mysql_num_rows($Clientes);

Por cierto: ¿Probaste secuencialmente los tres scripts que te puse, o seguiste probando el tuyo solamente?
Te puse esos tres para que nos muestres aquí lo que eso devuelve, no para que los mires solamente tu.

Postea los resultados de cada uno de los tres.
Lo he probado por separado. Te cuento.


Al probar la consulta me devuelve lo siguiente:
resource(4) of type (mysql result)
Tengo 4 líneas en esa tabla con lo cual me devuelve correctamente la info.



Con la siguiente comprobación me devuelve lo siguiente:
string(152) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To: $email From: Miempresa Bcc: X-Mailer: PHP/5.4.26" resource(4) of type (mysql result) string(27) "$email" string(6) "titulo" string(7) "mensaje" string(1567) " y me muestra el correo html debajo


Y arreglando el código finalmente me da este resultado:
resource(4) of type (mysql result) string(152) "MIME-Version: 1.0 Content-type: text/html; charset=iso-8859-1 To: $email From: Miempresa Bcc: X-Mailer: PHP/5.4.26" E-mail enviado exitosamente

Con lo que me hace el envío correcto pero no me utiliza el Bcc con los valores de Base de Datos.
  #26 (permalink)  
Antiguo 23/03/2014, 19:04
Avatar de 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)
  #27 (permalink)  
Antiguo 23/03/2014, 20:27
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 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?
  #28 (permalink)  
Antiguo 23/03/2014, 21:46
 
Fecha de Ingreso: diciembre-2012
Mensajes: 69
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Como enviar BCC a todos los contactos de mysql

Opcion 1: Pon un emails validos sin la variable:
$cabecero.="bcc:[email protected];emailvalid [email protected];"

Si funciona es por que tus variables no hay ""BCC""!! es decir no hay a quien enviar.
  #29 (permalink)  
Antiguo 24/03/2014, 07:19
Avatar de 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

Continuando con el tema del último post tuyo, hay algo que me intriga y es que no encuentro razones para que, si efectivamente estás obteniendo resultados de la consulta, el foreach no los lea. Como ya te mostré, si hay un array asociativo como el que se supone que tienes de resultado, debería estar generando bien el listado de e-Mails....

¿Podrías verificar qué resultado obtienen en el phpMyadmin, en forma manual, las siguientes consultas?
Código SQL:
Ver original
  1. SELECT txtEmail
  2. FROM Publicidad_tbl
  3. ORDER BY idNombre
Código MySQL:
Ver original
  1. SELECT GROUP_CONCAT(txtEmail ORDER BY idNombre) txtEmail
  2. FROM Publicidad_tbl
Copia y postea el resultado ejecutado manualmente en la ventana de SQL del phpMyadmin.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 24/03/2014, 17:34
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Como enviar BCC a todos los contactos de mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Continuando con el tema del último post tuyo, hay algo que me intriga y es que no encuentro razones para que, si efectivamente estás obteniendo resultados de la consulta, el foreach no los lea. Como ya te mostré, si hay un array asociativo como el que se supone que tienes de resultado, debería estar generando bien el listado de e-Mails....

¿Podrías verificar qué resultado obtienen en el phpMyadmin, en forma manual, las siguientes consultas?
Código SQL:
Ver original
  1. SELECT txtEmail
  2. FROM Publicidad_tbl
  3. ORDER BY idNombre
Código MySQL:
Ver original
  1. SELECT GROUP_CONCAT(txtEmail ORDER BY idNombre) txtEmail
  2. FROM Publicidad_tbl
Copia y postea el resultado ejecutado manualmente en la ventana de SQL del phpMyadmin.
Con la primera consulta me devuelve los 4 email en una tabla y en la segunda los emails separados por comas

Etiquetas: contactos, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:43.