Magento: envio de e-mails transacionais não funciona
29 de julho de 2009Este é um dos principais problemas que os usuários brasileiros de Magento encontram: o sistema não envia e-mails transacionais (nem de cadastro, formulário de contato ou qualquer outro). Bem, vou tentar resumir abaixo o que você deve fazer para enviar corretamente os e-mails com as vendas, faturas, pedidos, etc. Você pode utilizar a lista a seguir como uma “checklist”, na ordem:
- Verifique sua tradução instalada: se a tradução utilizada não contiver o diretório /app/locale/pt_BR/template/email/sales, você não conseguirá carregar os e-mails “base” para criar seus próprios e-mails de venda pelo admin. Baixe um pacote atualizado, completo. Importante: se você mudar a língua do sistema para en_US e os e-mails estiverem saindo, os passos 1 a 4 deverão solucionar o seu problema.
- Verifique as permissões do diretório de tradução: por padrão, todos os diretórios sob /app/locale/pt_BR devem permissão 775 (chmod em sistemas Unix-like). Deixe também todos os arquivos com permissão 644. Se mesmo assim você não estiver conseguindo carregar os templates ao criar um novo e-mail transacional no admin, experimente outras permissões (p. ex. 777 para todo mundo), pois este ponto pode variar conforme as restrições de seu servidor de hosting.
- Verifique a codificação dos templates: todos os arquivos .html dentro do diretório /sales devem estar em UTF-8, pois os caracteres acentuados podem impossibilitar o carregamento dos templates no admin, se os arquivos estiverem em ISO ou outro formato (a mensagem de “carregando” fica aparecendo eternamente e não carrega nada). Se você baixou um bom pacote de tradução, seus arquivos já devem estar codificados em UTF-8.
- Verifique as configurações de e-mails de vendas: vá até Sistema > Configuração > VENDAS > E-mails de vendas e revise todas as configurações. Assegure-se de habilitar todos os e-mails, selecione corretamente os remetentes (preferencialmente e-mails reais) e os modelos (deve haver um modelo em português para cada e-mail transacional).
- Verifique as permissões de envio de e-mail do seu provedor: talvez você precise solicitar ao provedor que habilite o e-mail nobody para envio de e-mails a partir da sua conta de hospedagem.
- Altere a função do Magento que envia as mensagens: o Magento utiliza o Sendmail para enviar e-mails. Este serviço pode estar configurado de diversas formas, dependendo das restrições de segurança do seu servidor de hosting e, portanto, se você revisou todos os itens acima e seu sistema ainda não envia mensagens, a possibilidade de o Sendmail ser o vilão dessa história é grande. Para “driblar” esta dificuldade, altere o método da biblioteca Zend que envia os e-mails, para usar a função “mail” padrão do PHP, em /lib/Zend/Mail/Transport/Sendmail.php:
/**
* Send mail using PHP native mail()
*
* @access public
* @return void
* @throws Zend_Mail_Transport_Exception on mail() failure
*/
public function _sendMail()
{
/**
if ($this->parameters === null) {
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header);
} else {
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
}
*/
$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');
}
}


