Foros del Web » Programando para Internet » PHP »

Problema con funcion mail

Estas en el tema de Problema con funcion mail en el foro de PHP en Foros del Web. Hola a todos!!! Tengo una pagina web en php en la cual hay un formulario de contacto. Resulta que cuando alguien me escribe recibo el ...
  #1 (permalink)  
Antiguo 06/08/2007, 09:09
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Problema con funcion mail

Hola a todos!!! Tengo una pagina web en php en la cual hay un formulario de contacto. Resulta que cuando alguien me escribe recibo el correo en mi bandeja de entrada, pero el problema esta en que no muestra ni los acentos ni las eñes ni algunos caracteres especiales..... Se que el problema es la funcion mail, pero ¿hay alguna forma de solucionar esto? Gracias de antemano.

Les pego el codigo para ver si les sirve de ayuda. Como les digo el formulario funciona perfectamente a excepcion de los acentos y eñes.

Código:
<?php


if (!defined('MODULE_FILE')) {
	die ("You can't access this file directly...");
}

require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
get_lang($module_name);

/**********************************/
/* Configuration                  */
/*                                */
/* You can change this:           */
/* $index = 0; (right side off)   */
/**********************************/
$index = 1;
$subject = "$sitename "._FEEDBACK."";
/**********************************/

include("header.php");
$cookie[0] = intval($cookie[0]);
if ($cookie[1] != "") {
	$row = $db->sql_fetchrow($db->sql_query("SELECT name, username, user_email FROM ".$user_prefix."_users WHERE user_id='$cookie[0]'"));
	if ($row['name'] != "") {
		$sender_name = $row['name'];
	} else {
		$sender_name = $row['username'];
	}
	$sender_email = $row['user_email'];
}

$form_block = "
    <center><font class=\"title\"><b>Mi pagina</b></font>
    <br><br><font class=\"content\">"._FEEDBACKNOTE."</font>
    <FORM METHOD=\"post\" ACTION=\"modules.php?name=$module_name\">
    <P><strong>"._YOURNAME.":</strong><br>
    <INPUT type=\"text\" NAME=\"sender_name\" VALUE=\"$sender_name\" SIZE=30></p>
    <P><strong>"._YOUREMAIL.":</strong><br>
    <INPUT type=\"text\" NAME=\"sender_email\" VALUE=\"$sender_email\" SIZE=30></p>
    <P><strong>"._MESSAGE.":</strong><br>
    <TEXTAREA NAME=\"message\" COLS=70 ROWS=15 WRAP=virtual>$message</TEXTAREA></p>
    <INPUT type=\"hidden\" name=\"opi\" value=\"ds\">
    <P><INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\""._SEND."\"></p>
    </FORM></center>
";

OpenTable();
if ($opi != "ds") {
	echo "$form_block";
} elseif ($opi == "ds") {
	if ($sender_name == "") {
		$name_err = "<center><font class=\"option\"><b><i>"._FBENTERNAME."</i></b></font></center><br>";
		$send = "no";
	}
	if ($sender_email == "") {
		$email_err = "<center><font class=\"option\"><b><i>"._FBENTEREMAIL."</i></b></font></center><br>";
		$send = "no";
	}
	if ($message == "") {
		$message_err = "<center><font class=\"option\"><b><i>"._FBENTERMESSAGE."</i></b></font></center><br>";
		$send = "no";
	}

	if ($send != "no") {

	 	$sender_name = $sender_name;
		$sender_email = $sender_email;
		$msg = "mipaginaweb.com\n\n";
		$msg .= ""._SENDERNAME.": $sender_name\n";
		$msg .= ""._SENDEREMAIL.": $sender_email\n";
		$msg .= ""._MESSAGE.": $message\n\n";
		$to = $adminmail;
		$mailheaders = "From: $sender_name <$sender_email>\n";
		$mailheaders .= "Reply-To: $sender_email\n\n";

		mail($to, $subject, $msg, $mailheaders);
		echo "<P><center>"._FBMAILSENT."</center></p>";
		echo "<P><center>"._FBTHANKSFORCONTACT."</center></p>";
	} 




	elseif ($send == "no") {
		OpenTable2();
		echo "$name_err";
		echo "$email_err";
		echo "$message_err";
		CloseTable2();
		echo "<br><br>";
		echo "$form_block";
	}
}

