¿Cómo envío un correo electrónico a una matriz de correo electrónico obtenido de la base de datos con otros datos?

He tenido problemas para usar phpmailer para enviar correos electrónicos masivos, sin embargo, no hay problema con un solo correo electrónico.

aquí está mi código:

$result = mysql_query("select * from $to",$conn) or die("list 
            selected  ($to) does not exist ".mysql_error());

while ($row = mysql_fetch_array($result))
{           
    $email[] = $row['email'];           
    $student[] = $row['name'];
}

foreach ($email as $val => $uemail) {
    $email = $uemail;
    $students= $student[$val] ;

    require("class.phpmailer.php");
        $mail = new PHPMailer(true); 

    try {
           $mail->AddReplyTo('info@bratim.com', 'My Name');
           $mail->AddAddress("$email", "$student");
           $mail->SetFrom('info@me.com', 'MyName');
           $mail->AddReplyTo('info@me.com', 'My nameg');
           $mail->Subject = "$sub";

           $mail->MsgHTML("Dear $student<br> $msg <br>
             <img src=\"$path\"> <p>

             $host_upper
            ______________________________________________________
            THIS IS AN AUTOMATED RESPONSE. 
            ***DO NOT RESPOND TO THIS EMAIL****

             ");
            $mail->AddAttachment("$path2");      // attachment

          $mail->Send();
          echo "Message Sent OK to $email  </p>\n";
    } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
        echo $e->getMessage(); //Boring error messages from anything else!
    } 
}

Cualquier ayuda, sugerencia será apreciada.

preguntado el 04 de julio de 12 a las 10:07

2 Respuestas

Puede enviar el correo dentro del ciclo while:

<?php
require_once("class.phpmailer.php");

$result = mysql_query('SELECT `email`, `student`, `data1` FROM `students` ORDER BY `email` ASC;');

while ( $row = mysql_fetch_assoc($result) )
{
    $current_mail = new PHPMailer(true);

    $current_mail->AddReplyTo('info@bratim.com', 'My Name');
    // ....
    $current_mail->Send();
    unset($current_mail);
}
?>

Respondido 04 Jul 12, 11:07

Gracias, no fui lo suficientemente sensato. Es perfecto ahora - kplus

usted asigna $student[$val] a $students dentro del foreach pero luego asignas la matriz $student a su objeto phpmailer:

$mail->AddAddress("$email", "$student");

no debería ser

 $mail->AddAddress("$email", "$students");

aparte de eso, es una mala práctica crear una instancia de un nuevo objeto de correo para cada correo electrónico que tiene que enviar, solo debe hacer un ciclo en las variables dinámicas como AddAddress y mantenga todas las demás fuera para evitar sobrecargas, y recuerde borrar las variables que cambiarán, como el AddAddress, Así:

require_once("class.phpmailer.php");
$result = mysql_query("select * from $to",$conn) or die("list selected  ($to) does not exist ".mysql_error());

          while ($row = mysql_fetch_array($result))
    {

        $email[] = $row['email'];

        $student[] = $row['name'];
    }

$mail = new PHPMailer(true); 
try {
            $mail->AddReplyTo('info@bratim.com', 'My Name');
            $mail->SetFrom('info@me.com', 'MyName');
            $mail->AddReplyTo('info@me.com', 'My nameg');
            $mail->Subject = "$sub";
            $mail->AddAttachment("$path2"); 
            foreach ($email as $val => $uemail) {
                $email = $uemail;
                $students= $student[$val] ;

                $mail->AddAddress("$email", "$students");
                $mail->MsgHTML("Dear $student<br> $msg <br>
                <img src=\"$path\"> <p>

             $host_upper
            ______________________________________________________
            THIS IS AN AUTOMATED RESPONSE. 
            ***DO NOT RESPOND TO THIS EMAIL****

             ");
              $mail->Send();
              $mail->ClearAddresses();
            echo "Message Sent OK to $email  </p>\n";
              }
            } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
           } catch (Exception $e) {
          echo $e->getMessage(); //Boring error messages from anything else!
             } 
            }

Respondido 04 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.