tengo esta funcion para enviar el mail por phpmailer
Código PHP:
   #Funcion que envia el Mail via SMTP
function envia($destinatario,$asunto,$cuerpo,$headers){
 
    //Definimos las variables globales
    global $smtp_user,$smtp_pass,$smtp_host,$from,$realname,$mail;
    //Definimos las propiedades y llamamos a los métodos 
    //correspondientes del objeto mail
    $mail->IsSMTP();
    //Con la propiedad Mailer le indicamos que vamos a usar un 
    //servidor smtp
    $mail->Mailer    = "smtp";
    
    //Puerto que usaremos
    $mail->Port=25;
    
    //Asignamos a Host el nombre de nuestro servidor smtp
    $mail->Host = $smtp_host; 
    
    //Le indicamos que el servidor smtp requiere autenticación
    $mail->SMTPAuth = true;
    
    //Le decimos cual es nuestro nombre de usuario y password
    $mail->Username = $smtp_user; 
    $mail->Password = $smtp_pass; 
    
    //Indicamos cual es nuestra dirección de correo y el nombre que 
    //queremos que vea el usuario que lee nuestro correo
    $mail->From = $from; ///////////////////ESTO ES EL PROBLEMA /////////////
    $mail->FromName = $realname; 
    
    //el valor por defecto 10 de Timeout es un poco escaso dado que voy a usar 
    //una cuenta gratuita, por tanto lo pongo a 30  
    $mail->Timeout=10;
    
    //Indicamos cual es la dirección de destino del correo
    $mail->ClearAllRecipients();
    $mail->AddAddress($destinatario);
    
    //Asignamos asunto y cuerpo del mensaje
    //El cuerpo del mensaje lo ponemos en formato html, haciendo 
    //que se vea en negrita
    
    //hacemos unos cambios para ver que onda
    $cuerpo = stripslashes ($cuerpo);
    $cuerpo_text = str_replace ('</p>', '
    
    ', $cuerpo);
    $cuerpo_text = str_replace ('<br>', '
    ', $cuerpo_text);
    $cuerpo_text = strip_tags ($cuerpo_text);
    
    $mail->Subject = $asunto;
    
    $mail->Body = $cuerpo;
    
    //Definimos AltBody por si el destinatario del correo no admite email con formato html 
    $mail->AltBody = $cuerpo_text;
    
    //se envia el mensaje, si no ha habido problemas 
    //la variable $exito tendra el valor true
    $exito = $mail->Send();
    
    //Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho 
    //para intentar enviar el mensaje, cada intento se hara 5 segundos despues 
    //del anterior, para ello se usa la funcion sleep    
    $intentos=1; 
    while ((!$exito) && ($intentos < 5)) {
    sleep(5);
        //echo $mail->ErrorInfo;
        $exito = $mail->Send();
        $intentos=$intentos+1;    
    
    }
    
    if(!$exito)
    {
    $mensaje .= "Problemas enviando correo electrónico a  ".$valor;
    $mensaje .= "<br>".$mail->ErrorInfo;    
    }
} 
    $mail->From = $from; ///////////////////ESTO ES EL PROBLEMA /////////////
si el FROM no es el usuario SMTP llega automaticamente como spam.
¿Porqué?
¿alguna solución?
 
 






