Falha no envio de e-mail no Magento

magento-email-imagem-01

Como um sistema de loja virtual de alto nível, o sistema do Magento tem recursos, métodos, que auxiliem os clientes no processo de pré e pós compra. No processo de pós compra, encontramos o sistema de disparo do e-mail para manter os clientes notificados sobre todos os status da compra realizada na loja virtual.

Envio de e-mail no Magento

Como um sistema de loja virtual de alto nível, o sistema do Magento tem recursos, métodos, que auxiliem os clientes no processo de pré e pós compra. No processo de pós compra, encontramos o sistema de disparo do e-mail para manter os clientes notificados sobre todos os status da compra realizada na loja virtual.
Então, quando o cliente efetua uma compra na loja virtua, o Magento faz o disparo de e-mail para o cliente com informações sobre o pedido feito: produtos comprados, quantidade, status da compra, forma de pagamento, forma de entrega e etc.

O problema ocorre quando esse e-mails não são enviados para os clientes, pode estar ocorrendo um problema com a sua instalação e/ou é que seja um problema com o seu servidor de hospedagem, ele pode estar bloqueando a função do php que realiza o envio das mensagens. E isso pode trazer muitas reclamações para o administrador da loja virtual.

Especificamente para o Magento existe o SMTP Pro Email. Esse módulo substitui a função de envio de e-mails do php por um método via SMTP e fornece o recurso de fazer o envio por SMTP AUTENTICADO, que é um recurso que garante maior segurança no envio de e-mails pelo seu sistema.

Admito que instalei o módulo e não consegui fazê-lo funcionar. Não sei o motivo. 

Falha no envio de e-mail no Magento

Um grande problema que enfrentei com o envio de e-mails pelo Magento, foi que somente os clientes que tinham o e-mail @gmail, ou @outlook.com ou @yahoo.com.br recebiam os e-mails disparados pelo sistema. 

Sobre o erro

Isso ocorre por que nativamente o Magento está configurado para fazer o disparo em Localhost. E, por uma questão …

de segurança, vários servidores de e-mails bloqueiam e-mails enviados a partir de um localhost. Então, o Magento faz o envio mas os clientes não recebem (dependendo das configurações do servidor de e-mails utilizado). 

A solução

Para resolver o problema, acesse os diretórios: lib –> Zend –> Mail –> Transport –> Sendmail.php.

Localize o método _sendMail() e altere o código de:

 public function _sendMail()
 {
 if ($this->parameters === null) {
 set_error_handler(array($this, '_handleMailErrors'));
 $result = mail(
 $this->recipients,
 $this->_mail->getSubject(),
 $this->body,
 $this->header);
 restore_error_handler();
 } else {
 if(!is_string($this->parameters)) {
 /**
 * @see Zend_Mail_Transport_Exception
 *
 * Exception is thrown here because
 * $parameters is a public property
 */
 #require_once 'Zend/Mail/Transport/Exception.php';
 throw new Zend_Mail_Transport_Exception(
 'Parameters were set but are not a string'
 );
 }

 set_error_handler(array($this, '_handleMailErrors'));
 $result = mail(
 $this->recipients,
 $this->_mail->getSubject(),
 $this->body,
 $this->header,
 $this->parameters);
 restore_error_handler();
 }

 if ($this->_errstr !== null || !$result) {
 /**
 * @see Zend_Mail_Transport_Exception
 */
 #require_once 'Zend/Mail/Transport/Exception.php';
 throw new Zend_Mail_Transport_Exception('Unable to send mail. ' . $this->_errstr);
 }
 }

para

public function _sendMail()
 {

 /*
 if ($this->parameters === null) {
 set_error_handler(array($this, '_handleMailErrors'));
 $result = mail(
 $this->recipients,
 $this->_mail->getSubject(),
 $this->body,
 $this->header);
 restore_error_handler();
 } else {
 if(!is_string($this->parameters)) {
 /**
 * @see Zend_Mail_Transport_Exception
 *
 * Exception is thrown here because
 * $parameters is a public property

 #require_once 'Zend/Mail/Transport/Exception.php';
 throw new Zend_Mail_Transport_Exception(
 'Parameters were set but are not a string'
 );
 }

 set_error_handler(array($this, '_handleMailErrors'));
 $result = mail(
 $this->recipients,
 $this->_mail->getSubject(),
 $this->body,
 $this->header,
 $this->parameters);
 restore_error_handler();
 }

 if ($this->_errstr !== null || !$result) {
 /**
 * @see Zend_Mail_Transport_Exception

 #require_once 'Zend/Mail/Transport/Exception.php';
 throw new Zend_Mail_Transport_Exception('Unable to send mail. ' . $this->_errstr);
 }
 */

 $result = mail(
 $this->recipients,
 $this->_mail->getSubject(),
 $this->body,
 $this->header,
 '-f'.$this->_mail->getFrom());
 if (!$result) {
 /**
 * @see Zend_Mail_Transport_Exception
 */
 #require_once 'Zend/Mail/Transport/Exception.php';
 throw new Zend_Mail_Transport_Exception('Unable to send mail');
 }
 }

Bem, essa pequena alteração resolveu o meu problema.

Pelos testes que fiz, os clientes começaram a receber os e-mails disparados pelos sistema, não importando qual era o domínio da sua caixa postal.

Importante: Tenha muito cuidado ao fazer qualquer alteração no arquivos nativos do Magento.

Um abraço!

2017-01-24T20:24:09+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x