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
<?php { echo '<span>'; $htmlalt_boundary= $boundary. "_htmlalt"; //boundary suplementario $subject=$_POST["asunto"]; $from= $_POST["from"]; $to= $_POST["to"]; # if( !empty($_POST["return_path]) ) ) $extra_arg= '-ferror@midominio.com'; # else $extra_arg= NULL; //cabeceras para enviar correo en formato HTML $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados $headers .= "From: ". $from. "\r\n"; //correo del que lo envia //incia cuerpo del mensaje que se visualiza $cuerpo="--". $boundary. "\r\n"; $cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $htmlalt_boundary. "\"\r\n\r\n"; //contenido alternativo: texto o html $cuerpo .= "--". $htmlalt_boundary. "\r\n"; $cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n"; $cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n"; $cuerpo .= $_POST["mensaje"]; $cuerpo .= "\r\n\r\n"; $cuerpo .= "--". $htmlalt_boundary. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar $cuerpo .= "--". $boundary. "--\r\n\r\n"; echo 'Correo enviado con exito...'; else echo 'Error al enviar...'; echo '</span>'; } echo '<table> <form action="sendmail.php" method="POST"> <td>From:</td><td><input type="text" name="from"></td><tr> <td>To:</td><td><input type="text" name="to"></td><tr> <td>Asunto:</td><td><input type="text" name="asunto"></td><tr> <td colspan="2">Mensaje:</td><tr> <td colspan="2"><textarea name="mensaje"></textarea></td><tr> <td colspan="2"><input type="submit" name="boton" value="Enviar"></td> </form> </table>'; ?>
Saludos !