Como configurar osCommerce para evitar que los emails sean enviados por nobody@servidor.com ?

Funcion mail(). osCommerce, evitar el retorno nobody

osCommerce, así como muchos otros scripts, presentan un defecto en este sentido. El uso de la función mail() es usado de forma anticuada y restrictiva para servidores como los nuestros en los que PHP se ejecuta de forma normal: los emails son enviados con el Return-Path: vació o asignado al usuario que ejecuta el servidor web, en nuestro caso Apache y el usuario nobody.

Para evitar este comportamiento (en osCommerce) deberemos editar en los directorios /catalog/includes/classes  y /catalog/admin/includes/classes, el fichero email.php, el cual controla la gran mayoría de las funciones de correo electrónico de este software de comercio electrónico.

Al rededor de la linea 500 veremos lo siguiente:

if (EMAIL_TRANSPORT == 'smtp') {
return mail($to_addr, $subject, $this->output,
'From: ' . $from . $this->lf .
'To: ' . $to . $this->lf .
implode($this->lf, $this->headers) . $this->lf .
implode($this->lf, $xtra_headers));
} else {
return mail($to, $subject, $this->output,
'From: '.$from.$this->lf.implode($this->lf, $this->headers).
$this->lf.implode($this->lf, $xtra_headers));
}
}

Deberemos modificar cada instancia de la función mail() para incluir el quinto parámetro ( -fusuario@dominio.tld) que apareció en la versión 4.2.3 (atención porque en sitios con safe_mode activado este esta desactivado). Deberá ser cuidadoso, con los paréntesis.

if (EMAIL_TRANSPORT == 'smtp') {

return mail($to_addr, $subject, $this->output, 'From: ' . $from .
$this->lf . 'To: ' . $to . $this->lf . implode($this->lf,
$this->headers) . $this->lf . implode($this->lf,
$xtra_headers),'-f' . 'micorreo@midominio.tld');

} else {

return mail($to, $subject, $this->output, 'From:
'.$from.$this->lf.implode($this->lf,
$this->headers).$this->lf.implode($this->lf,
$xtra_headers),'-f' . 'micorreo@midominio.tld');
}

}

En el caso de otros muchos scripts  existe un problema parecido.

La sintaxis correcta en cada caso y dependiendo de la programación debería terminar ejecutando la función mail() como sigue:

mail($destinationaddress, $subject, $message, $extraheaders,'-f' .
$fromaddress);

NOTA: Obsérvese, que el quinto parámetro va seguido de la dirección de correo sin espacios.

Esto permitirá que los correos enviados por su software, en caso de que el servidor no los pueda entregar, lleguen a la dirección que ponga, y no al postmaster del servidor.

 

  • 18 Users Found This Useful
Was this answer helpful?

Related Articles

Errores en osCommerce con Versión de PHP 5.3.x

Actualmente las siguientes funciones de sesion se encuentran obsoletas en PHP 5.3.x...