Foros del Web » Programando para Internet » PHP »

Envio controlado de correos con phpmailer

Estas en el tema de Envio controlado de correos con phpmailer en el foro de PHP en Foros del Web. Hola amig@s, que tal??? Quiero saber si es posible, mediante phpmailer, hacer un envio controlado. Para ser mas claro, quiero que mande un correo y ...
  #1 (permalink)  
Antiguo 13/08/2004, 16:21
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 20 años, 7 meses
Puntos: 0
Información Envio controlado de correos con phpmailer

Hola amig@s, que tal???
Quiero saber si es posible, mediante phpmailer, hacer un envio controlado. Para ser mas claro, quiero que mande un correo y me imprima en pantalla:
Código PHP:
echo "Envio a ".$correo." completado."
por cada uno de los correos enviados o de lo contrario, que me indique que cuenta fallo y pq. Digamos que seria loggear la actividad del mailer.
Ademas de eso quiero saber si puedo comprobar automaticamente que cuentas existen y cuales no, sin tener que esperar a que me llegue el correo del daemon para tener que quitar yo mismo la direccion de la base.
Y por ultimo, como agrego extra headers a mi mail??? Siempre hablando de phpmailer, porsupuesto.
Bueno, muchas gracias a tod@s
Saludos

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
  #2 (permalink)  
Antiguo 13/08/2004, 20:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El control del e-mail .. sobre si se envió o no .. si usas envio por SMTP (no forzando a PHP Mailer que use mail() de PHP) puedes usar:

Código PHP:
if(!$mail->Send())
{
   echo 
"Message was not sent";
   echo 
"Mailer Error: " $mail->ErrorInfo;
}
else
{
   echo 
"Message has been sent";

Ejemplos extraidos del tutorial del própio PHP Mailer class:
http://phpmailer.sourceforge.net/tutorial.html

El tema de comprobar una dirección de e-mail .. en teoría si envias el e-mail por SMTP .. en el $mail->ErrorInfo deberías obtener el mensaje de error si la cuenta no existe o hay algún problema .. Pero, como la mayoría de servidores SMTP disponen de "relay" con el cual se le indica que "intente" más veces la entrega del e-mail al destinatario no sé que respuesta obtendras ahí .. Sería cosa de probarlo.

De todas formas .. podría probar otros ejemplos para tal fin (que usan la misma técnica en princio de envio por SMTP):

Ejemplos:
http://px.sklar.com/code.html?id=95
Y más en:
http://www.zend.com/codex.php?CID=11
(los que hablan de verificar los registros MX/DNS son los que necesitarías)

Los "extra" header's .. los añades con el método:
void AddCustomHeader (mixed $custom_header)

Supongo que si añades más de una cabecera extra .. tendrás que respetar los sáltos de línea \n para separar cada cabecera usada y su sintax como corresponda.

$mail->AddCustomHeader ("cabecera....\nOtracabecera.....");


Un saludo,
  #3 (permalink)  
Antiguo 14/08/2004, 21:05
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 20 años, 7 meses
Puntos: 0
Bien, eso fue de ayuda, gracias Cluster.
Ahora tengo otra duda, ya que hotmail en muchas oportunidades bloquea correos que tengan mas de un destinatario, quiero saber si es posible hacer que mande un unico correo por vez, para que en la linea "Para:" simplemente aparezca la direccion de correo del destinatario.
Gracias nuevamente

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
  #4 (permalink)  
Antiguo 15/08/2004, 14:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa un bucle y lee tus direcciones de algún sitio, lease: array, BD .. etc. Es decir .. no compongas tu "Para" pasando las direcciones separadas por comas ... sino que las lees de tu médio de almacenamiento y envias cada e-mail por separado con el bucle que leas ese array, BD o lo que corresponda.

Un saludo,
  #5 (permalink)  
Antiguo 15/08/2004, 22:54
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola Cluster.
Mira, hasta ahora lo que hacia era eso, meter las direcciones en un array y luego con un bucle irlas pasandolas al $mail->AddAddress() pero de esta manera me aparecen todas las direcciones en la etiqueta "Para:". Te muestro las dos formas que probe:
Código PHP:
<?php
for ($x 0$x <= count($emails)-1$x++) {
    
$mail->AddAddress($emails[$x]);
}
    if(!
$mail->Send()) {
       echo 
"Message not sent<br>";
       echo 
"Mailer Error: " $mail->ErrorInfo."<br>";
    }
?>
Código PHP:
<?php
for ($x 0$x <= count($emails)-1$x++) {
    
$mail->AddAddress($emails[$x]);
    if(!
$mail->Send()) {
       echo 
"Message not sent<br>";
       echo 
"Mailer Error: " $mail->ErrorInfo."<br>";
    }
}
?>
Con la primera, como te comente, me aparecen todas las direcciones, con la segunda unicamente manda a la primer direccion del array.
Se me ocurrio fijarme en la definicion de la clase a ver si encontraba algo que cerrara la conexion o algo similar luego de llamar la funcion Send() pero no encontre nada. Asi que no se donde mas buscar ni que otra cosa probar.
Gracias desde ya.

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
  #6 (permalink)  
Antiguo 16/08/2004, 06:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. te faltó hacer un:

$mail->ClearAddresses();

despues de enviar el e-mail (del $mail->send() )

Ese método borra las direcciones que empleastes .. sino, las acomula. Lo mismo tienes (otro método similar) para borrar los archivos adjuntos si es que los empleas...

(esto está en la documentación de la classe .. lee sus métodos)

Un saludo,
  #7 (permalink)  
Antiguo 16/08/2004, 15:51
Avatar de sktrpunk  
Fecha de Ingreso: septiembre-2003
Ubicación: Montevideo
Mensajes: 227
Antigüedad: 20 años, 7 meses
Puntos: 0
Si, lei toda la documentacion pero no se me ocurrio utilizar eso.
Muchisimas gracias
hasta pronto

AlvAro
__________________
- Sk8 FoR LiFe -
Stay away from my Black Book
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 23:02.