Bienvenidos al foro de Hive Mind

Aquí se intentarán resolver dudas sobre informática y compartir conocimientos sobre edición de vídeos, web y diseño
#1539
A día de hoy es difícil encontrar un formulario de contacto que funcione decentemente en internet, así que después de rescatar esto en stackoverflow y ver que funcionaba a las mil maravillas decidi modificarlo y adaptarlo al que ya tenía para ver si conseguía dejarlo 100% funcional, ya que no conseguía cambiar el encabezado del mensaje por problemas con el servidor smtp.

El código que encontré es este:
Código: Seleccionar todo
$post = false;
// flag to indicate which method it uses. If POST set it to 1
if (isset($_POST['Name'])) {
    $post = true;
}

$name = (isset($_GET['Name'])) ? $_GET['Name'] : $_POST['Name'];
$email = (isset($_GET['Email'])) ? $_GET['Email'] : $_POST['Email'];
$phone = (isset($_GET['Phone'])) ? $_GET['Phone'] : $_POST['Phone'];
$comment = (isset($_GET['Comment'])) ? $_GET['Comment'] : $_POST['Comment'];


// Simple server side validation for POST data, of course, you should validate the email
if (!$name) {
    $errors[] = 'Please enter your name.';
}
if (!$email) {
    $errors[] = 'Please enter your email.';
}
if (!$comment) {
    $errors[] = 'Please enter your comment.';
}
// if the errors array is empty, send the mail
if (count($errors) == 0) {

    // recipient
    $to = 'example@example.com';
    // sender
    $from = $name . ' <' . $email . '>';

    // subject and the html message
    $subject = 'Comment from ' . $name;
    $message = '<!DOCTYPE html>
<html>
<head></head>
<body>
<table>
    <tr><td>Name</td><td>' . $name . '</td></tr>
    <tr><td>Email</td><td>' . $email . '</td></tr>
    <tr><td>Phone</td><td>' . $phone . '</td></tr>
    <tr><td>Comment</td><td>' . nl2br($comment) . '</td></tr>
</table>
</body>
</html>';


    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";
    $headers .= 'Reply-To: ' . $from . "\r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();
    $mailSuccess = mail($to, $subject, $message, $headers);

    // if POST was used, display the message straight away
    if ($post) {
        if ($mailSuccess) {
            echo 'Thank you! We have received your message.';
        } else {
            echo 'Sorry, unexpected error. Please try again later';
        }
    // else if GET was used, return the boolean value so that
    // ajax script can react accordingly
    // 1 means success, 0 means failed
    } else {
        echo (int)$mailSuccess;
    }
// if the errors array has values
} else {
    // display the errors message
    foreach ($errors as $error) {
        echo $error . '<br/>';
    }
    echo '<a href="contact.php">Back</a>';
}
http://stackoverflow.com/questions/2018 ... -correctly

Y el código modificado y listo en el archivo php:
Código: Seleccionar todo
<?php

	$post = false;
	// flag to indicate which method it uses. If POST set it to 1
	if (isset($_POST['name'])) {
		$post = true;
	}

	$name = (isset($_GET['name'])) ? $_GET['name'] : $_POST['name'];
	$email = (isset($_GET['email'])) ? $_GET['email'] : $_POST['email'];
	$comment = (isset($_GET['comment'])) ? $_GET['comment'] : $_POST['comment'];


	// Simple server side validation for POST data, of course, you should validate the email
	if (!$name) {
		$errors[] = '';
	}
	if (!$email) {
		$errors[] = '';
	}
	if (!$comment) {
		$errors[] = '';
	}
	// if the errors array is empty, send the mail
	if (count($errors) == 0) {
	
	// recipient
    $to = 'blabla@gmail.com';
    // sender
    $from = $name . ' <' . $email . '>';
    $subject = '[Leyendas del Infierno] Has recibido un nuevo formulario de contacto';
    $message = '<!DOCTYPE html>
	<html>
	<head></head>
	<body style="font-size: 16px;font-family: sans-serif;">
	Remitente: <b>' . $name . '</b>.</br>
	Correo:  ' . $email . '<br/>
	Mensaje: ' . nl2br($comment) . '
	<br/>
	-----------------------------------------------------------------
	</body>
	</html>';

    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
    $headers .= 'From: ' . $from . "\r\n";
    $headers .= 'Reply-To: ' . $from . "\r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();
    $mailSuccess = mail($to, $subject, $message, $headers);

	
    // if POST was used, display the message straight away
    if ($post) {
        if ($mailSuccess) {
			echo '<script>window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);</script> <p class="contacto"><i class="icon-location-pin"></i>Tu mensaje ha sido enviado</p>';
		} else { 
			echo '<script>window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);</script> <p class="contacto"><i class="icon-location-pin"></i>Algo ha ido mal, vuelve a intentarlo de nuevo</p>'; 
		}
		
	// else if GET was used, return the boolean value so that
    // ajax script can react accordingly
    // 1 means success, 0 means failed
    } else {
        echo (int)$mailSuccess;
    }
// if the errors array has values
} else {
    // display the errors message
    foreach ($errors as $error) {
        echo $error . '';
    }
	echo '<a href="contacto.php"></a>';
}
		
?>
Además incluyo para que sea más intuitivo el formulario:
Código: Seleccionar todo
		<form name="htmlform" method="post" action="contacto.php">
				<div class="col-md-6">
				<div class="form-group">
						<input name="name" type="text" class="form-control" placeholder="Nombre" required>
					</div>
				</div>
				<div class="col-md-6">
					<div class="form-group">
						<input name="email" type="email" class="form-control" placeholder="Correo" required >
					</div>
				</div>
				<div class="col-md-12">
					<div class="form-group">
						<textarea name="comment" class="form-control" cols="30" rows="7" placeholder="Escribe aquí tu comentario..." required></textarea>
					</div>
				</div>
							
							
				<div class="col-md-12">
					<div class="form-group">
						<input id="submit" type="submit" name="submit" value="Enviar Mensaje" class="btn btn-primary">
					</div>
				</div>								
			</form>
Podéis verlo funcionando en http://leyendasdelinfierno.es/contacto
0