Email

Como melhorar a forma como sites em WordPress enviam e-mails

Existe uma maneira melhor de enviar e-mails pelo WordPress? Descubra por que o método padrão pode causar problemas de servidor e entregabilidade. Além disso, entenda como usar uma alternativa viável de código aberto.
Imagem para Como melhorar a forma como sites em WordPress enviam e-mails

Se você usa a função mail() padrão do PHP para enviar e-mails pelo WordPress, pode estar enfrentando problemas de entregabilidade ou de servidor, especialmente com envios em alto volume. Felizmente, existe uma maneira mais confiável. Com as soluções certas, você pode usar servidores de protocolo de transferência de correio simples (SMTP).

Para toda a sua comunicação por e-mail, o WordPress tem uma função especial chamada wp_mail() que, em um ambiente padrão, usa a phpMailer biblioteca de código aberto para criar o e-mail, definir os cabeçalhos apropriados, lidar com as versões em HTML e texto simples e, então, colocar o e-mail na fila para entrega. Por baixo dos panos, o phpMailer usa por padrão a função integrada do PHP chamada mail().

Na maioria dos sistemas, a função mail() do PHP simplesmente chama o executável que estiver definido na diretiva de configuração sendmail_path. Esse programa lê a entrada padrão para os cabeçalhos, corpo do e-mail, anexos etc. e realiza várias verificações. Por exemplo, ele verifica se o endereço do destinatário é válido.

Se estiver tudo certo, dependendo da configuração do sistema, esse programa geralmente envia o e-mail por um servidor SMTP local ou o coloca em uma fila para que o servidor SMTP local o processe mais tarde.

Infelizmente, esse não é o melhor método para a entregabilidade de e-mail ou envios em alto volume.

O problema de como o WordPress envia e-mails

WordPress-logotype-standard

Colocar o e-mail na fila para o servidor SMTP local é bem eficiente, já que o mail() do PHP pode retornar imediatamente, sem ter de esperar a mensagem ser enviada de fato. 

No entanto, o próprio servidor SMTP local pode se tornar rapidamente um gargalo. Isso acontece porque ele pode ter de se comunicar com centenas de agentes de transferência de e-mail (MTAs) de terceiros e monitorar cada e-mail, tentar reenviar em caso de falha etc. Isso pode ser muito trabalho para um servidor que não foi criado para ser um servidor de e-mail.

E essa é apenas uma parte do problema. O segundo e maior problema é a entregabilidade. Você vai notar que boa parte dos e-mails enviados diretamente por servidores web costuma parar na pasta de spam, devido a configurações incorretas ou incompletas de protocolos de autenticação de e-mail (SPF, DKIM etc.), que podem ser complicados de configurar. A reputação do endereço IP do servidor web também tem uma função fundamental na entregabilidade.

E em ambientes de hospedagem compartilhada, é ainda mais complicado, pois (geralmente) você tem apenas um servidor SMTP, mas vários domínios, endereços de “from” e assinaturas, algo muito difícil de configurar corretamente e ainda mais difícil de manter limpo e livre de abusos.

É por isso que a maioria dos provedores de hospedagem, principalmente os de serviços gerenciados do WordPress, limita a taxa e filtra todos os e-mails de saída. Isso não é muito útil, especialmente no e-commerce, em que o e-mail é mais frequente e tão crucial para o sucesso: carrinhos abandonados, listas de desejos, ofertas especiais etc.

A maioria das plataformas de hospedagem recomendará usar um serviço de e-mail transacional de terceiros, como o Mailgun, para resolver todos esses problemas.

Os benefícios de um serviço de e-mail transacional

O Mailgun e outros serviços de e-mail transacionais se encarregam de entregar o e-mail da forma mais rápida e eficiente possível. Eles definem os cabeçalhos de e-mail apropriados, assinaturas etc. e orientam na configuração dos registros de DNS corretos para os seus domínios, o que aumenta as chances de as suas mensagens chegarem às caixas de entrada dos destinatários.

O Mailgun também oferece muitos recursos adicionais, como validações de e-mail, verificações de reputação, registros, análises, testes A/B e muito mais.

Tudo o que resta para quem administra o site é fazer com que a mensagem vá do aplicativo no WordPress para a fila do Mailgun. Existem várias maneiras de fazer isso.

Como configurar o Mailgun via SMTP com filtros do WordPress

blog_post_default_image

Profissionais de desenvolvimento do WordPress geralmente conhecem bem o conceito de ações e filtros dessa plataforma, e criar um plug-in pequeno, personalizado e obrigatório (must-use) seria a maneira mais simples e rápida de começar a usar o Mailgun:

                                

                                    add_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
                                
                            

Isso cria uma função vinculada à ação phpmailer_init no WordPress, que configura a biblioteca phpMailer para enviar e-mails usando um servidor SMTP externo. O nome de usuário e a senha podem ser obtidos (ou redefinidos) no seu painel do Mailgun.

