Foros del Web » Programando para Internet » PHP »

Enviando emails

Estas en el tema de Enviando emails en el foro de PHP en Foros del Web. Hola, he estado usando el PHPmailer para enviar correos desde mi localhost y me fue fabuloso.... estuve realizando una aplicacion para enviar mensajes a emails ...
  #1 (permalink)  
Antiguo 06/03/2009, 11:18
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Enviando emails

Hola, he estado usando el PHPmailer para enviar correos desde mi localhost y me fue fabuloso.... estuve realizando una aplicacion para enviar mensajes a emails que busco de una BD. Por el momento me ha resultado sencillo enviarlo a todos los emails registrados, pero tengo 2 problemas:

1. no puedo enviar a correos con otros caracteres: por ejemplo [email protected]

2.En mi bd tengo registrado por el momento 8 correos, lo malo es que al ultimo registro le llega 1 mensaje al penultimo 2 mensajes... y al primer correo registrado le llega 8 mensajes repetidos entienden? quisiera que solo le llegue un mensaje a cada email.

Aqui les dejo mi codigo, espero me puedan ayudar en solo esas partes, saludos

Código PHP:
<?php
//ADJUNTAMOS LOS MODULOS DE LA CARPETA MODULES
define("DIR_CARPETA_MODULOS","../modules/");
require_once(
DIR_CARPETA_MODULOS."conectar.php");

//DATOS DEL FORMULARIO
$asunto $_POST['asunto'];
$mensaje $_POST['mensaje'];
$mensajeN str_replace("\n","<br>",$mensaje);
$fecha_envio date('d/m/Y'time());
$fecha_envio htmlentities($fecha_envio);

//ADJUNTAMOS LA CLASE DE PHPMAILER
require("includes/phpmailer.php");
//AUTENTIFICANDO SMTP
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host "mail.server.com";
$mail->Port=26;
$mail->CharSet "utf-8";
$mail->SMTPAuth true;
$mail->Username "[email protected]";
$mail->Password "noloveas";

//HACEMOS UNA BUSQUEDA DE TODOS LOS CORREOS
$sql="select paciente_email from paciente";
$rs=mysql_query($sql,$c) or die( mysql_error() );

while(
$row mysql_fetch_array($rs)){
    
$email $row['paciente_email'];
    
    if(
$email==""){
        echo 
"descartado";//Como hay campos NULL lo descarto para que no salga el error del string
    
}
    else{
        
//ARMANDO PROPIEDADES DEL PHPMAILER
        
$mail->From "[email protected]";
        
$mail->Subject $asunto;
        
$mail->AddAddress($email,"Tu Nombre");
        
        
//ARMANDO CUERPO DEL PHPMAILER
        
$mail->IsHTML(true); // set email format to HTML
        
$mail->Body "mensaje";
        if(!
$mail->Send()){
            echo 
"Mailer Error: " $mail->ErrorInfo;
        }else{
            echo 
"Message enviado a: ".$email."<br>";
        }

    }
}
?>
__________________
Quitenme la vida pero no la bebida.
  #2 (permalink)  
Antiguo 06/03/2009, 11:26
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Enviando emails

No he usado PHPMailer antes, pero según lo que dices y lo que veo, es posible que en AddAddress se concatenen cada correo, por lo que a la primera pasada, solo envie uno, a la segunda, envie dos (al que envio ya y al nuevo), y así sucesivamente, esto dara que al primero le envie 8 porque se ha enviado 8 veces el correo.

Espero haberme explicado.

Leyendo un poco, quizás si agregas esto después de enviar cada email, te ayude
$mail->ClearAddresses();
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 06/03/2009, 11:27
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Enviando emails

Con tu primera duda no se a que te refieres.

Con la 2da, tienes que hacer un $mail->ClearAddresses() antes de volver a pasar por el bucle.

EDIT:
Cita:
No he usado PHPMailer antes, pero según lo que dices y lo que veo, es posible que en AddAddress se concatenen cada correo, por lo que a la primera pasada, solo envie uno, a la segunda, envie dos (al que envio ya y al nuevo), y así sucesivamente, esto dara que al primero le envie 8 porque se ha enviado 8 veces el correo.

Espero haberme explicado.
Asi es, por eso hay que usar la funcion ClearAddresses() para limpiar las direcciones.
  #4 (permalink)  
Antiguo 06/03/2009, 11:30
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Enviando emails

gracias por sus respuestas, probare las 2 opciones, o concatenar o limpiar las direcciones..... la primera pregunta me refiero es que si un correo lleva un guión o underline.... no lo envia, bueno luego les comentaré como me fue.
__________________
Quitenme la vida pero no la bebida.
  #5 (permalink)  
Antiguo 06/03/2009, 11:35
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Enviando emails

No te hemos dado dos opciones, solo una, el limpiar después de enviar cada mail.
Quizás lo de los caracteres extraños tenga que ver más con tu DB que con la aplicación, imprime el email una vez hagas la consulta en PHP a ver como sale.

Saludos

EDITADO:

O quizás haya una segunda opción:

He visto esto:
* $priority - This sets the mail priority by default. Values: 1 = High, 3 = Normal, 5 = Low
* $to_name - This is the name of the person you are sending to
* $to_email - The E-Mail address of the person you are sending to
* $From - The E-Mail address you want to send from
* $FromName - The Name of the sender.
Quiere decir que son las variables definidas en la clase, si en vez de agregar las direcciones como lo haces, asignas valores a estas y envias, no tendrás que limpiarlas.

Uhm, de todos modos es solo una idea, no puedo estar seguro completamente porque no lo he usado :P

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #6 (permalink)  
Antiguo 06/03/2009, 11:37
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Enviando emails

Bueno me faltaba el ClearAddresses(), ahora esta perfecto. gracias Ronruby
saludos
__________________
Quitenme la vida pero no la bebida.
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 00:07.