Foros del Web » Programando para Internet » PHP »

Autorrespuesta de formulario en formato HTML

Estas en el tema de Autorrespuesta de formulario en formato HTML en el foro de PHP en Foros del Web. Hola, acabo de implementar en mi web un formulario html, que se envía mediante una llamada a un archivo php, y envía una respuesta automática ...
  #1 (permalink)  
Antiguo 19/02/2008, 04:09
 
Fecha de Ingreso: mayo-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Autorrespuesta de formulario en formato HTML

Hola, acabo de implementar en mi web un formulario html, que se envía mediante una llamada a un archivo php, y envía una respuesta automática al usuario.

Esta autorespuesta la envía en formato texto, pero yo quería poder enviarla en formato HTML (simplemente poner algo de color para no hacerla tan sosa).

No se si sería muy complicado o no, si alguien puede ayudarme, y decirme que debo cambiar en el código, se lo agradecería mucho.

Pongo en negrita la parte de código que se envía en formato texto y que querría se enviase en formato HTML

No se nada de php, conseguí hacer funcionar el script, a base de prueba y error.

(tuve que recortar algo de código de la parte final, pues excedía el máximo de caracteres permitidos por el foro).

Saludos.



<?
/**



// MODIFICA TU EMAIL AQUÍ ////
// si está vació usará el email del campo ('send_to')
$send_to = "<midirecciondecorreo>";

// Configura $send_cc si deseas enviar otra copia de la orden de hosting a otro email
// por ejemplo: $send_cc = array('O.COM'');
$send_cc = array('midirecciondecorreo');

// MODIFICA AQUÍ el Subject o Título del email que recibirás en tu correo
// Puedes modificarlo si deseas recibirlo con otro nombre
$subject ="Pedido";

// No modificar
$referrers = array();

// No modificar - Si deseas puedes incluir el envio de archivos, valor 1 si, 0 no.
$attachment_enabled = 0;

// No modificar - Database - write CSV file with data of submitted forms ////
$database_enabled = 0;
$database_file = 'email.csv';

// Fields to collect
// $database_fields = '*' - mean all fields, as in form
// $database_fields = array('from', 'subject') - only 'from', 'subject' fields
$database_fields = '*';

//MODIFICA AQUÍ Dirección URL después de procesar el formulario
$redirect_url = 'correcto.html';

/// AutoRespondedor
/// Puedes cambiar cualquiera de los campos usando...
/// %nombre_campo% en el email de respuesta.
///
$autoresponder_enabled = 1;
$autoresponder_from = $send_to;
$autoresponder_subject = "Pedido";
$autoresponder_message = <<<MSG


Estimad@ %nombre_req%:

Estos son los datos que nos has facilitado, por favor si hay algún error avísanos lo antes posible:

Nombre: %nombre_req%
Apellidos: %apellidos_req%
Calle: %callereq%
Número: %numero_req%
Piso: %piso%
Letra: %letra%
Localidad: %localidad_req%
Provincia: %provincia_req%
País: %pais_req%
Código postal: %codpostal_req%
Teléfono: %telefono_req%
E-mail: %email%
Forma de pago: %formadepago_req%
Observaciones: %observaciones%

Gracias.


MSG;


function do_formmail(){
global $autoresponder_enabled, $database_enabled;
$form = get_form_data();
$errors = check_form($form);
if ($errors) {
display_errors($errors);
return;
}
send_mail($form);
if ($autoresponder_enabled)
auto_respond($form);
if ($database_enabled)
save_form($form);
redirect();
}

function redirect(){
global $redirect_url;
header("Location: $redirect_url");
exit();
}


function save_form($vars){
global $database_file, $database_fields;
$f = fopen($database_file, 'a');
if (!$f){
die("Cannot open db file for save");
}
foreach ($vars as $k=>$v) {
$vars[$k] = str_replace(array("|", "\r","\n"), array('_',' ',' '), $v);
}
if (is_array($database_fields)) {
$vars_orig = $vars;
$vars = array();
foreach ($database_fields as $k)
$vars[$k] = $vars_orig[$k];
}
$str = join('|', $vars);
fwrite($f, $str."\n");
fclose($f);
}

function auto_respond($vars){
global $autoresponder_from, $autoresponder_message, $autoresponder_subject;
/// replace all vars in message
$msg = $autoresponder_message;
preg_match_all('/%(.+?)%/', $msg, $out);
$s_vars = $out[1]; //field list to substitute
foreach ($s_vars as $k)
$msg = str_replace("%$k%", $vars[$k], $msg);
/// replace all vars in subject
$subj = $autoresponder_subject;
preg_match_all('/%(.+?)%/', $subj, $out);
$s_vars = $out[1]; //field list to substitute
foreach ($s_vars as $k)
$subj = str_replace("%$k%", $vars[$k], $subj);
//
$_send_to = "$vars[name_from] <".$vars[email].">";
$_send_from = $autoresponder_from;
mail($_send_to, $subj, $msg, "From: $_send_from");
}

function _build_fields($vars){
$skip_fields = array(
'name_from',
'email',
'email_to',
'name_to',
'subject');
// order by numeric begin, if it exists
$is_ordered = 0;
foreach ($vars as $k=>$v)
if (in_array($k, $skip_fields)) unset($vars[$k]);

$new_vars = array();
foreach ($vars as $k=>$v){
// remove _num, _reqnum, _req from end of field names
$k = preg_replace('/_(req|num|reqnum)$/', '', $k);
// check if the fields is ordered
if (preg_match('/^\d+[ \:_-]/', $k)) $is_ordered++;
//remove number from begin of fields
$k = preg_replace('/^\d+[ \:_-]/', '', $k);
$new_vars[$k] = $v;
}
$vars = $new_vars;

$max_length = 10; // max length of key field
foreach ($vars as $k=>$v) {
$klen = strlen($k);
if (($klen > $max_length) && ($klen < 40))
$max_length = $klen;
}

if ($is_ordered)
ksort($vars);

// make output text
$out = "";
foreach ($vars as $k=>$v){
$k = str_replace('_', ' ', $k);
$k = ucfirst($k);
$len_diff = $max_length - strlen($k);
if ($len_diff > 0)
$fill = str_repeat('.', $len_diff);
else
$fill = '';
$out .= $k."$fill...: $v\n";
}
return $out;
}


function send_mail($vars){
global $send_to, $send_cc;
global $subject;
global $attachment_enabled;
global $REMOTE_ADDR;

global $HTTP_POST_FILES;
$files = array(); //files (field names) to attach in mail
if (count($HTTP_POST_FILES) && $attachment_enabled){
$files = array_keys($HTTP_POST_FILES);
}

// build mail
$date_time = date('Y-m-d H:i:s');
$mime_delimiter = md5(time());
$fields = _build_fields($vars);
$mail = <<<EOF
This is a MIME-encapsulated message

--$mime_delimiter
Content-type: text/plain
Content-Transfer-Encoding: 8bit


El mensaje enviado es:
$fields
--------------------
Numero IP : $REMOTE_ADDR
Fecha y Hora : $date_time
EOF;

if (count($files)){
foreach ($files as $file){
$file_name = $HTTP_POST_FILES[$file]['name'];
$file_type = $HTTP_POST_FILES[$file]['type'];
$file_tmp_name = $HTTP_POST_FILES[$file]['tmp_name'];
$file_cnt = "";
$f=@fopen($file_tmp_name, "rb");
if (!$f)
continue;
while($f && !feof($f))
$file_cnt .= fread($f, 4096);
fclose($f);
if (!strlen($file_type)) $file_type="applicaton/octet-stream";
if ($file_type == 'application/x-msdownload')
$file_type = "applicaton/octet-stream";

$mail .= "\n--$mime_delimiter\n";
$mail .= "Content-type: $file_type\n";
$mail .= "Content-Disposition: attachment; filename=\"$file_name\"\n";
$mail .= "Content-Transfer-Encoding: base64\n\n";
$mail .= chunk_split(base64_encode($file_cnt));
}
}
$mail .= "\n--$mime_delimiter--";


//send to
$_send_to = $send_to ? $send_to : "$vars[name_to] <".$vars[email_to].">";
$_send_from = "$vars[name_from] <".$vars[email].">";
$_subject = $subject ? $subject : $vars['subject'];

mail($_send_to, $_subject, $mail,
"Mime-Version: 1.0\r\nFrom: $_send_from\r\nContent-Type: multipart/mixed;\n boundary=\"$mime_delimiter\"\r\nContent-Disposition: inline");

foreach ($send_cc as $v){
mail($v, $_subject, $mail,
"Mime-Version: 1.0\r\nFrom: $_send_from\r\nContent-Type: multipart/mixed;\n boundary=\"$mime_delimiter\"\r\nContent-Disposition: inline");
}

}

function get_form_data(){
global $REQUEST_METHOD;
global $HTTP_POST_VARS;
global $HTTP_GET_VARS;

$vars = ($REQUEST_METHOD == 'GET') ? $HTTP_GET_VARS : $HTTP_POST_VARS;
//strip spaces from all fields
foreach ($vars as $k=>$v) $vars[$k] = trim($v);
return $vars;
}

function check_form($vars){
global $referrers;
global $send_to;
global $subject;
global $HTTP_REFERER;

$errors = array();



//check referrer
if (is_array($referrers) && count($referrers)){
$ref = parse_url($HTTP_REFERER);
$host = $ref['host'];
$host_found = 0;
foreach ($referrers as $r){
if (strstr($host, $r))
$host_found++;
}
if (!$host_found){
$errors[] = "Unknown Referrer: <b>$host</b>";
}
}
return $errors;
}

function display_errors($errors){
$errors = '<li>' . join('<li>', $errors);
print <<<EOF

EOF;
}

do_formmail();
?>

Última edición por vimy; 11/03/2008 a las 02:36
  #2 (permalink)  
Antiguo 19/02/2008, 04:19
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Re: Autorrespuesta de formulario en formato HTML

En http://es2.php.net/manual/es/function.mail.php te viene un ejemplo de que cabeceras poner en mail() para enviar el email como HTML.
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 17:26.