Sites e aplicações
Configurar o Magento 1.9 e anteriores para o envio de e-mails por SMTP
O Magento 1.x (incluindo a 1.9) envia os e-mails com a função mail() do PHP. Esses e-mails saem sem autenticação, e fornecedores como o Gmail, o Hotmail ou a Orange enviam-nos para o spam ou rejeitam-nos. A solução é enviá-los por SMTP autenticado com uma conta de correio do seu domínio.
Ao contrário do Magento 2, o Magento 1 não traz uma opção de SMTP na administração. Tem duas formas de o fazer: com uma extensão (recomendada) ou editando o código.
O Magento 1 deixou de receber atualizações de segurança em junho de 2020. Se a sua loja ainda estiver nele, pondere passar para o OpenMage, a sua continuação mantida (este guia também serve para o OpenMage), ou para o Magento 2.
Antes de começar, crie no cPanel a conta de correio a partir da qual sairão os e-mails, por exemplo tienda@tudominio.com.
Opção 1: extensão SMTP Pro (recomendada)
O SMTP Pro Email da ASchroder é uma extensão gratuita e de código aberto, compatível com o Magento 1.x até à 1.9.4.x e com o OpenMage, que a recomenda na sua documentação. A última versão publicada é a 2.0.7.
Instalá-la
Entre por SSH na pasta do Magento (normalmente public_html), descarregue a versão 2.0.7 e copie a sua pasta app por cima da da loja:
cd ~/public_html wget https://github.com/aschroder/Magento-SMTP-Pro-Email-Extension/archive/refs/tags/2.0.7.zip -O smtp-pro.zip unzip smtp-pro.zip cp -r Magento-SMTP-Pro-Email-Extension-2.0.7/app/* ./app/ rm -rf Magento-SMTP-Pro-Email-Extension-2.0.7 smtp-pro.zip
Se a sua loja for um OpenMage instalado com o Composer, pode instalá-la com composer require aschroder/smtp_pro.
Esvazie a cache em System > Cache Management: selecione todos os tipos e clique em Refresh. Também o pode fazer por SSH:
rm -rf var/cache/*
Depois termine sessão na administração e volte a entrar; caso contrário, a secção de configuração da extensão dá um erro 404.
Configurá-la
Na administração, vá a System > Configuration e, no menu da esquerda, a ASCHRODER EXTENSIONS > SMTP Pro. Preencha:
| Campo | Valor |
|---|---|
| Email Connection | Custom SMTP |
| Authentication | Login |
| Username | a conta de correio completa, por exemplo tienda@tudominio.com |
| Password | a palavra-passe dessa conta |
| Host | localhost |
| Port | 25 |
| SSL Security | None |
Usamos localhost, a porta 25 e sem encriptação porque a ligação é feita dentro do mesmo servidor e não sai para a Internet. Se enviar com uma conta externa (Gmail, Microsoft 365…), use o servidor, a porta e a encriptação indicados por esse fornecedor, por exemplo a porta 587 com TLS.
Clique em Save Config no canto superior direito.
Testá-la
No mesmo ecrã do SMTP Pro, clique no botão Test: a extensão envia um e-mail de teste e mostra-lhe se a ligação funcionou. Depois faça um teste real, como uma encomenda de teste ou uma mensagem a partir do formulário de contacto, e verifique se chega.
Opção 2: editar o código (sem extensão)
Se não puder instalar extensões, pode obrigar o Magento a usar SMTP modificando os dois ficheiros que enviam o correio: Template.php (envios diretos) e Queue.php (envios em fila, desde o Magento 1.9.1).
Não edite os originais de app/code/core/, porque uma atualização substituí-los-ia. Copie os ficheiros para app/code/local/, que tem prioridade sobre core e não é alterada ao atualizar.
1. Copie os ficheiros para app/code/local
Por SSH, a partir da pasta do Magento:
mkdir -p app/code/local/Mage/Core/Model/Email/ cp app/code/core/Mage/Core/Model/Email/Template.php app/code/local/Mage/Core/Model/Email/Template.php cp app/code/core/Mage/Core/Model/Email/Queue.php app/code/local/Mage/Core/Model/Email/Queue.php chmod 600 app/code/local/Mage/Core/Model/Email/*.php
O chmod 600 faz com que só o seu utilizador possa ler os ficheiros, que vão conter a palavra-passe do correio. A pasta app já está protegida pelo .htaccess do Magento, pelo que não podem ser descarregados a partir do navegador.
2. Edite o Template.php
Abra app/code/local/Mage/Core/Model/Email/Template.php e procure o método getMail():
public function getMail() { if (is_null($this->_mail)) { $this->_mail = new Zend_Mail('utf-8'); } return $this->_mail; }
Substitua-o por:
public function getMail() { if (is_null($this->_mail)) { $smtp_host = Mage::getStoreConfig('system/smtp/host'); $smtp_port = Mage::getStoreConfig('system/smtp/port'); $config = array( 'port' => $smtp_port, 'auth' => 'login', 'username' => 'tienda@tudominio.com', 'password' => 'tu_contraseña' ); $transport = new Zend_Mail_Transport_Smtp($smtp_host, $config); Zend_Mail::setDefaultTransport($transport); $this->_mail = new Zend_Mail('utf-8'); } return $this->_mail; }
3. Edite o Queue.php
Abra app/code/local/Mage/Core/Model/Email/Queue.php e, dentro do método send(), procure estas linhas:
ini_set('SMTP', Mage::getStoreConfig('system/smtp/host')); ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
Substitua-as por:
$smtp_host = Mage::getStoreConfig('system/smtp/host'); $smtp_port = Mage::getStoreConfig('system/smtp/port'); $config = array( 'port' => $smtp_port, 'auth' => 'login', 'username' => 'tienda@tudominio.com', 'password' => 'tu_contraseña' ); $transport = new Zend_Mail_Transport_Smtp($smtp_host, $config); Zend_Mail::setDefaultTransport($transport);
No mesmo método, procure este bloco e apague-o ou comente-o, porque, se houver um Return-Path configurado, volta a colocar o envio por Sendmail e anula o SMTP:
if ($parameters->getReturnPathEmail() !== null) { $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $parameters->getReturnPathEmail()); Zend_Mail::setDefaultTransport($mailTransport); }
Nos dois ficheiros, substitua tienda@tudominio.com e tu_contraseña pelos dados da sua conta de correio.
4. Reveja as definições de envio
Na administração, vá a System > Configuration > Advanced > System > Mail Sending Settings e verifique:
- Disable Email Communications: No.
- Host:
localhost. - Port (25):
25. - Set Return-Path: No. O
Template.phptambém tem um bloco que muda para o Sendmail quando esta opção está ativa.
O código lê o host e a porta daqui, com Mage::getStoreConfig('system/smtp/host') e Mage::getStoreConfig('system/smtp/port').
5. Esvazie a cache e recompile
Se tiver o compilador ativado (vê-o em System > Tools > Compilation), recompile para que o Magento use os ficheiros novos:
php shell/compiler.php clear php shell/compiler.php compile
E esvazie a cache:
rm -rf var/cache/*
Edite sempre os dois ficheiros: se só alterar um, os e-mails que saem pelo outro caminho continuarão a usar a mail(). Se atualizar o Magento ou o OpenMage, compare as suas cópias de app/code/local com os ficheiros novos de core e volte a aplicar as alterações se tiverem mudado.
Se algo falhar
- Os e-mails das encomendas não saem, mas o de teste sim: desde o Magento 1.9.1, os e-mails das encomendas vão para uma fila que é processada com o cron. Verifique se tem uma tarefa cron que executa
cron.shoucron.phpa cada poucos minutos. - Ecrã de manutenção depois de instalar a extensão: apague o ficheiro
maintenance.flagda pasta do Magento. - Erro de ligação a um servidor externo: para usar TLS ou SSL, a extensão do PHP OpenSSL deve estar ativa no seletor de PHP do cPanel.
Também lhe pode ser útil
- Instalar e atualizar o Magento 2.4 sem Elasticsearch nem OpenSearch O Magento 2.4 exige Elasticsearch ou OpenSearch, que não funcionam num alojamento partilhado. Como i...
- Mail Alerts: receber avisos de encomendas, stock e devoluções no PrestaShop Instale e configure o módulo Mail Alerts do PrestaShop para receber um e-mail a cada encomenda nova,...
- Mostrar a imagem e o preço nas pesquisas instantâneas do PrestaShop 1.6, 1.7, 8 e 9 Código para que a pesquisa instantânea (AJAX) do PrestaShop mostre a imagem e o preço de cada produt...
- Mudar para espanhol o idioma da loja e da administração do PrestaShop Coloque o PrestaShop em espanhol: importe o pacote de localização de Espanha, escolha o espanhol com...
Algo não bate certo ou mudou? Diga-nos e revemos.