Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/05/2012, 12:37
Avatar de Sensorium
Sensorium
 
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 17 años, 4 meses
Puntos: 7
Exclamación mail() dentro de for, envía mas de 60 veces al usuario

Hola estimados colegas, estoy teniendo un problema que me tiene un poco preocupado, el hecho es que tengo un Newsletter que envía promociones a todos los usuarios de mi base de datos una vez al día.

Este Newsletter verifica por usuario, las preferencias de envío y compone el email de acuerdo a lo seleccionado por el User.

Lo hemos probado con 4 o 5 emails sin problema pero cuando los hacemos con toda la base de datos(4000), me envía los emails duplicados en cuestión de 1 por segundo a la misma persona, pude llegar a constatar que recibí 120 emails a la vez.

Intentamos en vez de enviar el email, generamos un archivo guardando un log como si fuese enviado y este guarda todos los usuarios sin duplicados, por eso descartamos el script.


El codigo es algo similar a esto:

Código PHP:
foreach( $users as $u ):
            
$html_ofertas = array();
            
#
            
if( !empty($u->email)):
                
$userCats =  explode(","$u->preferer_cat_ids);
            
                foreach(  
$this->currentDeals as $cupon ):
                    
                    if( 
in_array$cupon->catg_id$userCats ) ):
                        
$html_ofertas[] = $this->htmlOferta($cupon);
                    endif;
                    
                endforeach;
                
                if( 
count$html_ofertas ) ):
                    
$message $this->htmlHeader(  ) . implode('',$html_ofertas) . $this->htmlFotter($u);
                    
$this->sendEmailToUser($u$message);
                endif;
                
            endif;
            
        endforeach;


   private function 
sendEmailToUser$user$message ){
        
$from            "Mi Empresa <[email protected]>";
        
$headers         "From: $from\r\n";
        
$headers        .= "Content-type: text/html\r\n";
        
$email_subject   "Tus ofertas para hoy";
        
mail($user->email$email_subject$message$headers); 
    } 
Se agradece cualquier ayuda!
__________________
Artis