Foros del Web » Programando para Internet » PHP »

envio a múltiple destinatarios con PHPMailer

Estas en el tema de envio a múltiple destinatarios con PHPMailer en el foro de PHP en Foros del Web. Ante todo muy buenos dias a todo la gente que forma parte de este magnifico foro. Mi problema nace a partir de querer enviar a ...
  #1 (permalink)  
Antiguo 29/11/2011, 08:56
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
envio a múltiple destinatarios con PHPMailer

Ante todo muy buenos dias a todo la gente que forma parte de este magnifico foro.
Mi problema nace a partir de querer enviar a multiples destinatarios con PHPMailer a traves de AddBCC. Quizas aparente una conosulta boba pero la verdad que he estado buscando info por la web y no he podido dar en la tecla.

Ante todo muchas graciasi a quien pueda sacarme de este enrredado problema.
  #2 (permalink)  
Antiguo 29/11/2011, 09:19
 
Fecha de Ingreso: noviembre-2011
Mensajes: 27
Antigüedad: 12 años, 4 meses
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Buenas,

Si no me equivoco la funcion es asi:

Código PHP:
function AddBCC($address$name "") {
        
$cur count($this->bcc);
        
$this->bcc[$cur][0] = trim($address);
        
$this->bcc[$cur][1] = $name;
    } 
Yo lo que haria es mandar un array como parametro de destinatario, e ir recorriendolo.

