Foros del Web » Programando para Internet » PHP »

Error con phpmailer correo masivo

Estas en el tema de Error con phpmailer correo masivo en el foro de PHP en Foros del Web. Hola tengo el siguiente archivo q funciona basicamente asi tengo un form donde voy a redactar asunto, email, mensaje (para enviar un email multiple) en ...
  #1 (permalink)  
Antiguo 07/05/2013, 16:27
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Error con phpmailer correo masivo

Hola tengo el siguiente archivo q funciona basicamente asi tengo un form donde voy a redactar asunto, email, mensaje (para enviar un email multiple)
en el input email capturo todas las direcciones de correo que han sido seleccionadas previamente mediante un check
ya hice la prueba individual y sale el problema lo obtengo aca porque trabajo con arrays alguien me puede ayudar no encuentro el error :/



Código PHP:
require_once('../Connections/connection.php'); 
require(
"../phpmailer/class.phpmailer.php");
if (
$_POST['action'] == "send") {
    
$varname $_FILES['archivo']['name'];
    
$vartemp $_FILES['archivo']['tmp_name'];
     
     
$mail = new PHPMailer();
$mail->Host "localhost";

     
$email $_POST[email2];
    
$mensaje.= $_POST['mensaje']."\n\n";
    
    
// asunto del email
    
$subject $_POST[asunto];
$mail->From $_POST[email2];
 if (
$varname != "") {
        
$mail->AddAttachment($vartemp$varname);
    }
$mail->FromName "Plantel";
$mail->Subject $_POST['asunto'];
$emails $_POST[email];
foreach (
$emails as $email) {
     
$mail->AddAddress($email);
}

//$mail->AddAddress($address, "Probando");
$body .= $mensaje;
$mail->Body $body;
if(!empty( 
$file_name )) { 
$mail->AddAttachment($_FILES["archivo"]["tmp_name"], $_FILES["archivo"]["name"]);  } 
if(!
$mail->Send()) {
  echo 
"Mailer Error: " $mail->ErrorInfo;
} else {
  echo 
"¡Mensaje Enviado!";
}
}


