Buenos días a todos,
Tengo terminado el desarrollo de un formulario BreezingForms desde Joomla, para que un cliente nos pueda enviar determinadas informaciones y ficheros.
Cuando realizamos las pruebas desde nuestros ordenadores todo funciona correctamente, pero cuando intenta enviar el cliente recibe el error de "Error en el Envío" y no recibimos los datos (esto lo tenemos programado en el formulario mediante un Javascript que, en caso de que el estado sea diferente a cero proporcione este error).
Revisando los ficheros de LOG vemos la siguiente línea:
[18-Apr-2018 18:44:31 Europe/Berlin] PHP Warning: escapeshellcmd() has been disabled for security reasons in /home2/qipertc2/public_html/codigolei/libraries/vendor/phpmailer/phpmailer/class.phpmailer.php on line 1444
He abierto un ticket por este problema y la respuesta es que Webempresa tiene deshabilitada, por motivos de seguridad, la función escapeshellcmd(), y que abra un post para ver si me pueden ayudar a configurar el componente de BreezingForms.
Agradezco cualquiera ayuda que puedan prestarme. Gracias.
URL del sitio: Contenido solo visible a usuarios registrados
Hola Jesus.
Si funciona en vuestros equipos tiene que funcionar en el del Usuario ¿ Desde donde se conecta ese usuario ? ¿ se conecta desde países de habla no hispana ? ¿ Le comentaste que probara desde otros navegadores ?
la función que comentas esta desestabilizada en todos nuestros servidores , como te comentan por seguridad.
Puedes probar lo siguiente:
.- accede a tu cuenta de cPanel -> Administrador de Archivos
.- Edita el archivo class.phpmailer.php que encontraras en la ruta libraries -> vendor -> phpmailer -> phpmailer -> class.phpmailer.php
.- Sobre la linea 1445 veras el siguiente código:
or !in_array(escapeshellarg($string), array("'$string'",
.- Modifica el código por lo siguiente:
or !in_array(@escapeshellarg($string), array("'$string'",
Como veras solo añadimos una @ a la variable escapeshellarg
Nota: recuerda realizar una copia del archivo antes de codificarlo.
Revisa si con eso se soluciona el tema del aviso.
Un saludo
Buenos días Pepe,
Hemos modificado el fichero php.ini tal como nos indicas y mi cliente ha vuelto a probar a realizar el envío, pero sigue con el mismo problema.
Una pregunta: si la función que falla es escapeshellcmd, ¿no habría que añadirle la @ a esta función en vez de a escapeshellarg?.
Por otra parte, ¿se puede deshabilitar esta función escapeshellcmd?.
Muchas gracias por tu ayuda.
Hola
Cómo tienes configurado Configuración Global > Servidor > Configuración de correo ?, envía una captura de pantalla. Tienes alguna extensión relacionado con envío de correos adicional?
Te lo comento porque si tienes configurado lo que viene por defecto con Joomla entonces no deberías tener problema.
En todo caso, busca esta función que se reporta y simplemente quitala, pero deja el string, si tienes dudas envía una captura de pantalla de la línea 1444
La función lo que hace es una comprobación si el parametro o parámetros enviados son correctos
Saludos.
Buenos días Jhon,
La configuración de correo que hemos estado utilizando es la que trae Joomla por defecto (ahora mismo la he cambiado a SMTP para que mi cliente pueda probar hoy a enviar el formulario).
En cuanto al código del fichero class.phpmailer.php original, en la línea donde da el error, lo adjunto en una imagen y lo pego a continuación:
protected static function isShellSafe($string)
{
// Future-proof
if (escapeshellcmd($string) !== $string
or !in_array(escapeshellarg($string), array("'$string'", ""$string""))
) {
return false;
}
¿Para deshabilitar la función escapeshellcmd simplemente debería quitar la primera parte del if?.
Muchas gracias por la ayuda.
Un saludo.
Hola Jesus.
Tienes que eliminar toda la función. Si no quieres eliminar todo el bloque lo que puedes hacer es dejarlo como comentario con lo que no tendría ningún efecto:
// Future-proof // if (escapeshellcmd($string) !== $string // or !in_array(escapeshellarg($string), array("'$string'", ""$string"")) // ) { // return false; // }
Un Saludo
Buenas tardes a todos,
Lo primero darle las gracias a Pepe y a Jhon por su inestimable ayuda.
Por fin he podido aclarar el problema con mi cliente, haciendo el proceso paso a paso desde su ordenador, y he descubierto que el problema del no envío se debía a que intentaba adjuntar un documento Word docx, extensión que no estaba contemplada. En este caso no recibía el mensaje adecuado de extensión no permitida (usa el I.E. 11). He habilitado este tipo de archivos y todo ha funcionado correctamente.
De todas formas he dejado desactivado el complemento (que es lo que yo veía en el log como que daba problemas).
Un saludo.
Hola jesus.
Genial !!! me alegra que lo solucionaras :cheer:
Muchas veces nos ofuscamos en algo y empezamos a dar vueltas y resulta que al final el problema esta en el lado del cliente, sobre todo cuando se trata de correos 😉
El Tema de las extensiones no permitidas se puede solucionar simplemente comprimiendo en archivo en un zip.
Gracias por informarnos y aportar la solución 😉
Cerramos el tema
un saludo