Código PHP:
$i 0;
while(
$i $destinatarios){
AddBCC($address[$i], $name[$i]);
$i++;

No conozco muy bien el phpMailer, pero podrias probar a ver si te anda..


Saludos
  #3 (permalink)  
Antiguo 29/11/2011, 14:39
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Estimado Panga dentro del paquete de PHPMailer hay un archivo denominado class.phpmailer.php donde esta la funcion que tu mencionas, es decir que ya esta declarada esa funcion. Pero no logro que me funcione, he separado por comas, punto y coma, etc y no me envia nada.

paso el codigo que tengo en el archivo enviar_mail.php:

Código PHP:
<?
//clase para usar SMTP para enviar correo
require "includes/class.phpmailer.php";
//Si apreto el BOTON ENVIAR hay datos en POST
if($_POST){
  
//instanciamos un objeto de la clase phpmailer al que llamamos 
  //por ejemplo mail
  
$mail = new phpmailer();
  
//Definimos las propiedades y llamamos a los métodos 
  //correspondientes del objeto mail
  //Con PluginDir le indicamos a la clase phpmailer donde se 
  //encuentra la clase smtp que como he comentado al principio de 
  //este ejemplo va a estar en el subdirectorio includes
  
$mail->PluginDir "includes/";

  
//Con la propiedad Mailer le indicamos que vamos a usar un 
  //servidor smtp
  
$mail->Mailer "smtp";
  
//Asignamos a Host el nombre de nuestro servidor smtp
  
$mail->Host 'mail.fundacionrural.org.ar'//puede ser cualquier otro 
  //Le indicamos que el servidor smtp requiere autenticación
  
$mail->SMTPAuth false//por que Yahoo si requiere que te logues antes
  //Le decimos cual es nuestro nombre de usuario y password
  
$mail->Username '[email protected]'
  
//$mail->Password = '4231029';
  //Indicamos cual es nuestra dirección de correo y el nombre que 
  //queremos que vea el usuario que lee nuestro correo
  
$mail->From '[email protected]';
  
$mail->FromName 'Fundacion Rural';
  
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  
$mail->Timeout=30;
  
//Indicamos cual es la dirección de destino del correo
  
$mail->AddAddress($_POST['para']);
  
$mail->AddBCC.(explode(",",$_POST['cco']));
  
//Asignamos asunto y cuerpo del mensaje
  //El cuerpo del mensaje lo ponemos en formato html, haciendo 
  //que se vea en negrita
  
$mail->Subject $_POST['asunto'];
  
$mail->Body stripslashes($_REQUEST["cuerpo"]);
  
//Definimos AltBody por si el destinatario del correo no admite email con formato html 
  
$mail->AltBody stripslashes($_REQUEST["cuerpo"]); 
  
//se envia el mensaje, si no ha habido problemas 
  //la variable $exito tendra el valor true
  
$exito $mail->Send();
  
//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
  //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
  //del anterior, para ello se usa la funcion sleep    
  
$intentos=1
  while ((!
$exito) && ($intentos 5)) {
    
sleep(5);
         
//echo $mail->ErrorInfo;
         
$exito $mail->Send();
         
$intentos=$intentos+1;    
   }
   if(!
$exito)
   {
    echo 
"Problemas enviando correo electrónico a ".$valor;
    echo 
"<br>".$mail->ErrorInfo;    
   }
   else
   {
    echo 
"<br>Mensaje enviado correctamente<br>";
   } 
?>
<p><a href="javascript:window.close()">Cerrar</a> </p>
<p>
  <?  
}else{
?>
</p>
<form action="mail_rapido.php" method="post" enctype="multipart/form-data" name="form1">
  <p>&nbsp;</p>
  <table width="48%" border="0" align="center" cellpadding="3" cellspacing="5">
    <tr class="sectiontableheader"> 
      <td colspan="2"><span class="Estilo4">Correo R&aacute;pido a: <? echo $_GET['nombre']; ?></span></td>
    </tr>
    <tr> 
      <td width="15%"><span class="Estilo2">Para:</span></td>
      <td width="85%"><input name="para" type="text" class="searchbox" id="para" value="<? echo $_GET['direccion']; ?>" size="50"></td>
    </tr>
    <tr> 
      <td width="15%"><span class="Estilo2">CCO:</span></td>
      <td width="85%"><input name="cco[]" type="text" class="searchbox" id="cco" value="" size="50"></td>
    </tr>
    <tr> 
      <td><span class="Estilo2">Asunto</span></td>
      <td><input name="asunto" type="text" class="searchbox" id="asunto" value="" size="50"></td>
    </tr>
    <tr> 
      <td colspan="2"><span class="Estilo2">Curpo de Mensaje</span></td>
    </tr>
    <tr> 
      <td colspan="2"><div align="center"><span class="Estilo2">
        <textarea name="cuerpo" cols="100" rows="20" class="searchbox" id="cuerpo"></textarea>
      </span></div></td>
    </tr>
    <tr class="sectiontableheader"> 
      <td colspan="2"><div align="center" class="Estilo2"> 
          <table width="100%" border="0" cellspacing="0">
            <tr>
              <td width="50%"><div align="center">
                <input name="Submit" type="submit" class="button" value="Enviar correo">
              </div></td>
              <td width="50%"><div align="center">
                <input name="Submit2" type="button" class="button" value="Cerrar" onClick="window.close()">
              </div></td>
            </tr>
          </table>
          </div></td>
    </tr>
  </table>
  <p>&nbsp;</p>
</form>
<?
}
?>
  #4 (permalink)  
Antiguo 29/11/2011, 14:41
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

seria interesante que me puedas explicar como hacer eso de mandar un array como parametro de destinatario e ir recorriendolo. Ahi puse el codigo del enviar_mail.php

no tengo un php avanzado. Muchas gracias por tu tiempo y dedicacion a este maravilloso foro que tantas veces me ha sacado de apuros.

saludos
  #5 (permalink)  
Antiguo 30/11/2011, 17:02
 
Fecha de Ingreso: noviembre-2011
Mensajes: 27
Antigüedad: 12 años, 4 meses
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Buenas,

Voy a intentar ayudarte. Antes que nada, se programacion orientada a objetos, pero todavia no en php. por lo que vamos a tratar de combinarnos. Yo lo que haria sin saber es esto.

Supongo que aca tenes tus multiples destinatarios separados por coma

Código PHP:
explode(",",$_POST['cco']) 
Yo lo que haria es lo siguiente,

Código PHP:
$destinatarios explode(",",$_POST['cco']) 
Ahora tenes un array de destinatarios y despues podrias ir agregandolos.

Código PHP:
$i 0;
while (
$destinatarios[$i] != NULL) {
 
$mail->AddBCC.($destinatarios[$i]);
$i++;

Yo probaria algo asi, cualquier cosa avisame!,

Saludos,
  #6 (permalink)  
Antiguo 30/11/2011, 23:42
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Respuesta: envio a múltiple destinatarios con PHPMailer

por si no lo solucionas con lo que te dice panga. Intenta probar en un Hosting (servidor online), (no utilices tu local). Si te funciona te explico cual fue el detalle.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #7 (permalink)  
Antiguo 01/12/2011, 13:38
 
Fecha de Ingreso: noviembre-2011
Ubicación: Morelia, Mich, México
Mensajes: 95
Antigüedad: 12 años, 5 meses
Puntos: 18
Respuesta: envio a múltiple destinatarios con PHPMailer

otra cosa es que la funcion addBCC solo funcioa si estas usando smtp, una solución si no quieres usar smtp podria ser esta:

Código PHP:
Ver original
  1. foreach($mails as $emailr){
  2.  
  3.     $mail->AddAddress($emailr->mail," ");
  4.    
  5.     $mail->Send();
  6.     $mail->ClearAddresses();
  7.    
  8. }
__________________
Que de Cosas - Tienda En linea México

La Batalla Por tu cuerpo - Dietas|Rutinas|Entrenamientos|Salud
  #8 (permalink)  
Antiguo 02/12/2011, 06:45
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Estimadísimo Panga, primero que nada mil disculpas por la tardanza de mis comentarios pero he estado un tanto complicado.
Te cuento de momento he probado con tu propuesto, que a priori me pareció super funcional, pero cuando ejecute el script chan! me devolvió este error:

Problemas enviando correo electrónico a
SMTP Error: The following recipients failed [Array]

tanto cuando envío un solo correo como cuando envío mas de uno. Pero si envío a través de la función AddAddress puedo enviar sin problemas, el tema está en que desde allí tampoco logro hacer envíos múltiples.

No se que hacer y que mas probar, el mensaje por lo que dice es que ha fallado la entrega a los siguientes destinatarios y entre corchetes me muestra la palabra array, dandome a entender que no me está tomando los mail que ingreso manualmente en el campo de texto CCO. Que me suguieren? por favor una ayuda que estoy desorientado.

PD: quedecosas si uso SMTP
iovan, efectivamente lo estoy usando con server local montado en debian, pero no creería que fuera ese el problema, ya que si pruebo a enviar a traves de la funcion AddAddress se envia sin problemas perfectamente, el ruedo esta en el envio multiple.
  #9 (permalink)  
Antiguo 02/12/2011, 07:15
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

A todos aqui dejo el link con la captura de pantalla del sistema de envio de mail:

http://i40.tinypic.com/2195kex.jpg

Aclaro por las dudas que no tomo los destinatarios a través de una consulta de base de datos sino que la idea es ingresarlos manualmente como si fuese un hotmail, yahoo etc separados o por coma o punto y coma en caso de multiples destinatarios. En el campo "Para" si pongo un mail funciona muy bien y ahi ocupo la funcion AddAddress y en el campo "CCO" no funciona ni con un mail ni con mas de uno haciendo lo que me dice Panga y ocupando la funcion AddBCC.
  #10 (permalink)  
Antiguo 02/12/2011, 14:29
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Respuesta: envio a múltiple destinatarios con PHPMailer

Huy tvzbien cometí una tontería::: estaba bajando la pagina con el scroll y di por error un click y por alguna razón de mala suerte o extraña fue sobre el link "No gracias". =S

Una disculpa amigo, un accidente primera vez que me pasa.
Lo bueno es que no tienes karma todavía si no te hubiera bajado un montón.


------------------------------------------------------------------

Tu lo puedes hacer de muchas formas.

Por ejemplo ocupa una expresion regular y preg_split para separar las cadenas si ocurre un espacio o un punto y coma

ejemplo:

Código PHP:
Ver original
  1. $emails = preg_split("/[\s;]+/", $_POST['email'], -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

Entonces Emails sería un array con todas las direcciones emails, una por indice.

Es fácil, vez que sencillo.

Un saludo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #11 (permalink)  
Antiguo 07/12/2011, 09:05
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Estimado amigo iovan jaja no hay problema a todos nos pasa de meter mal el dedo, todo bien.

Tu propuesto mas o menos la entiendo y parece estar muy buena, pero tampoco funciona y me sigue devolviendo el mismo error

Código PHP:
SMTP ErrorThe following recipients failed [, Array] 
Yo creo por lo novato que soy que el problema está en que el objeto cco enviado por post ($_POST['cco']) al no ser un array sino texto plano donde el usuario deberia de ingresar los correos de los destinatarios separados por ej con coma punto y coma espacio o como sea, quizas por ahi venga el problema y haga que no funciona tu sugerencia. Tu que opinas? será por eso?

dejo la porcion del codigo relevante

Código PHP:
$mail->From '[email protected]';
  
$mail->FromName 'Fundacion Rural';
  
//el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
  //una cuenta gratuita, por tanto lo pongo a 30  
  
$mail->Timeout=30;
  
//Indicamos cual es la dirección de destino del correo
  
$mail->AddAddress($_POST['para']);
  
$mail->AddBCC(preg_split("/[\s;]+/"$_POST['cco'], -1PREG_SPLIT_NO_EMPTY |       PREG_SPLIT_DELIM_CAPTURE)); 
La función AddAddress es lo que se pone en "Para" y la funcion AddBCC es la que se pone en "CCO" que es la que quiero que funcione poniendo varios mail.

vuelvo a dejar la captura de pantalla del sistema de envio de mail como para que se entienda mejor:



Por fa ayuda estoy desde hace días con este rollo, de antemano gracias a todos los que se toman su tiempo para mejorar cada vez mas este maravilloso foro y para hablandarle la cabeza a novatos como yo.
  #12 (permalink)  
Antiguo 07/12/2011, 09:47
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 6 meses
Puntos: 188
Respuesta: envio a múltiple destinatarios con PHPMailer

Hola amigo, es que no funciona de esa manera.

Te explico con un ejemplo:

Código PHP:
Ver original
  1.  
  2. $array = preg_split("/[\s;]+/", $subject);
  3.  
  4. print_r($array); //Imprime un array donde cada indice corresponde a una dirección de correo electrónico

La variable llamada $array contendrá un array con las direcciones de email separadas.

Entonces para enviar email a todas esas direcciones debes hacerlo uno a uno, una forma es recorrer este array con un foreach

por ejemplo:

Código PHP:
Ver original
  1. foreach($array as $key=>$value){
  2.     mail($value, "Probando email", "Hola $value, te he mandado este email de prueba");
  3. }

Y es así como funcionaría.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #13 (permalink)  
Antiguo 07/12/2011, 13:56
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Amigo iovan mira he probado como tu dices pero tampoco funciona, me devuelve el siguiente error:

Como comenté atenriormente esto está hecho con PHPMailer y para enviar los mail se usan sus respectivas funciones que estan contenidas dentro del arhivo class.phpmailer.php. Estas funciones son

Código PHP:
 function AddCC($address$name "") {
        
$cur count($this->cc);
        
$this->cc[$cur][0] = trim($address);
        
$this->cc[$cur][1] = $name;
    } 
que es la que funciona con el campo del formulario "para" (esta funciona perfectamente cuando envío a un solo destinatario)

y la otra funcion seria

Código PHP:
 function AddAddress($address$name "") {
        
$cur count($this->to);
        
$this->to[$cur][0] = trim($address);
        
$this->to[$cur][1] = $name;
    } 
que es la que deberia de funcionar con el campo del formulario "cco"

y aqui pongo de nuevo el codigo relevante del archivo enviar_mail.php

Código PHP:
//Indicamos cual es la dirección de destino del correo
  
$mail->AddAddress($_POST['para']);
  
$correos =  $_POST['cco'];
  
$correos_array preg_split("/[\s;]+/"$correos);
  foreach(
$correos_array as $key=>$value){
  
$mail->AddBCC($value);
  } 
aclaro que la variable $_POST['para'] recoge los datos ingresados en el formulario (datos que serian las direcciones de correo de los destinatarios) y lo mismo para la variable $_POST['cco'].

espero haber sido claro y haber podido explicarme.
  #14 (permalink)  
Antiguo 07/12/2011, 14:20
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

ops! perdon pero no puse el error que me devolvia

Código HTML:
The following recipients failed []
ahi estaria
  #15 (permalink)  
Antiguo 07/12/2011, 14:37
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: envio a múltiple destinatarios con PHPMailer

Ya se... tienes que agregarle un condicionador if así:

Código:
if(isset($_POST['cco'])) {
    #aquí pones la parte donde agregas los CCO, nada más
}
Es que ahora está generando error cuando está vacío el array

Cuéntanos como te fue :)
  #16 (permalink)  
Antiguo 07/12/2011, 14:51
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: envio a múltiple destinatarios con PHPMailer

Maestroooooooooooooooooooooooooooooooooos muchas gracias el ElSiniestro estas en todas jajaja y por supuesto tambien iovan que fue excelente el codigo proporcionado. Cuando a uno lo agota el codigo ya hasta no distingui ni las comas, punto y coma ni nada aunque sencillo parezca. Mil gracias por tanto cansancio.

Otra cosa que se me esta ocurriendo ahora que en su momento lo hice con otro codigo pero seria quizas interesante que me hecharan una ultima manito.

En caso que yo quisiera guardar en un log cada mensaje que sale para su posterior consulta como se podria hacer?.

Cordiales saludos!!!
  #17 (permalink)  
Antiguo 07/12/2011, 14:58
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: envio a múltiple destinatarios con PHPMailer

Hola
Por favor modifica el if que te di ahora por este:

if(isset($_POST['cco'])) {
$correos = $_POST['cco'];
$correos_array = preg_split("/[\s;]+/", $correos);
if(count($correos_array)>1) {
foreach($correos_array as $key=>$value){
$mail->AddBCC($value);
}
}
else $mail->AddBCC($correos_array[0]);
}

Creo que este si funcionará
  #18 (permalink)  
Antiguo 07/12/2011, 15:08
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: envio a múltiple destinatarios con PHPMailer

OK creo que este último código es un poco paranoico jejeje

Para lo del log si es más complejo porque debes sincronizar la escritura en el log según sea la función (o sea si falló, registra esto... sino esto otro)

Debes crear el archivo con el nombre y la fecha (sino es larrrrgo ;)) al principio del inicio de sesión en modo a y según sea el movimiento agregas info al archivo (ten en cuenta manejar caracteres de espaciado y tabulado)

Etiquetas: mail, phpmailer
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 16:22.