Foros del Web » Programando para Internet » PHP »

problemas con un caracter extraño al enviar por mail()

Estas en el tema de problemas con un caracter extraño al enviar por mail() en el foro de PHP en Foros del Web. Hola buenas, tengo un problema, mando una serie de datos a través de un campo oculto, lo envio de esta forma porque es la única ...
  #1 (permalink)  
Antiguo 02/09/2008, 05:04
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
problemas con un caracter extraño al enviar por mail()

Hola buenas, tengo un problema, mando una serie de datos a través de un campo oculto, lo envio de esta forma porque es la única disponible en el pago mediate tarjeta de crédito, el caso es que lo que mando es esto:

<INPUT type="hidden" value="Numero Operacion: 02092008.120933_cas-//-Nombre: 2/2 2-//-Empresa: 2-//-Nif: 2-//-Direccion: 2-//-Ciudad: 2-//-Provincia: 2-//-Postal: 2-//-Pais: 2-//-Telefono2-//-Email:[email protected]//-------------------------------------------------<br><br>Producto:
barro definidor<br><br>-//-Precio: 15.00<br><br>-//-Cantidad: 1<br><br>-//-Producto: gel moldeador<br><br>-//-Precio: 13.00<br><br>-//-Cantidad: 1<br><br>-//-**[email protected]**??2/2 2??o//o02092008.120933_caso//o" name="Descripcion">

Aquí como se puede apreciar no aparece ningún carácter extraño, sin embargo cuando recojo los datos y los envío por mail me parece de vez en cuando no siempre, algo como esto:

Producto: gel moldeador
Precio: 13.00
Cantid! ad: 1

He puesto en rojo y negrita de donde sale esa palabra en particular, como pueden ver aparece un ! seguido de un espacio en blanco. He puesto que me muestre en pantalla lo que
realmente manda a través de mail y en esa visualización el campo se ve correcto, así que en principio o es un error de codificación de la forma que envío el mail o no se.

Aparte del código htm y de la función que pongo para que los datos de arriba aparezcan mejor presentado, le paso estas cabeceras para que se vea el html en el correo:

$cabeceras = 'MIME-Version: 1.0' . "\r\n";
//$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$cabeceras .= 'From: Tienda <'.$para.'>' . "\r\n";

He probado tanto con iso como con utf y sigue habiendo el mismo problema.

Alguien sabe cual puede ser el problema?

Un saludo
__________________
asp, php, .net, adaptandose a las necesidades
  #2 (permalink)  
Antiguo 04/09/2008, 05:19
 
Fecha de Ingreso: febrero-2002
Ubicación: Navarra
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 2
Respuesta: problemas con un caracter extraño al enviar por mail()

Hola buenas he echo este ejemplo con los datos que paso del formulario, a ver si alguien ve algo raro para que aparezcan las jodidas exclamaciones de vez en cuando:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>preubas</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="envio.php?enviar=si">
<INPUT type="hidden" value="Numero Operacion: 02092008.120933_cas-//-Nombre: 2/2 2-//-Empresa: 2-//-Nif: 2-//-Direccion: 2-//-Ciudad: 2-//-Provincia: 2-//-Postal: 2-//-Pais: 2-//-Telefono: 2-//-Email: [email protected]//-------------------------------------------------<br><br>Producto: barro definidor<br><br>-//-Precio: 15.00<br><br>-//-Cantidad: 1<br><br>-//-Producto: gel moldeador<br><br>-//-Precio: 13.00<br><br>-//-Cantidad: 1<br><br>-//-**[email protected]**??2/2 2??o//o02092008.120933_caso//o" name="Descripcion">
  <input type="submit" name="button" id="button" value="Enviar" />
</form>



<?

