Send mail form con php... ERROR

Te escribo en esta ocasión por que implemente una forma de contac us en html y esta le envía la información a unn archivo php que a su vez le envía la información a mi correo... El problema es que recientemente me da un mensaje de error
WARNING: RunAsUser for MSP ignored,
check group ids (egid=500559, want=22)
can not chdir(/var/spool/clientmqueue/):
Permission denied
He buscado por todos lados y no consigo cual pudiera ser el problema, vale destacar que este error comenzó a aparecer desde hace una semana para acá.
Te agradecería mucho que me ayudes por que no consigo que es lo que sucede.
Este es el código php que estoy utilizando, gracias por toda tu ayuda
Atentamente
Katy
Nota: mi webhosting tienen phpMyAdmin, PHP, MySQL Databases, Global CGIs y Perl.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Contact Us</title>
<link href="../style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a.indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
}
//-->
</script>
</head>
<body class="style.ccs" onLoad="MM_preloadImages('../image/banner-top.jpg','../image/logo.gif','../image/menuh.swf')">
<div align="center">
<table width="776" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="228"><img src="../image/logo.gif" width="222" height="95"></td>
<td width="548"><img src="../image/banner-top.jpg" width="547" height="95" border="0" align="right"></a></td>
</tr>
<tr>
<td class="lender"><FONT color=#000000 size=2 face=Arial class="lender" id=role_document></FONT></td>
<td bgcolor="#4485b0"></td>
</tr>
<tr>
<td colspan="2"><!--url's used in the movie-->
<!--text used in the movie-->
<!-- saved from url=(0013)about:internet -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="776" height="60" id="menuh" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="../image/menuh-app.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="../image/menuh-app.swf" quality="high" bgcolor="#ffffff" width="776" height="60" name="menuh" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object></td>
</tr>
<tr>
<td height="30" colspan="2"> </td>
</tr>
<tr align="left">
<td colspan="2"><img src="../image/tit-contact-us.gif" width="220" height="35"></td>
</tr>
<tr>
<td height="35" colspan="2" align="center"> </td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr align="center">
<td colspan="2"></td>
</tr>
<tr>
<td height="55" colspan="2"><table width="775" border="0" cellspacing="5" cellpadding="5">
<tr>
<td width="550" height="550" valign="top"><?
if (!$HTTP_POST_VARS){
?>
<? //Name of applicant ?>
<?php echo $_POST["First_name"]; ?> <?php echo $_POST["Last_name"]; ?> <?php echo $_POST["cellphone"]; ?> <?php echo $_POST["phone"]; ?> <?php echo $_POST["fax"]; ?> <?php echo $_POST["email"]; ?> <?php echo $_POST["comment"]; ?>
<?php mail("[email protected]","Contact Us\n",$cuerpo,$headers); ?>
<?
}else{
//para el envío en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
//Estoy recibiendo el formulario, compongo el cuerpo
$cuerpo = "Contact Us\n";
$cuerpo .= "**********************\n";
$cuerpo .= "First Name: " . $HTTP_POST_VARS["First_name"] . "\n";
$cuerpo .= "Last Name: " . $HTTP_POST_VARS["Last_name"] . "\n";
$cuerpo .= "Cell Phone: " . $HTTP_POST_VARS["cellphone"] . "\n";
$cuerpo .= "Phone: " . $HTTP_POST_VARS["phone"] . "\n";
$cuerpo .= "Fax: " . $HTTP_POST_VARS["fax"] . "\n";
$cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";
$cuerpo .= "Comment: " . $HTTP_POST_VARS["comment"] . "\n";
//dirección del remitente
$headers = "From: Contact Us <[email protected]>\r\n";
//dirección de respuesta, si queremos que sea distinta que la del remitente
$headers .= "Reply-To: " . $HTTP_POST_VARS["email"] . "\r\n";
//Este es el asunto
//$subject = "Loan Application Received\r\n";
//mando el correo...
mail("[email protected]","From: " . $HTTP_POST_VARS["First_name"] . " " . $HTTP_POST_VARS["Last_name"] . "\n",$cuerpo,$headers);
//Pongo aquí un header completo...
3

3 Respuestas

2.225 pts. Programación web php, asp, javascript, java, cgi, perl,...
WARNING: RunAsUser for MSP ignored,
check group ids (egid=500559, want=22)
can not chdir(/var/spool/clientmqueue/):
Permission denied
Bueno ya revise tu script y no hay mayor problema en el... algunos detalles de seguridad pero bueno supongo que cuando termines de leer mi respuesta empezaras a preocuparte por ello.
De principio te puedo decir que el problema no esta en tu script sino en una configuración del servidor y es que recientemente (ya más de 4 meses) se detectó un problema de seguridad en la función mail() de php.
Supongo que conoces la función mail de PHP, su sintaxis es parecida a la siguiente:
Mail(recipiente, asunto, mensaje, cabeceras extras);
Lo que hace esta función es simplemente concatenar los datos y formar el mail, muchos spammers han usado vulnerabilidades en el envío de mails por medio de formularios para hacer envíos masivos.
Regularmente nosotros como programadores abrimos los campos de una manera desconsiderada
<input name="email" type="text" value="Ingrese su e-mail aqui" />
Lo primero que deberíamos hacer es limitar el tamaño de este text, un correo electrónico no puede ni debe superar los 50 o 60 caracteres. Se que es una regla que parece estúpida porque puede haber personas que tenga una cuenta de correo enorme pero limitar el tamaño de los campos nos ayudara a prevenir cosas que no queremos que sucedan como un ataque.
Lo que hacen los spammers es incluir una cadena similar a la siguiente:
[email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected]
Como te mencione al inicio la función mail solo concatena de manera ordenada la información. El (%0A) es el valor hexadecimal de un salto de linea.
Con esto el spammer obtendrá las cabeceras similares a la siguiente:
To: [email protected]
Subject: Asunto del mensaje
From: [email protected]
Cc:[email protected]
Bcc:[email protected],[email protected]
El ejemplo es el caso más básico de esta modalidad ya que a través de las cabeceras se puede incluso modificar el asunto y hasta el mensaje en si mismo hasta el punto de poder enviar mensajes con contenido html.
Te copio una función que detecta que ene el campo no se haya escrito este tipo de código:
<?php
function ValidarDatos($campo){
//Array con las posibles cabeceras a utilizar por un spammer
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");
//Comprobamos que entre los datos no se encuentre alguna de
//las cadenas del array. Si se encuentra alguna cadena se
//dirige a una página de Forbidden
foreach($badHeads as $valor){
if(strpos(strtolower($campo), strtolower($valor)) !== false){
header("HTTP/1.0 403 Forbidden");
exit;
}
}
}
//Ejemplo de llamadas a la funcion
ValidarDatos($_POST['email']);
ValidarDatos($_POST['asunto']);
ValidarDatos($_POST['mensaje']);
?>
Si implementas la restricción de los campos de tu formulario y usas la función ValidarDatos, tu problema debe quedar resuelto.
La vulnerabilidad de tus formularios podría quedar resuelta si limitas el tamaño de los campos, incluso podrías implementar un script para que solo puedan escribir ciertos caracteres, no se en campos numéricos limitar la introducción a números, o en el nombre limitarlo a Letras. Te dejo un escript muy fácil de personalizar en el cual puedes definir que esta o no esta permitido.
Este es el javascript:
function letrasynumeros(myfield, e, dec) {
var key; var keychar;
if (window.event) key = window.event.keyCode; else if (e) key = e.which;else return true; keychar = String.fromCharCode(key);
// control keys
if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) ) return true;
// numbers
else if ((("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").indexOf(keychar) > -1)) return true;
// decimalpoint jump
else if (dec && (keychar == ".")) { myfield.form.elements[dec].focus(); return false; }
else return false; }
y asi se llama en los campos:
<input name="usuario" type="text" class="white" id="usuario" maxlength="12" onKeyPress="return letrasynumeros(this, event);"/>
La cadena : 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ es la que me especifica que caracteres estoy dispuesto a aceptar en el campo.
Con la configuración del servidor pues no te puedo decir que hacer porque no tengo idea si tu administras el servidor, en general pocos administran su servidor, por lo que te recomiendo que contactes con tu proveedor para que te informe sobre los cambios realizados. Aunque mi recomendación seria que enviaras tus correos a través de smtp, este script te podría ayudar mucho trabajo:
http://phpmailer.sourceforge.net/
4.175 pts.
Al parecer no es problema de tu código, más bien parece un problema con el servidor donde esta alojado tu código
Contacta a tu administrador, parece un problema de premisos del mta (servidor de correo)
WARNING: RunAsUser for MSP ignored,
check group ids (egid=500559, want=22)
can not chdir
****** no puede acceder el directorio *******
(/var/spool/clientmqueue/):
Permission denied
Esto puede haber sido causado por alguna actualización del sistema, o incremento en la seguridad de este...
0 pts.
Kparedesm disculpa que no te allá respondido más rapido pero andaba cargado de trabajo. Te envío el siguiente código para el envío de correo y ademas para adjuntar datos.
Nota: los archivos adjuntos que envíes deben estar localizados en tu server.
Espero te sea útil
<html>
<head>
<title></title>
</head>
<body>
<?php
$UN_SALTO="\r\n";
$DOS_SALTOS="\r\n\r\n";
$destinatario="[email protected]";
$titulo="Mensaje con Adjuntos";
$mensaje="<html><head></head><body bgcolor=\"#ff0000\">";
$mensaje .="<font face=\"Arial\" size=6>Ya te cargo jejejejejeje, no que no salia </font>";
$mensaje .="</body></html>";
$responder="[email protected]";
$remite="[email protected]";
$remitente="Beto";
$separador = "_separador_de_trozos_".md5 (uniqid (rand()));
$cabecera = "Date: ".date("l j F Y, G:i").$UN_SALTO;
$cabecera .= "MIME-Version: 1.0".$UN_SALTO;
$cabecera .= "From: ".$remitente."<".$remite.">".$UN_SALTO;
$cabecera .= "Return-path: ". $remite.$UN_SALTO;
$cabecera .= "Reply-To: ".$remite.$UN_SALTO;
$cabecera .= "X-Mailer: PHP/". phpversion().$UN_SALTO;
$cabecera .= "Content-Type: multipart/mixed;".$UN_SALTO;
$cabecera .= "boundary=$separador".$DOS_SALTOS;
// Parte primera -Mensaje en formato HTML
# Separador inicial
$texto ="--$separador".$UN_SALTO;
# Encabezado parcial
$texto .="Content-Type: text/html; charset=\"ISO-8859-1\"".$UN_SALTO;
$texto .="Content-Transfer-Encoding: 7bit".$DOS_SALTOS;
# Contenido de esta parte del mensaje
$texto .= $mensaje;
# Separador de partes
$adj1 = $UN_SALTO."--$separador".$UN_SALTO;
// Parte segunda -Fichero adjunto nº 1
# Encabezado parcial
$adj1 .="Content-Type: image/jpeg; name='f1.jpg' ".$UN_SALTO;
$adj1 .="Content-Disposition: inline; filename= 'f1.jpg' ".$UN_SALTO;
$adj1 .="Content-Transfer-Encoding: base64".$DOS_SALTOS;
# lectura del fichero adjunto
$fp = fopen('f1.jpg', "r");
$buff = fread($fp, filesize('f1.jpg'));
fclose($fp);
# codificación del fichero adjunto
$adj1 .=chunk_split(base64_encode($buff));
# Separador de partes
$adj2 = $UN_SALTO."--$separador".$UN_SALTO;
// Parte tercera -Fichero adjunto nº 2
# Encabezado parcial
$adj2 .="Content-Type: image/jpeg; name='f2.jpg'".$UN_SALTO;
$adj2 .="Content-Disposition: inline; filename='f2.jpg'".$UN_SALTO;
$adj2 .="Content-Transfer-Encoding: base64".$DOS_SALTOS;
# lectura del fichero adjunto
$fp = fopen("f2.jpg", "r");
$buff = fread($fp, filesize("f2.jpg"));
fclose($fp);
# codificación del fichero adjunto
$adj2 .=chunk_split(base64_encode($buff));
// separador final del mensaje
$adj2 .=$UN_SALTO."--$separador".$UN_SALTO;
// Unión de las diferentes partes para crear
//el cuerpo del mensaje
$mensaje=$texto.$adj1.$adj2;
// envio del mensaje
For($z=0; $z<5; $z++)
{
if( mail($destinatario, $titulo, $mensaje,$cabecera))
{
echo "mensaje enviado";
}
}
?>
</body>
</html>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas