Foros del Web » Programando para Internet » PHP »

La función mail() y sus cabeceras

Estas en el tema de La función mail() y sus cabeceras en el foro de PHP en Foros del Web. Bien como me recomendó pateketrueke muy acertadamente, me he leído lo más atentamente posible este link http://es2.php.net/manual/es/function.mail.php. He entendido lo siguiente, que aunque se menciona ...
  #1 (permalink)  
Antiguo 27/12/2010, 09:14
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
La función mail() y sus cabeceras

Bien como me recomendó pateketrueke muy acertadamente, me he leído lo más atentamente posible este link http://es2.php.net/manual/es/function.mail.php.

He entendido lo siguiente, que aunque se menciona que las cabeceras son un dato opcional, resulta obligatorio al menos definir un valor de From o bien en la variable que corresponde a las cabeceras dentro de la propia función mail o bien en php.ini asignándole un valor.

La página php.net dice:

Cita:
Cuando se envía un correo, el correo debe contener una cabecera From. Puede establecerse con el parámetro additional_headers, o puede definirse un valor por defecto en php.ini.

Si no se realiza esta acción se obtendrá un mensaje de error similar a Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. La cabecera From también establece Return-Path bajo Windows.
Bueno ahora voy con mi código php para ejecutar la acción de enviar los datos del formulario a través de la funcion mail(), que es el siguiente:

Cita:
<?php

$nombre = $_REQUEST["nombre"];
$remitente = $_REQUEST["email"];
$destino= "[email protected]";
$asunto= $_REQUEST["asunto"];
$mensaje= $_REQUEST["mensaje"];

$mensaje = wordwrap($mensaje, 70);

$encabezados = "From: $remitente" . "\r\n" . "Reply-To: $remitente" . "\r\n" . 'Content-type: text/plain';

mail($destino, $asunto, $mensaje, $encabezados) or die ("Su mensaje no pudo ser enviado.");

?>
He puesto en negrita aquellos elementos que me generan ciertas dudas. Por ejemplo los CRLF (\r\n), en la misma página se avisa de que algunos "servidores SMTP" reemplazan los LF por CRLF duplicándose el \r por lo que en ese caso sólo habría que usar \n. ¿Esta información es actual?

La página tambien dice: "Cada línea debería ser separada por un LF (\n)". Yo al poner $mensaje = wordwrap($mensaje, 70); garantizo un máximo de 70 caracteres por línea ¿Pero y el \n? en mi código no se donde debería aparecer una instrucción.

Se que para un texto en html es necesario indicar en la variable de los encabezados "Content-Type: text/html; charset=iso-8859-1" ¿Para texto plano es recomendable?

Mi finalidad es enviar un correo a través del servidor de correo de la empresa que me brinda hosting "ovh" y recibirlo en un correo con formato [email protected] que sería recibido en mi pc usando tambén esos mismos servidores. Siguiendo el ejemplo de este tutorial http://guias.ovh.es/EmailConfigurationThunderBird.

Como última duda referente a los encabezados veo que mucha gente en sus ejemplos menciona que el colocarlos dentro de una sola variable les da problemas. ¿Alguien sabe a qué puede deberse el hecho de que escriban: $cabecera = x; $cabecera . = y; $cabecera . =w;?



Eso es todo, intenté colocarlo todo en un mismo post para ser lo más preciso posible.


Gracias por vuestra atención de antemano.
  #2 (permalink)  
Antiguo 27/12/2010, 09:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: La función mail() y sus cabeceras

Cita:
La página tambien dice: "Cada línea debería ser separada por un LF (\n)". Yo al poner $mensaje = wordwrap($mensaje, 70); garantizo un máximo de 70 caracteres por línea ¿Pero y el \n? en mi código no se donde debería aparecer una instrucción.
El \n es necesario para las cabeceras y $mensaje es parte del cuerpo.

Cita:
Como última duda referente a los encabezados veo que mucha gente en sus ejemplos menciona que el colocarlos dentro de una sola variable les da problemas. ¿Alguien sabe a qué puede deberse el hecho de que escriban: $cabecera = x; $cabecera . = y; $cabecera . =w;?
Esto es la primera vez que veo, pero no tiene sentido.


Cita:
Se que para un texto en html es necesario indicar en la variable de los encabezados "Content-Type: text/html; charset=iso-8859-1" ¿Para texto plano es recomendable?
Si, es necesario. En tu ejemplo podrías declarar también el charset ( no siempre es iso ).

La forma de saber si tu código es correcto, sería probandolo.

PD: entiendo que quieras aprender, pero yo preferiría usar una librería como "swift" que hace casi todo y además tiene logg de errores. Sin nombrar que se configura en 5 minutos...
  #3 (permalink)  
Antiguo 27/12/2010, 09:26
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: La función mail() y sus cabeceras

Cita:
Iniciado por walterdevel Ver Mensaje
El \n es necesario para las cabeceras y $mensaje es parte del cuerpo.

Si, es necesario. En tu ejemplo podrías declarar también el charset ( no siempre es iso ).

PD: entiendo que quieras aprender, pero yo preferiría usar una librería como "swift" que hace casi todo y además tiene logg de errores. Sin nombrar que se configura en 5 minutos...
Cita:
Mensaje a enviar.

Cada línea debería ser separada por un LF (\n). Las líneas no deberían ser más largas de 70 caracteres.
Ok miraré lo de declarar el charset y a ver si encuentro la librería swift para PHP 5.3.

Gracias por los consejos.
  #4 (permalink)  
Antiguo 27/12/2010, 09:32
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: La función mail() y sus cabeceras

Respecto al charset, yo en el head de mi web uso charcharset=utf-8.

¿Cómo lo ves?
  #5 (permalink)  
Antiguo 27/12/2010, 09:50
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: La función mail() y sus cabeceras

Cita:
Iniciado por Gambinoh Ver Mensaje
Respecto al charset, yo en el head de mi web uso charcharset=utf-8.

¿Cómo lo ves?
En realidad no depende del charset de tu web, posiblemente si del contenido que envias, además del charset que acepta el servidor de destino ( por ej. gmail, yahoo, etc ).
  #6 (permalink)  
Antiguo 27/12/2010, 10:21
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: La función mail() y sus cabeceras

Cita:
Iniciado por walterdevel Ver Mensaje
En realidad no depende del charset de tu web, posiblemente si del contenido que envias, además del charset que acepta el servidor de destino ( por ej. gmail, yahoo, etc ).
Mi servidor de correo de destino es el servidor de la empresa que hospeda mi web.

- su servidor POP de recepción : ns0.ovh.net o mail.dominio.com o pop3.dominio.com
- su servidor SMTP de envío : ns0.ovh.net o smtp.dominio.com

Digamos que mi idea era usar http://guias.ovh.es/EmailConfigurationThunderBird y así podría tener mi propia dirección de correo adecuada a mi dominio. Mi dominio también está alojado en esa empresa así que en principio esa era la estrategia a seguir.

Agradecería cualquier consejo, conste que mi idea es añadir una especie de Captcha abajo del formulario para evitar el spam. La idea del correo con dominio propio es para las respuestas a los usuarios que indicando un email correcto me hayan mandado un mensaje a través del formulario.

¿En este caso veis algun problema?


También he pensado en añadirle a mi código al final:

echo "<p>El siguiente mensaje ha sido enviado correctamente:<p>";
echo "<br>$mensaje";

Etiquetas: cabeceras, mail
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 05:07.