CloseTable();
include("footer.php");

?>
Por si les sirve de algo, esto es lo que me llega a mi correo cuando escribo en el formulario las palabras eñe camión camiòn:

Mensaje: e&ntilde;e camión cami&ograve;n<br />


Al parecer los acentos normales si que los escribe bien, pero los acentos abiertos, y las eñes no. ¿Alguna sugerencia?

Última edición por evilforces; 12/09/2007 a las 04:37
  #2 (permalink)  
Antiguo 06/08/2007, 09:55
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 17 años, 7 meses
Puntos: 2
Re: Problema con funcion mail

Hola, a mi me funciono añadiendo al header la siguente linea:
Código PHP:
$mailheaders .= "Content-type: text/html;  charset=utf-8\r\n"
Con esto me salen las ñ y los acentos áéíóú, de forma correcta tanto en mayúsculas como en minúsculas.

A ver si te funciona... creo que no en todos los servidores funciona, pero a mi de momento no me ha vuelto a dar problemas.
  #3 (permalink)  
Antiguo 06/08/2007, 09:56
Avatar de Infernal  
Fecha de Ingreso: septiembre-2004
Ubicación: Tamaulipas, Mexico
Mensajes: 124
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: Problema con funcion mail

El problema no es la funcion mail si no la codificacion de caracteres, en las cabeceras deberias de agregar la linea:

Código PHP:
$mailheaders .= "charset=utf-8"
aunque por lo visto el mensaje no pasa por htmlentities() o utf8_encode(), se me hace raro.
  #4 (permalink)  
Antiguo 06/08/2007, 10:05
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

Bueno, antetodo muchisimas gracias por la rapidez de vuestras respuestas.

He probado a poner una cabecera tal cual me habeis indicado y persiste el problema. Acabo de hacer una prueba enviando el mensaje camión camiòn eñe y esto es lo que he recibido:


Content-type: text/html; charset=utf-8

miweb.com

Tu Nombre: evilforces
Tu Email: [email protected]
Mensaje: camión cami&ograve;n e&ntilde;e<br />

La unica diferencia con lo anterior es que ahora sale arriba del todo la cabecera que me habeis indicado... pero el mensaje sigue saliendo mal. No se si sera que lo he puesto mal, pero simplemente he copiado y pegado lo que me habeis puesto debajo del ultimo $mailheaders que habia en el codigo.

¿Alguna solucion? Y gracias de nuevo de antemano!!!
  #5 (permalink)  
Antiguo 06/08/2007, 10:21
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 17 años, 7 meses
Puntos: 2
Re: Problema con funcion mail

yo he probado lo siguiente:
Código PHP:
<?php
$msg 
"mipaginaweb.com<br>";
$msg .= "ñÑ<br>";
$msg .= "áéíóú<br>";
$msg .= "àèìòù<br>";
$to "[email protected]";
$mailheaders "From: [email protected]\n";
$mailheaders .= "Reply-To: $sender_email\n\n";
$mailheaders .= "Content-type: text/html;  charset=utf-8\r\n"
mail($to$subject$msg$mailheaders);



?>
Y la respuesta fue correcta:
mipaginaweb.com
ñÑ
áéíóú
àèìòù

No sabria decirte más. A ver si alguien que sepa más que yo te puede echar una mano.
Saludos.

Pd: el campo: $mailheaders = "From: [email protected]\n"; es un poco distinto porque estoy usando el servidor IIS para el correo y si no pongo asi no me tira.
  #6 (permalink)  
Antiguo 06/08/2007, 10:33
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

Bueno acabo de hacer una prueba, y efectivamente, he comentado el codigo mio, y he copiado y pegado el que me has pasado tu amokiller y esto es lo que me ha llegado:

Content-type: text/html; charset=utf-8

mipaginaweb.com<br>ñÑ<br>áéíóú<br>àèìòù<br>

Como ves todo en una linea (eso si, los acentos graves y las ñ salen perfectas), y por supuesto esto no es una solucion definitiva, ya que con esto lo que hago es siempre enviar el mismo mensaje (no recojo datos del formulario).

Por lo tanto, veo que el problema puede estar en cuando recoje los datos del formulario para mandarlos a las variables...

