O PHPMailer é uma popular classe PHP que envia e-mail autenticados, ou seja, é necessário de um servidor SMTP, um usuário e uma senha para enviar e-mails, isso garante que todos os e-mails enviados sejam legítimos.
Função mail() x PHPMailer
A função mail() do PHP é muito útil quando necessita enviar e-mail para o próprio servidor local no qual está hospedado o site, por exemplo, se o seu site possui o domínio minhaloja.com.br, a função mail() será muito eficiente para enviar e-mail para endereços @minhaloja.com.br desde que, os e-mail estejam criados no mesmo servidor da hospedagem.
No entanto, se você quer fazer envio de mensagens para outros servidores, a função mail() muito provavelmente será rejeitada pelo servidor do dentinário. Justamente por não ser um e-mail autenticado, o servidor do destinatário não poderá comprovar a legitimidade deste envio e irá classificar como SPAM.
Quando você autentica o envio do e-mail, o servidor do destinatário sabe, através dos cabeçalhos do e-mail, a origem do envio, o nome do servidor, o IP do servidor, o IP do envio, o agente de envio entre outras informações, portanto, as chances de um e-mail autenticado ser classificado como SPAM será quase zero.
Downlod do PHPMailer
- Faça o download da classe PHPMailer na página oficial do desenvolvedor disponível no gitHub: https://github.com/Synchro/PHPMailer. Se você nunca fez um download usando o GitHub, procure pelo botão Clone or Download e clique em Download ZIP.
- Descompacte o arquivo PHPMailer-master.zip
- Entre na pasta descompactada e renomeie a pasta PHPMailer-master para um nome mais amigável, recomendamos que renomeie para apenas phpmailer
- Publique a pasta phpmailer no seu servidor de hospedagem, ou, no seu servidor localhost caso tenha algum serviço de sendmail instalado.
Exemplo com um formulário de contato com PHPMailer
Vamos aplicar o PHPMailer no seguinte exemplo; um formulário de contato que irá enviar para um e-mail para o proprietário do site os dados preenchidos no formulário e uma mensagem de “muito obrigado” para o visitante do site.
- Tenha em mãos os dados de autenticação da sua conta de e-mail, isso incluir saber o nome do servidor, a porta de envio SMTP (normalmente a 587), o usuário e a senha da conta que fará o envio.
- Junto com a pasta phpmailer, crie um arquivo com o nome de envio.php, usando o seguinte código:
<?php $mail = new PHPMailer(); $mail->IsSMTP(); // envia por SMTP $mail->CharSet = 'UTF-8'; $mail->True; $mail->Host = "smtp.seudominio.com.br"; // Servidor SMTP $mail->Port = 587; $mail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação $mail->Username = "seuemail@seudominio.com.br"; // SMTP username $mail->Password = "senha"; // SMTP password $mail->From = "seuemail@seudominio.com.br"; // From $mail->FromName = "Sua Empresa" ; // Nome de quem envia o email $mail->AddAddress($mailDestino, $nome); // Email e nome de quem receberá //Responder $mail->WordWrap = 50; // Definir quebra de linha $mail->IsHTML = true ; // Enviar como HTML $mail->Subject = $assunto ; // Assunto $mail->Body = '<br/>' . $mensagem . '<br/>' ; //Corpo da mensagem caso seja HTML $mail->AltBody = "$mensagem" ; //PlainText, para caso quem receber o email não aceite o corpo HTML if(!$mail->Send()) // Envia o email { echo "Erro no envio da mensagem"; } ?>
- Salve o arquivo junto com a pasta phpmailer, mas não dentro dela, veja a imagem;
- Crie o formulário de contato com o nome de contato.php usando o código a seguir;
<html lang="pt-br"> <head> <meta charset="utf-8"> <title>Formulário de Contato do Blogson</title> <!--Bootstrap --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <div class="container"> <?php if ($_POST) { //Carrega as classes do PHPMailer include("./phpmailer/class.phpmailer.php"); include("./phpmailer/class.smtp.php"); //envia o e-mail para o visitante do site $mailDestino = $_POST['txtEmail']; $nome = $_POST['txtNome']; $mensagem = "Obrigado pelo seu contato, responderemos ASAP!"; $assunto = "Obrigado pelo seu contato!"; include("./envio.php"); //envia o e-mail para o administrador do site $mailDestino = 'contato@blogson.com.br'; $nome = 'Blogson - O Blog do Prof. Anderson'; $assunto = "Mensagem recebida do site"; $mensagem = "Recebemos uma mensagem no site <br/> <strong>Nome:</strong> $_POST[txtNome]<br/> <strong>e-mail:</strong> $_POST[txtEmail]<br/> <strong>mensagem:</strong> $_POST[txtMensagem]"; include("./envio.php"); } ?> <form method="POST" name="formContato"> <label>Informe seu nome: </label> <input type="text" name="txtNome" placeholder="João" class="form-control" required> <label>Informe seu e-mail: </label> <input type="email" name="txtEmail" placeholder="a@a.com" class="form-control" required> <label>Deixe sua mensagem: </label> <textarea rows="6" class="form-control" name="txtMensagem"></textarea> <br/> <div style="text-align:center"> <button type="submit" class="btn btn-default btn-lg"> Enviar Mensagem </button> </div> </form> </div> </body> </html>
- Salve o arquivo junto com o arquivo envio.php, A página ficará desta forma:
- Prontinho! Se todas as configurações estiverem corretas, basta testar no seu servidor on-line.
Um visitante que possui uma conta no GMail receberá a mensagem de agradecimento da seguinte forma;
Já o administrador do site, que utiliza o cliente de e-mail Thunderbird receberá da seguinte forma;
Exemplo PHPMailer autenticando no GMail / GSuite.
Se você usa GMail ou é usuário do G Suite, e quiser autenticar seus e-mails através dele, basta acrescentar a linha $mail->SMTPSecure = “tls”; no arquivo envio.php, ficando;
<?php $mail = new PHPMailer(); $mail->IsSMTP(); $mail->CharSet = 'UTF-8'; $mail->True; $mail->Host = "smtp.gmail.com"; // Servidor SMTP $mail->SMTPSecure = "tls"; // conexão segura com TLS $mail->Port = 587; $mail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação $mail->Username = "suaconta@gmail.com"; // SMTP username $mail->Password = "senha"; // SMTP password $mail->From = "suaconta@gmail.com"; // From $mail->FromName = "Sua Empresa" ; // Nome de quem envia o email $mail->AddAddress($mailDestino, $nome); // Email e nome de quem receberá //Responder $mail->WordWrap = 50; // Definir quebra de linha $mail->IsHTML = true ; // Enviar como HTML $mail->Subject = $assunto ; // Assunto $mail->Body = '<br/>' . $mensagem . '<br/>' ; //Corpo da mensagem caso seja HTML $mail->AltBody = "$mensagem" ; //PlainText, para caso quem receber o email não aceite o corpo HTML if(!$mail->Send()) // Envia o email { echo "Erro no envio da mensagem"; } ?>
Download do exemplo usando PHPMailer
O exemplo mostrado nesta publicação está disponível aqui no Blogson:
https://www.blogson.com.br/wp-content/uploads/2020/02/exemplo-phpmailer-blogson.zip
Importante! Evite testar em localhost.
Este script funcionará bem em um servidor de hospedagem web. Caso tente executá-lo em localhost você poderá problemas para se conectar ao serviço de SMTP do seu provedor.
Uma forma de resolver isso é instalar o Fake SendMail. Após instalado, configure o php.ini, edite a linha sendmail_path indicando o caminho de instalação do Fake SendMail.
sendmail_path = "c:\SendMail\sendmail.exe -t"