Quando ativo, esse trecho de código impedirá que o phpMailer use a função mail() do PHP e, em vez disso, roteará todos os e-mails de saída para os servidores SMTP do Mailgun. Você pode verificar isso enviando um e-mail de recuperação de senha para a sua própria conta, por exemplo, e acompanhando a seção de logs no seu painel do Mailgun.

mailgun-dashboard-screenshot

Como usar um plug-in SMTP para WordPress

Criar o seu próprio pequeno plug-in nem sempre é uma boa opção, principalmente para quem não tem familiaridade com a linguagem de programação PHP ou com o funcionamento das ações e filtros do WordPress. A alternativa é usar um plug-in pronto.

                                

                                    rnadd_action( 'phpmailer_init', function( $m ) {rnrnt$m->Host = 'smtp.mailgun.org';rnrnt$m->Port = 587;rnrnt$m->Username = 'postmaster@yourdomain.org';rnrnt$m->Password = 'your secret password';rnrnt$m->isSMTP();rnrnt$m->SMTPAuth = true;rnrnt$m->SMTPSecure = 'tls';rnrn} );rn
                                
                            

O plug-in do Mailgun é uma ótima opção que, além de enviar via SMTP, também consegue enviar mensagens de saída usando a API HTTP do Mailgun. Isso é especialmente útil em ambientes de hospedagem compartilhada, em que qualquer comunicação SMTP de saída é simplesmente bloqueada para evitar abusos.

As credenciais da API também ficam no seu painel do Mailgun.

Existem outras opções de plug-in SMTP também, que podem ser úteis se você quiser enviar por meio de um servidor SMTP de terceiros que não seja o Mailgun.

Considerações sobre o desempenho e alternativas

Um ponto importante: ao usar esses plug-ins ou trechos de código para fazer o WordPress entregar e-mails a um serviço SMTP de terceiros, você acaba comprometendo o desempenho do aplicativo.

Em vez de simplesmente repassar um texto para o executável local do sistema sendmail, esses plug-ins forçam o WordPress a trabalhar muito mais. Isso inclui abrir uma nova conexão, realizar um handshake TLS e autenticar usando SMTP com um serviço externo de terceiros. Para envios em alto volume, isso pode não ser uma boa opção, só por causa do fator latência.

Há uma descrição bem detalhada sobre esses problemas de desempenho no artigo O wp_mail() não está com problemas, no qual usamos o profiler Sail WordPress para medir o tempo necessário para enviar 20 e-mails. Os plug-ins SMTP tiveram um desempenho até 90 vezes mais lento do que o método padrão do sendmail.

A melhor alternativa é usar uma combinação de uma fila local com um serviço de e-mail transacional. Você pode fazer isso usando um MTA local, como o Postfix, no modo de retransmissão SMTP, em que ele atuará como um servidor SMTP local. Mas tudo o que ele receber será apenas retransmitido ao serviço de terceiros, como o Mailgun.

Isso garante que o WordPress não precise fazer nenhum trabalho pesado na hora de enviar e-mails e também melhora a entregabilidade de e-mails usando o Mailgun no envio.

Lembre-se de que esse método requer privilégios de nível raiz (root) para instalar e configurar esse software no seu servidor. Sendo assim, dá um pouco mais de trabalho do que um simples plug-in do WordPress. Porém, se você usar o Sail para implantar e gerenciar o WordPress na DigitalOcean, é possível ter essa configuração exata em um único esquema (blueprint):

                                

                                    rnsail blueprint mailgun.yamlrn
                                
                            

Esse blueprint instalará e configurará uma instância do Postfix no seu servidor para retransmitir e-mails aos servidores SMTP do Mailgun. O sistema pedirá o nome de usuário e a senha do SMTP, que você pode obter ou redefinir no seu painel do Mailgun.

Se você não usar o Sail e preferir fazer as coisas de modo manual, veja um ótimo guia sobre como configurar uma retransmissão local usando o Postfix no Linux Ubuntu.

Escolha uma maneira confiável de enviar e-mails com o WordPress

Para muitas empresas, o e-mail é uma parte vital dos negócios. É preciso ter um método confiável para enviar mensagens, principalmente e-mails transacionais. Se a sua empresa faz envios em alto volume, a equipe de desenvolvimento deve avaliar outras soluções de e-mail do WordPress além da opção padrão.

Uma das maiores vantagens em usar soluções de código aberto como o WordPress é que a equipe de desenvolvimento tem acesso a todos os tipos de recursos, incluindo plug-ins e soluções gratuitas. Combinar o Mailgun com o Sail CLI é um excelente exemplo de como equipes de desenvolvimento conseguem escalar aplicativos do WordPress e implementar uma maneira melhor de enviar e-mails pela plataforma.

Konstantin Kovshenin contribui para o WordPress Core, dá palestras, desenvolve plug-ins e é especialista no desempenho, escala e segurança do WordPress.