Uma das coisas mais importantes num site é o formulário de contacto, pois este permitirá os seus utilizadores/clientes contactarem consigo de forma a obterem ajuda ou esclarecimento relativamente às suas duvidas.
Para quem programa em PHP, provavelmente já conhece a função nativa mail() que permite o envio fácil de e-mails, no entanto esta tem várias limitações e nem sempre é a melhor solução, tornando-se complicado caso pretenda efectuar o envio de e-mails mais complexos, com vários anexos, autenticação SMTP em servidores remotos, etc.
Neste caso recomendamos normalmente aos nossos clientes a utilização do PHPMailer, uma classe PHP utilizada por milhares de plataformas (WordPress, Drupal, Joomla, SugarCRM, entre outras), que permite facilmente a criação e envio de e-mails com autenticação SMTP (vários mecanismos de autenticação), múltiplos destinatários (TO, CC, BCC, Reply-TO), e-mails em HTML com alternativa em plain-text, anexos e imagens inline, múltiplas opções de encoding do texto, assinaturas DKIM e S/MIME e muito mais.
A implementação do PHPMailer é bastante fácil, pelo que tentaremos explicar abaixo como efectuar uma implementação mínima do PHPMailer para o envio de e-mails no seu site.
O código e a documentação completa do PHPMailer estão disponíveis no Github, podendo saltar este guia caso pretenda uma implementação mais avançada.
O ficheiro base para implementação do PHPMailer é o class.phpmailer.php, no entanto como vamos efectuar o envio de e-mails com autenticação num servidor SMTP, teremos também que utilizar o class.smtp.php. De forma a carregar ambos estes ficheiros, utilizaremos o PHPMailerAutoload.php.
Poderá criar uma pasta no seu site para testar o PHPMailer, por exemplo com o nome “mailer”, onde deverá ter neste momento três ficheiros:
- class.phpmailer.php
- class.smtp.php
- PHPMailerAutoload.php
Vamos agora criar o ficheiro responsável pelo envio do e-mail, neste caso “mailer.php” (poderá ter outro nome qualquer), onde será colocado o seguinte código:
<?php require 'PHPMailerAutoload.php'; // Carrega as classes PHP necessárias $mail = new PHPMailer; //$mail->SMTPDebug = 3; // Activa o modo debug para depuração de error $mail->isSMTP(); // Define a utilização de envio por SMTP $mail->Host = 'mail.oseudominio.pt'; // Especifica o servidor ou servidores SMTP utilizados para envio dos e-mails $mail->SMTPAuth = true; // Activa a autenticação SMTP $mail->Username = 'website@oseudominio.pt'; // Define o utilizador SMTP $mail->Password = 'P4ssw0rd'; // Define a password do utilizador SMTP acima $mail->SMTPSecure = 'ssl'; // Activa encriptação SSL, `tls` também é aceite $mail->Port = 465; // Define a porta TCP para ligação do servidor SMTP $mail->setFrom('website@oseudominio.pt', 'Nome do Site'); $mail->addAddress('jon.snow@oseudominio.pt', 'Jon Snow'); // Adiciona destinatário $mail->addAddress('john.doe@oseudominio.pt'); // Outro destinatário, sendo o nome opcional $mail->addReplyTo('info@oseudominio.pt', 'Informação'); $mail->addCC('cc@oseudominio.pt'); $mail->addBCC('bcc@oseudominio.pt'); $mail->addAttachment('/var/tmp/file.tar.gz'); // Adicionar anexo $mail->isHTML(true); // Define o formato HTML para o e-mail $mail->Subject = 'Assunto do E-mail'; $mail->Body = 'Conteúdo da mensagem de e-mail com <b>HTML</b><br>Segunda linha do e-mail'; $mail->AltBody = 'Texto alternativo da mensagem de e-mail, será visto em clientes de e-mail que não suportam HTML.'; if(!$mail->send()) { echo 'A mensagem não pôde ser enviada.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'A mensagem foi enviada com sucesso!'; }
Bastará alterar os parâmetros no ficheiro acima conforme as suas necessidades e esse ficheiro irá estar pronto para envio de e-mails, no entanto o que estará provavelmente à procura será uma forma de criar facilmente um formulário de contacto.
Criar formulário de contacto em PHP
Se pretende criar um formulário de contacto, poderá copiar o código do exemplo disponibilizado pelo PHPMailer e alterar os parâmetros do mesmo.
Deixamos abaixo um exemplo completo comentado com toda a informação que necessita para criar um formulário de contacto simples em PHP com envio dos e-mails utilizando o PHPMailer:
<?php /** * Formulário de Contacto simples em PHP com PHPMailer */ $msg = ''; if (array_key_exists('email', $_POST)) { require './PHPMailerAutoload.php'; //Criar nova instância do PHPMailer $mail = new PHPMailer; // Indicar que pretende utilizar SMTP e definir servidor $mail->isSMTP(); $mail->Host = 'mail.oseudominio.pt'; $mail->SMTPAuth = true; $mail->Username = 'website@oseudominio.pt'; $mail->Password = 'P4ssw0rd'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; // Definir o charset dos e-mails enviados $mail->CharSet = 'UTF-8'; //Utilize um endereço de e-mail fixo do seu domínio para endereço de remetente //Aconselhamos que crie uma conta de e-mail, por exemplo "website@oseudominio.pt" para utilizar como e-mail de FROM //Não utilize aqui o endereço de e-mail do remetente, pois irá provocar a que o e-mail seja considerado Spam //devido a falhar a autenticação SPF $mail->setFrom('website@oseudominio.pt', 'Contacto via Website'); //Defina o endereço de e-mail para onde a mensagem será enviada. Normalmente será o seu endereço de e-mail. $mail->addAddress('eu@oseudominio.pt', 'O Seu Nome'); //Indique o endereço do remetente como Endereço de Resposta (Reply-to) if ($mail->addReplyTo($_POST['email'], $_POST['name'])) { //Definir assunto do e-mail $mail->Subject = 'Contacto via Website'; //Definir que vamos utilizar HTML $mail->isHTML(true); //Definir versão HTML do e-mail $mail->Body = "<p><b>E-mail:</b> ". $_POST['email'] ."<br><b>Nome:</b> ". $_POST['name'] ."<br><b>Mensagem:</b><br>". $_POST['message']." </p><p>Mensagem enviada através do seu site - oseudominio.pt</p>"; //Definir versão alternativa do e-mail apenas em plain text $mail->AltBody = <<<EOT E-mail: {$_POST['email']} Nome: {$_POST['name']} Mensagem: {$_POST['message']} EOT; //Enviar a mensagem e verificar se ocorreram erros if (!$mail->send()) { //O motivo pelo qual um envio falha é mostrado em $mail->ErrorInfo //no entanto não deverá mostrar estes erros ao utilizador, pelo que deverá apenas activar em situações de debug $msg = 'Desculpe, ocorreu um problema a enviar o e-mail. Por favor tente novamente mais tarde.'; } else { $msg = 'Mensagem Enviada! Obrigado por nos contactar.'; } } else { $msg = 'Endereço de e-mail inválido. Mensagem ignorada.'; } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Formulário de Contacto</title> </head> <body> <h1>Contacte-nos</h1> <?php if (!empty($msg)) { echo "<h2>$msg</h2>"; } ?> <form method="POST"> <label for="name">Nome: <input type="text" name="name" id="name"></label><br> <label for="email">Endereço de E-mail: <input type="email" name="email" id="email"></label><br> <label for="message">Mensagem: <br><textarea name="message" id="message" rows="8" cols="20"></textarea></label><br> <input type="submit" value="Enviar"> </form> </body> </html>
Existem outras formas de efectuar o envio de e-mails via PHP, como por exemplo o componente ZendMail ou o Swiftmailer. Bastará analisar e verificar aquele que se adapta melhor à sua solução.
Se necessitar de uma implementação mais avançada, poderá contactar-nos para que lhe possamos apresentar uma proposta de desenvolvimento à medida.