Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 13 Agosto 2010, 00:27 am



Título: Funcion mail() error para ultimo argumento (return-path)
Publicado por: Diabliyo en 13 Agosto 2010, 00:27 am
Buenas.

Tengo un servidor dedicad en donde estoy configurando un sistema personalizado de envío de mails, el sistema básicamente utiliza la función mail() para enviar los correos.

El Servidor dedicado esta corriendo sobre GNU/Linux y tengo los siguientes deamons corriendo:

  • postfix  - Servidor SMTP.
  • dovecot - IMAP, POP.
  • salsauthd - Autentificacion.
  • dkim-milter - Firma de Dominio que se integra como cabecera extra en los mails (DKIM).
  • Apache+PHP+Mysql - Servidor HTTP con soporte PHP, MySQL.

Por lo general si se arma un mail en PHP y se envian los parametros basicos: mail($to, $subject, $cuerpo, $headers ) por defecto postfix (servidor SMTP) coloca automaticamente la cabecera Return-Path como: apache@hostname.dominio, pero yo quiero que aparezca la direccion del mail del que esta enviando el correo.

La opcion que encontre, es simplemente agregando una argumento extra a la funcion mail(), quedando asi: mail($to, $subject, $cuerpo, $headers, $extra_arg).

En donde $extra_arg, puede ser: $extra_arg= '-f'. $from; (-fELCORREO@DOMINIO.COM).

Pero por razones que desconozco (o por el estres que traigo encima) mi pequeño script Sendmail.php (que tengo de prueba), al momento de establecer el Return-Path en el INPUT TEXT, simplemente se queda en blanco todo, vaya, no sale el mensaje que si se envio o no el correo :(.

Por otro lado, si omito pasarle a la funcion mail() el argumento extra, este procesa perfecto, se envia el mail y efectivamente llega... Pero el Return-Path esta como NO lo quiero.

Aqui script:

Código
  1. <?php
  2. if( isset($_POST["boton"]) && !strcmp($_POST["boton"], "Enviar") )
  3.   {
  4.   echo '<span>';
  5.   $boundary= md5(time()); //valor boundary
  6.   $htmlalt_boundary= $boundary. "_htmlalt"; //boundary suplementario
  7.   $subject=$_POST["asunto"];
  8.   $from= $_POST["from"];
  9.   $to= $_POST["to"];
  10.   # if( !empty($_POST["return_path]) ) )
  11.   $extra_arg= '-ferror@midominio.com';
  12.   # else      $extra_arg= NULL;
  13.  
  14.   //cabeceras para enviar correo en formato HTML
  15.   $headers = "MIME-Version: 1.0\r\n";
  16.   $headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
  17.   $headers .= "From: ". $from. "\r\n"; //correo del que lo envia
  18.  
  19.   //incia cuerpo del mensaje que se visualiza
  20.   $cuerpo="--". $boundary. "\r\n";
  21.   $cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $htmlalt_boundary. "\"\r\n\r\n"; //contenido alternativo: texto o html
  22.   $cuerpo .= "--". $htmlalt_boundary. "\r\n";
  23.   $cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n";
  24.   $cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";
  25.   $cuerpo .= $_POST["mensaje"];
  26.   $cuerpo .= "\r\n\r\n";
  27.   $cuerpo .= "--". $htmlalt_boundary. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar
  28.   $cuerpo .= "--". $boundary. "--\r\n\r\n";
  29.  
  30.   if( mail($to, $subject, $cuerpo, $headers, $extra_arg) == FALSE )
  31.      echo 'Correo enviado con exito...';
  32.   else
  33.      echo 'Error al enviar...';
  34.   echo '</span>';
  35.   }
  36.  
  37. echo '<table>
  38. <form action="sendmail.php" method="POST">
  39. <td>From:</td><td><input type="text" name="from"></td><tr>
  40. <td>To:</td><td><input type="text" name="to"></td><tr>
  41. <td>Asunto:</td><td><input type="text" name="asunto"></td><tr>
  42. <td colspan="2">Mensaje:</td><tr>
  43. <td colspan="2"><textarea name="mensaje"></textarea></td><tr>
  44. <td colspan="2"><input type="submit" name="boton" value="Enviar"></td>
  45. </form>
  46. </table>';
  47. ?>

Saludos !


Título: Re: Funcion mail() error para ultimo argumento (return-path)
Publicado por: Diabliyo en 13 Agosto 2010, 01:18 am
Listo el script Sendmail.php (http://pastebin.com/WLVibxn0) tenia un error de sintaxis, tenia escrito emtpy en vez de empty, ya con eso salen con el Return-Path personalizado.

Saludos !