if(!empty(
$_POST['email'])) {  
$aLista=$_POST['email'];  
mysql_select_db($database_connection$connection);
$sql.= "SELECT * FROM informesp where Folio IN (".implode(',',$aLista).")";  
$rsmysql_query($sql$connection) or die(mysql_error());
if(
mysql_num_rows($rs)>0)  
{    
  
    while(
$row mysql_fetch_assoc($rs)) 
    { 
 echo 
'<form action="" method="post" enctype="multipart/form-data">';
  


  
$Folio $Folio.$row["Email"].",";
          
          } 
        
$Folio substr($Folio0strlen($Folio)-1);
   
    echo 
'<input type="text" name="email[]"   value="'.$Folio.'"  />';





     



      echo 
' <tr valign="middle">';
       echo 
' <td height="45" ><div align="left"><font size="2">Asunto:</font></div></td>';
        echo 
'  <td height="45"><input type="text" name="asunto"   value=""  /></td>';
      echo 
'  </tr>';
      
      
      echo 
' <tr valign="middle">';
        echo 
' <td height="45" ><div align="left"><font size="2">Adjuntar archivo:</font></div></td>';
        echo 
'<input type="file" size="25" id="caja" name="archivo" style="width:400px"/>';
       echo 
'  </tr>';
        echo 
'<input type="text" name="email2"   value=""  />';
        
     echo 
' <tr valign="middle">';
       echo 
' <td height="45" ><div align="left"><font size="2">Mensaje:</font></div></td>';
        echo 
'  <td height="45"><textarea name="mensaje" cols="32"  ></textarea></td>';
      echo 
'  </tr>';
    echo 
'  <tr valign="baseline">';
  echo 
'  <td><input type="submit" value="Cancelar " /></td>';
      echo 
'  <td> <input type="image" name="btsend" src="img/CorreoE3Bn_r12_c9.png" border="0" id="btsend" alt="" /></td>';
   echo 
'   </tr>';
   echo 
'   </table>';
 
  echo 
'  <input type="hidden" name="action" value="send" />';
  echo 
'</form>';

 


?> 
  #2 (permalink)  
Antiguo 07/05/2013, 16:33
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: Error con phpmailer correo masivo

Hola, me alegra que decidieras usar phpmailer.

Que error es que el que tienes??
Te genera algun error podrias mostrarlo??

Si todos los correos los tienes en un array, lo mejor sería que hicieras una función que se encargue de realizar el envío de los correos, y que a dicha función unicamente le pases como parámetros, el correo del destinatario, el nombre, el cuerpo del mensaje y el asunto por mensionar algunos campos.

Y que dicha función la llames dentro de un bucle, ya sea for o foreach para hacer los envíos individuales.
  #3 (permalink)  
Antiguo 07/05/2013, 16:52
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

gracias mira asi envio mi email require("../phpmailer/class.phpmailer.php");
Código PHP:
if ($_POST['action'] == "send") {
    
$varname $_FILES['archivo']['name'];
    
$vartemp $_FILES['archivo']['tmp_name'];
     
     
$mail = new PHPMailer();
$mail->Host "localhost";

     
$email $_POST[email2];
    
$mensaje.= $_POST['mensaje']."\n\n";
    
    
// asunto del email
    
$subject $_POST[asunto];
    
$address $_POST[email2];
$mail->AddAddress($address"Probando");

 if (
$varname != "") {
        
$mail->AddAttachment($vartemp$varname);
    }
$mail->FromName "Plantel";
$mail->Subject $_POST['asunto'];
$address $_POST[email];

//$mail->AddAddress($address, "Probando");
$body .= $mensaje;
$mail->Body $body;
if(!empty( 
$file_name )) { 
$mail->AddAttachment($_FILES["archivo"]["tmp_name"], $_FILES["archivo"]["name"]);  } 
if(!
$mail->Send()) {
  echo 
"Mailer Error: " $mail->ErrorInfo;
} else {
  echo 
"¡Mensaje Enviado!";
}



y asi puse mi form

Código PHP:
if(!empty($_POST['email'])) {  
$aLista=$_POST['email'];  
mysql_select_db($database_connection$connection);
$sql.= "SELECT * FROM informesp where Folio IN (".implode(',',$aLista).")";  
$rsmysql_query($sql$connection) or die(mysql_error());
if(
mysql_num_rows($rs)>0)  
{    
  
    while(
$row mysql_fetch_assoc($rs)) 
    { 
 echo 
'<form action="" method="post" enctype="multipart/form-data">';
  


  
$Folio $Folio.$row["Email"].",";
          
          } 
        
$Folio substr($Folio0strlen($Folio)-1);
   
    echo 
'<input type="text" name="email[]"   value="'.$Folio.'"  />';





     



      echo 
' <tr valign="middle">';
       echo 
' <td height="45" ><div align="left"><font size="2">Asunto:</font></div></td>';
        echo 
'  <td height="45"><input type="text" name="asunto"   value=""  /></td>';
      echo 
'  </tr>';
      
      
      echo 
' <tr valign="middle">';
        echo 
' <td height="45" ><div align="left"><font size="2">Adjuntar archivo:</font></div></td>';
        echo 
'<input type="file" size="25" id="caja" name="archivo" style="width:400px"/>';
       echo 
'  </tr>';
        echo 
'<input type="text" name="email2"   value=""  />';
        
     echo 
' <tr valign="middle">';
       echo 
' <td height="45" ><div align="left"><font size="2">Mensaje:</font></div></td>';
        echo 
'  <td height="45"><textarea name="mensaje" cols="32"  ></textarea></td>';
      echo 
'  </tr>';
    echo 
'  <tr valign="baseline">';
  echo 
'  <td><input type="submit" value="Cancelar " /></td>';
      echo 
'  <td> <input type="image" name="btsend" src="img/CorreoE3Bn_r12_c9.png" border="0" id="btsend" alt="" /></td>';
   echo 
'   </tr>';
   echo 
'   </table>';
 
  echo 
'  <input type="hidden" name="action" value="send" />';
  echo 
'</form>'
Envio el Mensaje y me arroja el Mensaje

¡Mensaje Enviado!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com)' at line 1

quite el for en email y bueno hice una prueba para enviar un solo email y si funiono pero aqui no supongo que me faltan algunas cosas :/
  #4 (permalink)  
Antiguo 07/05/2013, 16:58
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: Error con phpmailer correo masivo

ok, mira
Cita:
$aLista
es la lista de correos??
Porque si es la lista de correos entonces debes encerrar en comillas simples cada correo porque el error que muestras es de sintaxis si no me equivoco es en la consulta
  #5 (permalink)  
Antiguo 07/05/2013, 17:04
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

Cita:
Iniciado por alex1084 Ver Mensaje
ok, mira

es la lista de correos??
Porque si es la lista de correos entonces debes encerrar en comillas simples cada correo porque el error que muestras es de sintaxis si no me equivoco es en la consulta
Le puse las comillas pero marca el siguiente error
Warning: implode() [function.implode]: Invalid arguments passed i
  #6 (permalink)  
Antiguo 07/05/2013, 17:55
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

Como lo tengo al ultimo hace lo siguiente me manada el email solo q no lo veia jejeje (correo no deseado)
pero solo me lo manda al primer email
y sigue el mismo error ¡Mensaje Enviado!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
  #7 (permalink)  
Antiguo 07/05/2013, 18:24
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

cambie esto
Código PHP:
$email_v $_POST[email];
    
$emails   implode(", ",$email_v); 
    foreach (
$email_v as $emails)  {
     
$mail->AddAddress($email);

¡Mensaje Enviado!You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com,@....mx)' at line 1
  #8 (permalink)  
Antiguo 07/05/2013, 18:54
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

hice cambios en for y ahora me muestra lo sig
Invalid address: [email protected],.....com You must provide at least one recipient email address. Mailer Error: You must provide at least one recipient email address.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@hotmail.com,[email protected])' at line 1
  #9 (permalink)  
Antiguo 08/05/2013, 09:35
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

Alguien tiene alguna idea porque cuando mando un salo mensaje si se envia aunque el rror de mysql lo sigue mandando pero cuando mando a mas de un destinatario me marca Invalid address????'
  #10 (permalink)  
Antiguo 08/05/2013, 09:58
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: Error con phpmailer correo masivo

si quito el for y lo dejo solo asi

$mail->AddAddress($_POST[email]);

me da este error
  #11 (permalink)  
Antiguo 08/05/2013, 16:41
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años, 7 meses
Puntos: 47
Respuesta: Error con phpmailer correo masivo

Hola birss, retomando el tema.

Mira has los envíos en forma individual, porque cuando haces esto

Código PHP:
Ver original
  1. $email_v = $_POST[email];
  2.     $emails   = implode(", ",$email_v);  
  3.     foreach ($email_v as $emails)  {
  4.      $mail->AddAddress($email);
  5. }

lo que estas haciendo es añadiendo muchas cuentas de correo para un mismo envío y sin duda eso te genera los errores ya que si las cuentas de correo no van separadas las tomará como una unica cuenta y eso es error.

En mi caso tengo una función que se encarga de los envíos con el phpmailer

Código PHP:
Ver original
  1. function sendMail($Asunto,$emailPara,$nombrePara,$email_de,$nombre_de,$email_copia,$nombre_copia, $body){
  2.     $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
  3.     $mail->IsSMTP(); // telling the class to use SMTP  
  4.     try {
  5.       $mail->SMTPDebug  =  0;//2;                // enables SMTP debug information (for testing)
  6.       $mail->SMTPAuth   = true;                  // enable SMTP authentication
  7.       $mail->AddAddress($emailPara, $nombrePara);//Destinatario
  8.       $mail->SetFrom($email_de, $nombre_de); //Remitente
  9.       $mail->Subject = $Asunto; //asunto
  10.       $mail->AltBody = 'Para ver el mensaje es necesario usuar un cliente de correo compatible con HTML!'; // optional - MsgHTML will create an alternate automatically
  11.       //$mail->MsgHTML(file_get_contents('contents.html')); //Cuerpo HTML
  12.       $mail->MsgHTML($body); //Cuerpo HTML
  13.       $mail->Send();
  14.       $echo ="1";
  15.     } catch (phpmailerException $e) {
  16.       $echo = $e->errorMessage(); //Pretty error messages from PHPMailer
  17.     } catch (Exception $e) {
  18.       $echo = $e->getMessage(); //Boring error messages from anything else!
  19.     }
  20.     return $echo;
  21. }

Luego cuando necesito hacer envíos de correo independientemente de la cantidad de destinatarios lo que hago es lo siguiente

Código PHP:
Ver original
  1. <?php
  2. foreach($list as $reg){
  3.     $body ="el mensaje";
  4.     sendMail("Asunto",$reg->e_mail,$reg->ape_y_nom,"[email protected]","Nombre de quien envia","la coapia email","nombre", $body);
  5. }
  6. ?>

Etiquetas: correo, masivo, mysql, phpmailer, select, sql
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 14:11.