Fabrizio Feitosa

Fabrizio Feitosa

Exploro o universo do desenvolvimento com artigos, tutoriais e reflexões sobre tecnologia — compartilhando aprendizados reais e dicas práticas do dia a dia.


Voltar

WordPress: Envio de e-mail em Localhost

Sabe quando você está criando um site WordPress no localhost e coloca um formulário projetado para enviar uma notificação por e-mail, mas precisa esperar colocar online para testar? Então, vou te mostrar como enviar e-mail em localhost de uma maneira simples e fácil.


Você já precisou enviar um e-mail via localhost mas teve que esperar colocar online?

Estava eu desenvolvendo um site usando o Flywheel Local WP (pode ser um Xampp também) e precisei testar que após usar "Redefinir senha" fossem realizadas certas ações. Daí eu pensei:

"Vou precisar de um servidor online pra testar esse fluxo.. Que chato né?".

Pois é, fiquei triste. Mas daí resolvi dar uma rápida pesquisada se o Flywheel Local WP tinha algum tipo de suporte para tratar os e-mails no localhost. Encontrei uma opção em "Tools > Mailhog" mas essa opção só mostra as coisas que o Administrador do site recebe, e somente se estiver habilitado para fazer isso, e que seria útil mas não totalmente porque eu queria a experiência do usuário. Queria saber como chegava o e-mail e essas coisas.

Em meio ao Google encontrei uma pessoa com a mesma dúvida no fórum da Flywheel Local WP e nas respostas tinham algumas soluções como usar um plugin SMTP e configurar um servidor de e-mail. Foi até a resposta escolhida como a certa lá. Eu até conheço um servidor que é gratuito e funcionaria, mas e se minha internet cair? Eu ia ficar no prejuízo né?

Continuei lendo a discussão e encontrei um usuário chamado Martin Kaiser (@martinbkaiser no github) dizendo que:

Eu mesmo me deparei com esse problema, então decidi escrever um plugin rápido que salva e-mails como arquivos HTML no diretório raiz.

Pode ser útil para você também.

Achei genial a solução dele e resolvi testar. Funciona perfeitamente! Então, vamos parar de enrolar e ir logo para a solução dele, ok?

Instalação do plugin

1. Acesse a pasta de plugins

Vá na pasta dos plugins que fica em wp-content/plugins;

2. Crie uma nova pasta

Crie uma pasta chamada flywheel-local-email-testing-plugin ou qualquer outro nome, só deixei o original do autor;

3. Crie o arquivo index.php

Dentro da pasta, crie um index.php e cole esse código aqui:

<?php
    /*
    Plugin Name: Flywheel Local WP Email to HTML (For testing locally)
    Plugin URI: www.itsconsultinginc.ca
    Description: Creates a folder in the sites root Public folder called /local-mail-test/. Any emails sent from the site will be saved as HTML files in there with a timestamp.
    Author: Martin Kaiser
    Version: 1.0
    Author URI: www.itsconsultinginc.ca
    */
 
function filter_local_mail( $args ) {
    // Modify the options here
    $custom_mail = array(
        'to'          => $args['to'],
        'subject'     => $args['subject'],
        'message'     => $args['message'],
        'headers'     => $args['headers'],
        'attachments' => $args['attachments'],
    );
 
    if (!file_exists('local-mail-test')) {
    	mkdir('local-mail-test', 0777, true);
	}
    $myfile = fopen("local-mail-test/email_".mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $custom_mail['subject'])."_".date('m-d-Y_h-i-s').".html", "w");
    $html = '<!doctype html>';
    $html .= '<html lang="en">';
	    $html .= '<head>';
	    $html .= '</head>';
    	$html .= '<body>';
    		$html .= '<p><b>Subject:</b> '.$custom_mail['subject'].'</p>';
    		$html .= '<p><b>To:</b> '.$custom_mail['to'].'</p>';
    		$html .= '<p><b>Message:</b> '.$custom_mail['message'].'</p>';
    		$html .= '<p><b>Headers:</b> '.$custom_mail['headers'].'</p>';
    	$html .= '</body>';
    $html .= '</html>';
    fwrite($myfile, $html);
    // Return the value to the original function to send the email
    return $custom_mail;
}
add_filter( 'wp_mail', 'filter_local_mail' );
 
?>

4. Crie a pasta de destino

Estamos quase terminando! Vá na pasta raiz, onde seu WordPress está instalado, e crie uma pasta chamada local-mail-test (deixei destacado caso você queira mudar o nome);

5. Teste o plugin

Pronto, agora é só enviar qualquer formulário de e-mail do seu site local que será gerado um arquivo HTML dentro da pasta!

Como funciona

Achei simples e funcional! Clicando aqui você vai ver o repositório dele no GitHub com esse plugin. O entendimento do código é bem simples, então você pode personalizar se quiser.

Considerações importantes

Eu li comentários de pessoas que usaram esse código e relataram erro de CORS. Isso vai depender da fonte de onde vem a imagem. Eu puxei de uma API, então não enfrentei esse problema. Se alguém passar por isso e tiver uma solução é só me falar que eu atualizo aqui.


Enfim, terminamos por hoje. Em breve eu apareço por aqui de novo para escrever alguma outra dica útil que encontrar.