Foros del Web » Programando para Internet » PHP »

PhpMailer SMTP Class

Estas en el tema de PhpMailer SMTP Class en el foro de PHP en Foros del Web. Hola, Necesito ayuda con la clase phpMailer ya que necesito configurarla para que me envie correos personalizados por cada destinatario. Actualmente la tengo asi: Código: ...
  #1 (permalink)  
Antiguo 04/07/2011, 03:43
 
Fecha de Ingreso: marzo-2008
Mensajes: 12
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta PhpMailer SMTP Class

Hola,

Necesito ayuda con la clase phpMailer ya que necesito configurarla para que me envie correos personalizados por cada destinatario. Actualmente la tengo asi:

Código:
foreach($users as $user){

$mail = new PHPMailer(true); 

$mail->IsSMTP(); // telling the class to use SMTP

try {
  $mail->Host = $server[ip]; // SMTP server
  $mail->Timeout=3;
  $mail->SMTPDebug = 0;                    // enables SMTP debug information (for testing)
  $mail->AddAddress(''.$user.'', '');
  $mail->SetFrom(''.$from[address].'', '');
  $mail->Subject = '$asunto';
  $mail->MsgHTML('Mensaje para $user');
  $mail->Send();
}
}
De esta forma:

- Conecta al servidor SMTP
- Envia Correo
- Cierra conexcion SMTP
- Conecta de nuevo al servidor SMTP
- Enviar Correo
....

Alguien sabría ayudarme para que no conecte cada vez que se quiera enviar un email, es decir:

- Conecte con el servidor SMTP
- Establezca todods los emails a enviar, es decir, destinatario y mensaje personalizado para ese destinatario
- Cierre la conexión SMTP

Gracias de antemano
  #2 (permalink)  
Antiguo 04/07/2011, 05:00
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: PhpMailer SMTP Class

Utiliza el mismo código pero el método $mail->AddAddress(''.$user.'', ''); debe estar dentro de un foreach donde cada elemento es una dirección de correo. Respecto del mail "personalizado" debes implementar una solución donde para cada destinatario exista un tipo de email. En cada vuelta del bucle asignas el mensaje.
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 04/07/2011, 05:17
 
Fecha de Ingreso: marzo-2008
Mensajes: 12
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: PhpMailer SMTP Class

Gracias! Mira mi código ahora, envia en la misma conexión a los correos establecidos en el bucle pero me envía el mismo mensaje a todos los emails, siempre el ultimo $user del foreach. No consigo que se establezca un texto para cada usuario.

Código:
$mail = new PHPMailer(true); 

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $server[ip]; // SMTP server
$mail->Timeout=3;
$mail->SMTPDebug = 0; 
$mail->SetFrom(''.$from[address].'', '');
$mail->Subject = '$asunto';

foreach($users as $user){

  $mail->AddAddress(''.$user.'', '');
  $mail->MsgHTML('Mensaje para $user');
 
}

 $mail->Send();
  #4 (permalink)  
Antiguo 04/07/2011, 05:46
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: PhpMailer SMTP Class

En $users tienes las direcciones de correo tipo:

$users = array(1 => "[email protected]" , 2 => "[email protected]"); //etc

Ahora necesitas los mensajes, cada mensaje requiere una identificación para ligarlo al usuario, la forma más simple es:

$msg = array(1 => "Mensaje de bienvenida" , 2 => "Mensaje de rechazo"); //etc

Al mandar mail a $users[1], le asignas como mensaje el valor de $msg[1]; esto lo haces dentro del mismo bucle.

Esta es la implementación más básica y creo que por ahora la que más te conviene.
Espero tus comentarios, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 04/07/2011, 05:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 12
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: PhpMailer SMTP Class

He solucionado el problema. Aquí dejo el código

Código:
$mail = new PHPMailer(true); 

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $server[ip]; // SMTP server
$mail->Timeout=3;
$mail->SMTPDebug = 0; 
$mail->SetFrom(''.$from[address].'', '');
$mail->Subject = '$asunto';

foreach($users as $user){

  $mail->AddAddress(''.$user.'', '');
  $mail->MsgHTML('Mensaje para $user');
  $mail->Send();
}
Es necesario insertar $mail->Send(); dentro del bucle.

Aparte de eso en la clase phpmailer he remplazado las líneas:

throw new phpmailerException ..... la linea entera por return false;

Si no se cambian esas lineas si no puede enviarse a un correo se detiene el proceso.

Saludos

Etiquetas: email, smtp
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:48.