New question

Question:

Date: 24-03-2020 13:31:22 (In Spanish)

Enviar correo a cada usuario de mi base de datos[Resolved]

Hola amigos, tengo un problema al querer enviar un correo a cada miembro de mi base de datos, lo que quiero hacer en sí es:

Que por medio de CRON, se envíe a cada miembro su estado de cuenta, lo he hecho todo bien, a cada miembro se envía un correo, pero cuando abres el correo se envía dentro del BODY uno tras otro TODOS los estados de cuenta....quisiera saber como arreglo esto ya que el cliente me lo está exigiendo... espero me puedan echar una mano.

Quiero que se envíe uno a uno el correo con su respectivo estado de cuenta.

Aquí mi código:

try{
    $st = $conn->prepare("SELECT A.user_id,
    CONCAT(A.first_name,' ',A.last_name) AS names, A.mail,
    C.id, C.payment, C.receipt, C.month, DATE_FORMAT(C.date, '%d/%M/%Y') AS date
    FROM users A
    LEFT JOIN payments C
    ON C.id = A.user_id
    WHERE mail IS NOT NULL GROUP BY id ORDER BY last_name ASC");
    $st->execute();
    while($row = $st->fetch(PDO::FETCH_ASSOC)){
        $address = "$mail";  // aqui se llena con los correos de todos los usuarios por medio del while

        $email = "noreply@mail.com";

        $e_subject = 'Estado de cuenta';
            $e_content .= 'blah blah blah....'; // aqui es donde va el cuerpo del mensaje...donde va el estado de cuenta de cada uno


        $msg = wordwrap( $e_content, 70 );

        $headers = "From: $email" . PHP_EOL;
        $headers .= "Reply-To: $email" . PHP_EOL;
        $headers .= "BCC: administrador <admin@mail.com>" . PHP_EOL;
        $headers .= "MIME-Version: 1.0" . PHP_EOL;
        $headers .= "Content-type: text/html; charset=utf-8" . PHP_EOL;
        $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

        if(mail($address, $e_subject, $msg, $headers)) {

            echo "Email enviado!";

        } else {

            echo 'ERROR!';

        }
    }
} catch(PDOException $exception){
    error_log($exception->getMessage());
    echo "Error: " . $exception->getMessage();
}
php while
Tags: Cron Jobs - Email - MySQL - PHP - PHP PDO Votes: 0 - Answers: 2 - Views: 9 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 25-03-2020 09:37:49 Hola Joaquín,
    Por lo que compartiste el problema está en que estás concatenando los resultados en la variable $e_content

    Modifiqué un poco tu código:

    try{
        $st = $conn->prepare('SELECT A.user_id,
        CONCAT(A.first_name,\' \',A.last_name) AS names, A.mail,
        C.id, C.payment, C.receipt, C.month, DATE_FORMAT(C.date, \'%d/%M/%Y\') AS date
        FROM users A
        LEFT JOIN payments C
        ON C.id = A.user_id
        WHERE mail IS NOT NULL GROUP BY id ORDER BY last_name ASC');
        $st->execute();
    
        $email = 'noreply@mail.com';
        $e_subject = 'Estado de cuenta';
        while($row = $st->fetch(PDO::FETCH_ASSOC)){
            $e_content = '';
            $address = $mail;  // aqui se llena con los correos de todos los usuarios por medio del while
    
            $e_content .= 'blah blah blah....'; // aqui es donde va el cuerpo del mensaje...donde va el estado de cuenta de cada uno
    
    
            $msg = wordwrap( $e_content, 70 );
    
            $headers = "From: {$email}" . PHP_EOL;
            $headers .= "Reply-To: {$email}" . PHP_EOL;
            $headers .= 'BCC: administrador <admin@mail.com>' . PHP_EOL;
            $headers .= 'MIME-Version: 1.0' . PHP_EOL;
            $headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL;
            $headers .= 'Content-Transfer-Encoding: quoted-printable' . PHP_EOL;
    
            $result = 'Email enviado';
            if(!mail($address, $e_subject, $msg, $headers)) {
                $result = 'ERROR!';
            }
    
            echo $result;
        }
    } catch(PDOException $exception){
        error_log($exception->getMessage());
        echo 'Error: ' . $exception->getMessage();
    }
    


    Espero te sirva.

    Saludos
      Votes: 0 - Link answer
     
  • Date: 29-03-2020 07:15:37 Hola, al fin pude solucionar mi problema.... en realidad era bastante fácil...

    Lo único que hice fue que al final del while antes del
     } 
    , agregue
     NULL 
    a cada variable quedando de la siguiente forma:

    try{
        $st = $conn->prepare("SELECT A.user_id,
        CONCAT(A.first_name,' ',A.last_name) AS names, A.mail,
        C.id, C.payment, C.receipt, C.month, DATE_FORMAT(C.date, '%d/%M/%Y') AS date
        FROM users A
        LEFT JOIN payments C
        ON C.id = A.user_id
        WHERE mail IS NOT NULL GROUP BY id ORDER BY last_name ASC");
        $st->execute();
        while($row = $st->fetch(PDO::FETCH_ASSOC)){
            $address = "$mail";  // aqui se llena con los correos de todos los usuarios por medio del while
    
            $email = "noreply@mail.com";
    
            $e_subject = 'Estado de cuenta';
                $e_content .= 'blah blah blah....'; // aqui es donde va el cuerpo del mensaje...donde va el estado de cuenta de cada uno
    
    
            $msg = wordwrap( $e_content, 70 );
    
            $headers = "From: $email" . PHP_EOL;
            $headers .= "Reply-To: $email" . PHP_EOL;
            $headers .= "BCC: administrador <admin@mail.com>" . PHP_EOL;
            $headers .= "MIME-Version: 1.0" . PHP_EOL;
            $headers .= "Content-type: text/html; charset=utf-8" . PHP_EOL;
            $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
    
            if(mail($address, $e_subject, $msg, $headers)) {
    
                echo "Email enviado!";
    
            } else {
    
                echo 'ERROR!';
    
            }
            //aqui agrego las variables para limpiarlas
            $mail = null;
            $e_content = null;
        }
    } catch(PDOException $exception){
        error_log($exception->getMessage());
        echo "Error: " . $exception->getMessage();
    }
    
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In