Bueno, no utilizé utf8_encode() ni utf8_decode porque no sabía que existían jeje.
htmlspecialchars() no sirve para transformar caracteres acentuados o eñes.
En Hotmail me llegan en la bandeja de entrada, sin ningún tipo de advertencia y el cuerpo del mensaje en blanco totalmente, inclusive si busco algo viendo el código fuente no encuentro nada.
Utilizaré el utf8_encode() a ver si se soluciona el problema de Yahoo! Mientras tanto me preocupa mucho el hecho de que llegue de esa forma a Hotmail porque mucha gente usa ese servicio.
Saludos.
Ahora que utilizé utf8_encode() estoy habilitado a decir que no funcionó, me llegó bien a GMail pero a Yahoo! me siguen llegando esos horribles caracteres.
Yo deseo que al revisar esos caracteres acentuados en el código fuente se vean sus entidades y no los caracteres acentuados. Sólo lo he logrado en un archivo de prueba con htmlentities() pero a la hora de enviar los emails no funcionan.
Ahora estoy intentando usar SMTP con PHPMailer para ver si puedo solucionar el tema de Hotmail y el cuerpo de mensaje vacío.
Saludos.
Asunto solucionado con Hotmail.
Sólo tengo que autenticar el servidor SMTP con PHPMailer de la siguiente manera:
Código PHP:
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Username = '[email protected]';
$mail->Password = '*****';
Ahora se unió Hotmail a Yahoo! en el problemas de los caracteres acentuados.
GMail es el único que lee perfectamente los caracteres.
Uso un texto de prueba que es:
Código:
Lórém ípsúm dálor sit amet, ...
El cual llega perfecto a Gmail pero en Yahoo! y Hotmail llega así:
Código:
Lórém Ã*psúm dálor sit amet, ...
Saludos y espero que me ayuden.
Seguí avanzando con mis pruebas y errores y no doy con la respuesta.
Utilizé htmlentities() pero me seguía devolviendo los caracteres acentuados y no las entidades de los mismos.
¿Tendrá algo que ver $_POST?
Porque he hecho una prueba en un archivo aparte y funcionó bien.
Intenté también con strtr() y no me reemplaza los caracteres de $_POST['texto'].
Cada vez estoy más convencido de que es $_POST.
Seguiré haciendo pruebas y se los informaré.
RESOLVÍ EL PROBLEMA!!!!
Al parece include() tiene un raro funcionamiento en cuanto a caracteres especiales.
Al principio del script yo llamo al archivo modelo.php que contiene dos variables ($cuerpo que contiene más variables y código HTML y $cuerpo2 con variables y texto plano).
La forma de solucionarlo es que al usar la variable $cuerpo tengo que incluiro dentro de la función utf8_decode().
Esta línea
Código PHP:
$mail->Body = $cuerpo;
debe escribirse
Código PHP:
$mail->Body = utf8_decode($cuerpo);
y listo, asunto solucionado.
Gracias a todos los que me ayudaron.
Oh lo siento el gracias es sólo y unicamente para mi

También debe llevarse el crédito un post de este mismo foro pero como no puedo colocar URL... y su creador que al igual que yo lo solucionó sólo.
Saludos.