La tienda online osCommerce no es compatible con el envío de mail a traves de SMTP si este requiere autenticación, y en nuestros servidores está activada por lo que es necesario parchear osCommerce para poder utilizarlo, pero no es una tarea complicada.
Estas modificaciones están sólo testeadas con las siguientes versiones:
- osCommerce 2.2-MS2
- phpmailer 1.73
No quiere decir que no funcione en versiones más antiguas ni en las futuras, pero no podemos confirmarlo.
Se hace un copia de los archivos que posteriormente modificaremos por si hay algún error
- includes/classes/email.php
- admin/includes/classes/email.php
Descargar phpmailer
http://phpmailer.sourceforge.net
Descomprimimos el archivo y nos quedamos únicamente con:
- class.phpmailer.php
- class.smtp.php
que son los que nos interesan; copiamos archivos en los dos destinos siguientes… estas dos rutas deberán tener copiados los dos archivos anteriores:
- includes/classes/
- admin/includes/classes/
Configuracion de OsCommerce para su uso de phpmailer
Ahora hay que hacer alguna modificación común en los archivos que oscommerce usa para enviar emails; para ambos es la misma modificacion. Los archivos a modificar son:
- includes/classes/email.php
- admin/includes/classes/email.php
Dentro de estos ficheros hay que buscar la siguiente cadena
if ‘(EMAIL_TRANSPORT == ‘smtp’)’ {
Encontrando a continuación el siguiente código
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));
}
Hay que modificarlo para que quede asi
if (EMAIL_TRANSPORT == ‘smtp’) {
require_once(DIR_WS_CLASSES . “class.phpmailer.php”);
$pMail = new PHPMailer();
$pMail->From = $from_addr; //cuenta suya que envia y autentica
$pMail->FromName = $from_name;
$pMail->IsSMTP();
$pMail->Host = “mail.dominio.tld”; // ponga su servidor SMTP, en Fenixer por defecto es el mail.sudominio.ext
$pMail->Username = “usuario@dominio.tld”; // usuario SMTP si esta activada la autenticación en el servidor, su cuenta que envía y autentica
$pMail->Password = “contraseña”; // password de la cuenta de correo que autentica del
$pMail->SMTPAuth = true; // true/false – con o sin autenticación, hay que dejar true
$pMail->Subject = $subject;
$pMail->Body = $this->output;
$pMail->AddAddress($to_addr, $to_name);
$pMail->IsHTML(true);
return $pMail->Send();
$pMail->ClearAddresses();
$pMail->ClearAttachments();
} else {
return mail($to, $subject, $this->output, ‘From: ‘.$from.$this->lf.implode($this->lf, $this->headers).$this->lf.implode($this->lf, $xtra_headers));
}
Aunque en el código nuestros comentarios ocupen dos lineas, en el texto del archivo .php, cuando lo edite, no debe quedar repartido en dos lineas, pues causaría error…. le aconsejamos incluso, elimine nuestro comentario detrás de cada sección de código.
Los campos Host, Username, Password hay que personalizarlos con los datos de su usuario, según se indica en el comentario del codigo. Logicamente, los datos de la cuenta SMTP de envío deben existir.
A continuación, en el Panel de Administración de Oscommerce, en la sección /Configuración/E-Mail Options/ (/admin/configuration.php?gID=12), habrá que elegir SMTP como método de envío, en lugar de sendmail.
Con esto el envio de mails en osCommerce se hará a través de phpmailer con SMTP y autenticación.