A ver si alguien puede ver la solucion, porque yo estoy perdido ahora mismo.

Gracias de antemano!!!
  #7 (permalink)  
Antiguo 06/08/2007, 10:49
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 17 años, 7 meses
Puntos: 2
Re: Problema con funcion mail

que lector de correos usas¿? lo digo porque a mi eso me pasa cuando uso lectores que no leen HTML y lo muestran como texto.
Prueba a cambiar
Content-type: text/html; charset=utf-8
por
Content-type: text; charset=utf-8
si te llega bien puede que el error sea del lector de correos.
Es lo unico que se me ocurre
:p
  #8 (permalink)  
Antiguo 06/08/2007, 10:50
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

Utilizo Gmail como lector de correos.... Ya lo se que es un problema muy raro.. yo tampoco lo entiendo la verdad... Estoy desde esta mañana dandole vueltas y todo es probar cosas que he buscado en internet y nada de nada.... Espero que le haya pasado a alguien mas y me pueda ayudar en algo.....

Voy a probar lo ultimo que me has dicho, pero me temo que no va a ser la solucion...
  #9 (permalink)  
Antiguo 06/08/2007, 10:53
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 17 años, 7 meses
Puntos: 2
Re: Problema con funcion mail

perdón..
si usas
Content-type: text; charset=utf-8
tienes que cambiar los "<br> por "\n"
se me olvidó.
jejeje

aunque yo tambien uso gmail y no me da problemas.
prueba a crear un nuevo archivo php y pones el codigo que te pegué antes. Acuerdate de cambiar el correo. si aun así te da el mismo problema... pues ni p### idea.
  #10 (permalink)  
Antiguo 06/08/2007, 10:56
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

He probado la ultima solucion, y lo mismo de siempre

Mensaje: e&ntilde;e camión cami&ograve;n<br />


Una cosa que no entiendo tampoco es de donde sale la <br/> porque en el codigo creo que no esta
  #11 (permalink)  
Antiguo 06/08/2007, 12:40
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

Bueno estoy haciendo algunas pruebas y sacando algunas conclusiones. Resulta que la pagina donde tengo el formulario es una pagina creada en php-nuke. La segunda cosa es que tengo instalado un editor avanzado del tipo (lo que ves es lo que tienes) el tinymce. Resulta que haciendo pruebas he descubierto que por ejemplo si pongo un link lo que recibe en la variable mensaje para enviar es todo el codigo html, lo mismo si pongo alguna opcion de alineacion me sale lo de <div align=\"justify\">, etc, etc...

Por lo tanto, el problema viene cuando se le pasa el mensaje del formulario a la funcion mail() que le llega todo en formato html y lo envia tal cual le llega, sin transformarlo de ninguna manera.

¿Hay alguna forma de poder decirle a la variable mensaje, que se transforme en html o incluso que se transforme almenos en texto plano para que asi envie texto normal y no con caracteres raros?

La verdad es que ya no se que hacer... todo es hacer pruebas y no encuentro explicacion a esto...

Una ayudita por favor...

EDITO--- He realizado otra prueba, le he dicho que me imprima por pantalla el mensaje una vez se ha enviado y SORPRESA por pantalla me aparece el mensaje perfectamente con sus tildes y sus eñes.

Espero sirva de algo esto.

Última edición por evilforces; 06/08/2007 a las 12:46 Razón: Mas conclusiones
  #12 (permalink)  
Antiguo 06/08/2007, 16:20
 
Fecha de Ingreso: septiembre-2006
Mensajes: 81
Antigüedad: 17 años, 7 meses
Puntos: 5
Re: Problema con funcion mail

intenta con este:
Content-Type: text/html; charset=iso-8859-1
  #13 (permalink)  
Antiguo 07/08/2007, 02:13
 
Fecha de Ingreso: agosto-2007
Mensajes: 15
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con funcion mail

Hola compañero, esto es lo que recibo ahora mismo poniendo lo que me indicas:

Content-Type: text/html; charset=iso-8859-1
mipaginaweb.com

Tu Nombre: evilforces
Tu Email: micorreo
Mensaje: prueba camión cami&ograve;n e&ntilde;e<br />

Me sigue intrigando el porque sale lo del <br/>
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 19:51.