Foro Hospedaje y Dominios Foro Hospedaje y Dominios
Nueva Discusión

¡Hola Forastero!

Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!

Acceder con Facebook Acceder con Google Acceder con OpenID Acceder con Twitter
Cambiar el remitente por defecto en funcion mail()
  • Los que useis la función mail en vuestros scripts recordar que podeís modificar el remitente que llegará a vuestros usuarios para que no figure el hostname de la maquina y si un email relacionado con vuestra Web. Un ejemplo del codigo podría ser :


    $hora = date(\"d-m-Y_H:i\");
    $de_email = \"[email=\"webmaster@miweb.com\"]webmaster@miweb.com[/email]\";
    $email = \"[email=\"usuario@hotmail.com\"]usuario@hotmail.com[/email]\";
    $asunto = \"[Mensaje enviado a las $hora]\";
    $mensaje = \"Mensaje de aviso[$hora]\";

    mail($email, $asunto, $mensaje, \"From: $de_email\");


    Se puede incluso poner un email inexistente como remitente, resumiendo simplemente hay que añadir el From: en la funcion de mail.

    mail($email, $asunto, $mensaje, "From: $de_email");
  • Me gustaría complementar lo escrito por Daniel, sugiriendo otra forma de indicar el remitente en la función mail() de PHP.

    De hecho, con este código que os pongo aquí podéis especificar uno a uno los tradicionales campos de la cabecera del mail, con lo que el aspecto del mail cuando lo recibe el destinatario es muy profesional.

    Además, al poder especificar el campo "content-type", tenemos la posibilidad de que el "cuerpo" del mail sea en formato HTML !!!! es decir: con formatos, estilos, imagenes, tablas, etc..!!!!

    Estoy seguro de que os gustará ;)

     

    // definir los detalles de la cabecera del email
    // campo a campo
    $headers = \"MIME-Version: 1.0\r\n\";
    $headers .= \"Content-type: text/html; charset=iso-8859-1\r\n\";
    $headers .= \"From: Asesores & Consultores Web <$remitente>\r\n\";
    $headers .= \"Reply-To: $remitente\r\n\";
    $headers .= \"Return-path: $remitente\r\n\";
    // construir una \"página HTML\" que será el mail-HTML
    $cuerpo = \"
    <html>
    <head>
    <title>$asunto</title>
    </head>
    <body>
    <img src=\"http://www.mi_dominio.com/mi_imagen.gif\">
    </body>
    </html>\";
    // woilaaa... enviar
    mail($destinatario,$asunto,$cuerpo,$headers);

  • Hola.
    Yo uso las cabeceras para la función mail() y va bien casi todo. En ellas es posible también determinar que se adjuntan ficheros y esto permite enviar correos con ficheros adjuntos. Pero hete aquí que sólo me manda los adjuntos cuando son pequeños (creo que menores de 1K). Supongo que es algo de la configuración de php o del servidor. ¿Alguien puede echar una manita?

    -Aquí teneis información sobre envío de ficheros adjuntos con php.
    - Y aquí, pero menos explicada.
  • caos30 said:
    Me gustaría complementar lo escrito por Daniel, sugiriendo otra forma de indicar el remitente en la función mail() de PHP.
    De hecho, con este código que os pongo aquí podéis especificar uno a uno los ................
    ..................

    ...........// woilaaa... enviar
    mail($destinatario,$asunto,$cuerpo,$headers);

    [/code]


    Bien , funciona, pero ¿como evitar que coja a hospedajeydominos como sender?

    Ejemplo de codigo:
    $remitente= "[email="info@email.es"]info@email.es[/email]";
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "From: AN V RC <$remitente>\r\n";
    $headers .= "Reply-To: $remitente\r\n";
    $headers .= "Return-path: $remitente\r\n";

    Ejemplo de lo que recibe el destinatario:
    ____________
    de: AN V RC
    [email="parainfo@velarc.es"]para destino@email.es[/email]
    fecha: 23 de septiembre de 2008 9:30
    asunto: Asunto
    enviado por: sas1.hospedajeydominios.com
    _______________________
    aun habiendo puesto como
    $remitente= [email="info@email.es"]info@email.es[/email]
  • Para los que usamos Drupal, wordpress o cualquier otro siempre es mejor usar un modulo que añada la función de enviar emails por smtp, asi tenemos todo el control sobre los envios, saludos
  • Hola a todos,
    varios años despues, necesito abrir este tema ya que no puedo encontrar la solución a mi problema. He cambiado a php5 y no funciona ningún formulario.

    Tengo un formulario en una web de una empresa. Me comentan que les llegan peticiones desde la web con el remitente [email]micorreo@re9.servidor-de-dns.com[/email]. ¿Como puedo sustituir re9.servidor-de-dns.com, por "micorreo"?

    Os dejo el código. Muchas gracias.

    CODIGO
    <?<br />
    // definimos las variables o marcamos el error
    if ( !empty($_POST['nombres']) ) $nombres = $_POST['nombres']; else $error = true;
    if ( !empty($_POST['apellidos']) ) $apellidos = $_POST['apellidos']; else $error = true;
    if ( !empty($_POST['email']) ) $email = $_POST['email']; else $error = true;
    if ( !empty($_POST['asunto']) ) $asunto = $_POST['asunto']; else $error = true;
    if ( !empty($_POST['mensaje']) ) $mensaje = $_POST['mensaje']; else $error = true;

    // verificamos que no exista un error
    if ( !empty($error) ) {
    header( 'Location: error.php' );
    die;
    }

    // definimos el cuerpo del email
    $cuerpo = "
    De: $nombres \n\r
    Apellidos: $apellidos \n\r
    Email: $email \n\r
    Asunto: $asunto \n\r
    Mensaje: \n\r
    $mensaje
    ";

    // Cabeceras
    $remitente= "meltinweb@meltin.es";
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "From: [email]micorreo@micorreo.es[/email] <$remitente>\r\n";
    $headers .= "Reply-To: $remitente\r\n";
    $headers .= "Return-path: $remitente\r\n";


    // enviamos el email
    if ( mail( "From: [email]micorreo@micorreo.es[/email]",'Recibiste un mensaje a través del formulario de contacto de tu sitio',$cuerpo,$headers ) ) {
    header( 'Location: email2.php' );
    die;
    } else {
    header( 'Location: error.php' );
    die;
    }
    ?>
  • Hola,

    Los que reciben los correos, ¿utilizan Microsoft Outlook para visualizarlos?

    Si es así, Outlook tiene problemas para reconocer los saltos de línea compuestos (\r\n) que incluyes en la cabecera. Prueba a eliminar todos los \r y el problema debería desaparecer (si usas Outlook 2007).

    Tienes más información sobre este problema en el primer post de la página oficial de PHP para la función mail: ENLACE.

    Un saludo
  • Gracias Chema... he solucionado varios problemas. Ahora, lo que falla es cuando se recibe el mensaje, por lo menos en Outlook 2003, me aparece, en la parte superior del mensaje lo siguiente:

    correodelaempresaquecontrataelservidor@re9.servidor-de-dns.com; en nombre de; correodelremitente@correodelremitente.com

    Si bien, cuando le das directamente a responder, te coje el correo del remitente.

    EL CÓDIGO

    <?php<br />//Importamos las variables del formulario
    @$name = addslashes($_POST['name']);
    @$apellidos = addslashes($_POST['apellidos']);
    @$email = addslashes($_POST['email']);
    @$subject = addslashes($_POST['subject']);
    @$message = addslashes($_POST['message']);

    //Preparamos el mensaje de contacto
    $cabeceras = "From: $email\n" //La persona que envia el correo
    . "Reply-To: $email\n";
    $asunto = "$subject"; //El asunto
    $email_to = "micorreo@micorreo.com"; //cambiar por tu email
    $contenido = "$name le ha enviado el siguiente mensaje:\n
    De: $name \n
    Apellidos: $apellidos \n
    Email: $email \n
    Asunto: $subject \n
    Mensaje: $message \n
    ";

    //Enviamos el mensaje y comprobamos el resultado
    if (@mail($email_to, $asunto ,$contenido ,$cabeceras )) {
    //Si el mensaje se envía muestra una confirmación
    header( 'Location: email2.php' );
    die;
    }else{
    //Si el mensaje no se envía muestra el mensaje de error
    header( 'Location: error.php' );
    die;
    }
    ?>

    Gracias
  • Hola,

    Faltan campos en las cabeceras. Fíjate como lo ha hecho el usuario caos30, indicando todos los campos, separados por fines de línea, en las cabeceras (2º post de este hilo).

    Un saludo
  • Hola Chema, muchas gracias por la ayuda, de verdad... he puesto el siguiente código pero me siguen apareciendo 2 remitentes: [email]miempresa@re9.servidor-de-dns.com[/email]; en nombre de; [email]usuario@usuario.com[/email]

    CÓDIGO
    <?php<br />//Importamos las variables del formulario
    @$name = addslashes($_POST['name']);
    @$apellidos = addslashes($_POST['apellidos']);
    @$email = addslashes($_POST['email']);
    @$subject = addslashes($_POST['subject']);
    @$message = addslashes($_POST['message']);

    //Preparamos el mensaje de contacto
    $cabeceras = "MIME-Version: 1.0\r\n";
    $cabeceras .= "Content-type: text/html; charset=iso-8859-1\n";
    $cabeceras .= "From: $email\n"; //La persona que envia el correo
    $cabeceras .= "Reply-To: $email\n";
    $cabeceras .= "Return-path: $remitente\n";
    $asunto = "$subject"; //El asunto
    $email_to = "micorreo@micorreo.es"; //cambiar por tu email
    $contenido = "$name le ha enviado el siguiente mensaje:\n
    De: $name \n
    Apellidos: $apellidos \n
    Email: $email \n
    Asunto: $subject \n
    Mensaje: $message \n
    ";

    //Enviamos el mensaje y comprobamos el resultado
    if (@mail($email_to, $asunto ,$contenido ,$cabeceras )) {
    //Si el mensaje se envía muestra una confirmación
    header( 'Location: email2.php' );
    die;
    }else{
    //Si el mensaje no se envía muestra el mensaje de error
    header( 'Location: error.php' );
    die;
    }
    ?>
  • Asegúrate de que los campos From, Reply-To y Return-Path llevan detrás $email o $remitente exclusivamente (prueba de los 2 modos), pero no los mezcles simultáneamente, porque si no, te pasará lo que dices, algo totalmente lógico.

    Un saludo
  • Hola!
    Una consulta, tengo un form desde web que llega a mail, ese es el php q hace el funcionamiento:

    <?php<br />
    $msg = '';

    foreach($_POST as $k => $v) {
    $msg .= "$k: $v \n";
    }

    $res = @mail('maia@jonetsugroup.com.ar', 'Contacto desde web', $msg);

    header('Content-type: text/json');

    $res = true;

    echo json_encode( array('result' => $res) );

    ?>


    Quisiera que cuando el mail me llegue, no llegue a nombre del hosting, sino del campo que el usuario completo de su email, para que cuando le responda desde mi casilla donde recibo el form, vaya directo a su mail. ¿Es posible? ¿Cómo se agrega?
    gracias!