if ($_GET['enviar'] == "si") {


$mensaje   = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Tienda</title></head><body style="margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px;">';
	
	$mensaje   .= '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#000000"></td></tr><tr><td>&nbsp;</td></tr><tr><td style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;"><div style="padding-left:35px;">';
	

$recogermail = explode("**", $_POST['Descripcion']);
$mail = str_replace("[Con CVV2]","",$recogermail[1]); 

$recogernombre = explode("??", $_POST['Descripcion']);
$nombreapellidos = str_replace("[Con CVV2]","",$recogernombre[1]); 

$recogernumoperacion = explode("o//o", $_POST['Descripcion']);
$numerodeoperacionweb = str_replace("[Con CVV2]","",$recogernumoperacion[1]); 

$mensaje   .= '<span>Se ha realizado un pago.<br></span>';
$mensaje   .= '<span>'.str_replace("o//o".$numerodeoperacionweb."o//o","",str_replace("??".$nombreapellidos."??","",str_replace("**".$mail."**","",str_replace("[Con CVV2]","",str_replace("-//-","<br>",$_POST['Descripcion'])))))."</span><br>";
$mensaje   .= '<span>Importe total: '.$_POST['Importe'].'<br></span>';



$mensaje .= '</div><tr><td>&nbsp;</td></tr><tr><td><p style="padding-left:35px;">&nbsp;</p></td></tr><tr><td bgcolor="#EBEBEB"><div style="padding-left:35px;"><p style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;"><br>Este mensaje se dirige exclusivamente a su destinatario y puede contener informaci&oacute;n privilegiada o confidencial. Si no es vd. el destinatario indicado, queda notificado de que la utilizaci&oacute;n, divulgaci&oacute;n y/o copia sin autorizaci&oacute;n est&aacute; prohibida en virtud de la legislaci&oacute;n vigente. Si ha recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente por esta misma v&iacute;a y proceda a su destrucci&oacute;n.</p><p style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;">Antes de imprimir este correo electr&oacute;nico piense bien si es necesario hacerlo: El medioambiente es cosa de todos.<br><br></p></div></td></tr></td></tr></table></body></html>';

	
	$para     = '[email protected]';
	$asunto    = 'Compra productos tienda web (castellano)';
// Para enviar correo HTML, la cabecera Content-type debe definirse
$cabecerastienda  = 'MIME-Version: 1.0' . "\r\n";
$cabecerastienda .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$cabecerastienda .= 'From: '.$nombreapellidos.' <'.$mail.'>' . "\r\n";

//-----------------------------------------------------------------------

$cabeceras  = 'MIME-Version: 1.0' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$cabeceras .= 'From: Tienda Compras <'.$para.'>' . "\r\n";
	

	
	mail($para, $asunto, $mensaje, $cabecerastienda);
	
	mail($mail, $asunto, $mensaje, $cabecerastienda);
	
echo $mensaje;

}
?>


</body>
</html>
Saludos
__________________
asp, php, .net, adaptandose a las necesidades
  #3 (permalink)  
Antiguo 04/09/2008, 06:03
 
Fecha de Ingreso: junio-2008
Mensajes: 10
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problemas con un caracter extraño al enviar por mail()

Hola, yo tengo exactamente el mismo problema que tú.

La cosa es que en algunos servidores me va bien y en otros no.

He buscado información por ahí y habría que poner en la cabecera
"Content-Transfer-Encoding: base64"

y luego en el cuerpo
rtrim(chunk_split(base64_encode($contents)))

Prueba si te funciona, aunque a mi no me termina de ir bien.

El problema principal está en que hay que partir la cadena del contenido, pero no se me ocurre la manera de partir la cadena, si se te ocurre la manera, te lo agradecería mucho.

Suerte.

Saludos.
  #4 (permalink)  
Antiguo 04/09/2008, 08:38
 
Fecha de Ingreso: junio-2008
Mensajes: 10
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: problemas con un caracter extraño al enviar por mail()

Hola, he conseguido resolverlo. Al menos para el servidor donde fallaba.

El problema está en la longitud de las líneas html que se deben cortar.

Para lograrlo debes calcular antes de empezar a crear la cadena de contenido todas las variables que necesites calcular y el contenido en lugar de crearlo de la manera:
$mensaje .= '<html>';
$mensaje .= '<body>';
...
$mensaje .= '</html>';

Debes crearla de la manera
$mensaje .= '<html>
<body>
...
</body>
</html>';

le quitas los espacios que haya por la izquierda, debes crear la cadena html de una vez, nada de .=
Unicamente la puedes romper para añadir tus variables:
$mensaje .= '<html>
<body>
<span>' . $variable . '</span>
</body>
</html>';

De esta forma quitas las incordiosas admiraciones en el cuerpo.

Pruébalo y me cuentas.

Saludos.
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 15:51.