Como Criar um Formulário de Contacto com PHPMailer

Um formulário de contacto permite que os utilizadores enviem mensagens diretamente do seu site. Para isso, vamos precisar de dois ficheiros a trabalhar em conjunto:

  1. formulario.html: A página com os campos para o utilizador preencher (nome, e-mail, mensagem).
  2. processar-formulario.php: O script PHP que recebe os dados do formulário e usa o PHPMailer para os enviar para o seu e-mail.

Ambos os ficheiros devem ser criados na pasta public_html, ao lado da pasta PHPMailer-master.

O envio autenticado e a instalação do PHPMailer podem ser verificadas no artigo xxxxx (adicionar link artigo anterior).

Passo 1: Criar a Página do Formulário (formulario.html)

Crie um novo ficheiro chamado formulario.html na sua pasta public_html e cole o seguinte código:

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Formulário de Contacto</title>
    <style>
        body { font-family: sans-serif; line-height: 1.6; max-width: 600px; margin: 20px auto; padding: 20px; }
        h1 { color: #333; }
        label { display: block; margin-top: 15px; font-weight: bold; }
        input[type="text"], input[type="email"], textarea { width: 100%; padding: 10px; margin-top: 5px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; }
        button { background-color: #2a639b; color: white; padding: 12px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; margin-top: 20px; }
        button:hover { background-color: #1e4a78; }
    </style>
</head>
<body>
    <h1>Contacto</h1>
    <p>Envie-nos uma mensagem preenchendo o formulário abaixo.</p>

    <!-- O atributo 'action' aponta para o nosso script PHP -->
    <form action="processar-formulario.php" method="post">
        <label for="nome">O seu Nome:</label>
        <input type="text" id="nome" name="nome" required>

        <label for="email">O seu E-mail (para respondermos):</label>
        <input type="email" id="email" name="email" required>

        <label for="assunto">Assunto:</label>
        <input type="text" id="assunto" name="assunto" required>

        <label for="mensagem">Mensagem:</label>
        <textarea id="mensagem" name="mensagem" rows="6" required></textarea>

        <button type="submit">Enviar Mensagem</button>
    </form>
</body>
</html>

Passo 2: Criar o Script de Processamento (processar-formulario.php)

De seguida, crie o ficheiro processar-formulario.php. Este script é uma versão modificada do anterior: em vez de ter dados fixos, vai buscar a informação que o utilizador preencheu no formulário.

Copie o código abaixo para o seu ficheiro processar-formulario.php:

<?php
// Usa as classes da biblioteca PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Carrega os ficheiros da biblioteca
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';

// Verifica se o formulário foi submetido
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Recupera os dados do formulário
    $nome = htmlspecialchars($_POST['nome']);
    $email_visitante = htmlspecialchars($_POST['email']);
    $assunto = htmlspecialchars($_POST['assunto']);
    $mensagem = htmlspecialchars($_POST['mensagem']);

    $mail = new PHPMailer(true);

    try {
        // ----------------- CONFIGURAÇÕES DO SERVIDOR SMTP (ALTERE COM OS SEUS DADOS) -----------------
        $mail->isSMTP();
        $mail->Host       = 'mail.seudominio.com';        // <<< ALTERE AQUI
        $mail->SMTPAuth   = true;
        $mail->Username   = 'seu_email@seudominio.com';   // <<< ALTERE AQUI: O e-mail que vai enviar a mensagem
        $mail->Password   = 'sua_senha_do_email';         // <<< ALTERE AQUI
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
        $mail->Port       = 465;                          // <<< ALTERE AQUI
        $mail->CharSet    = 'UTF-8';

        // ----------------- REMETENTE E DESTINATÁRIOS -----------------
        $mail->setFrom('seu_email@seudominio.com', 'Formulário do Site'); // O e-mail que envia (deve ser o mesmo do Username)
        $mail->addAddress('seu_email@seudominio.com', 'O Meu Nome'); // <<< ALTERE AQUI: O e-mail que vai RECEBER a mensagem
        $mail->addReplyTo($email_visitante, $nome); // Adiciona o e-mail do visitante como "Responder Para"

        // ----------------- CONTEÚDO DO E-MAIL -----------------
        $mail->isHTML(true);
        $mail->Subject = 'Nova mensagem do formulário: ' . $assunto;
        
        // Corpo do e-mail formatado
        $mail->Body    = "Recebeu uma nova mensagem do seu formulário de contacto.<br><br>" .
                         "<b>Nome:</b> " . $nome . "<br>" .
                         "<b>E-mail:</b> " . $email_visitante . "<br>" .
                         "<b>Assunto:</b> " . $assunto . "<br>" .
                         "<b>Mensagem:</b><br>" . nl2br($mensagem);
        
        $mail->AltBody = "Recebeu uma nova mensagem.\n\n" .
                         "Nome: " . $nome . "\n" .
                         "E-mail: " . $email_visitante . "\n" .
                         "Assunto: " . $assunto . "\n" .
                         "Mensagem:\n" . $mensagem;

        $mail->send();
        echo '<h1>Mensagem Enviada!</h1><p>Obrigado pelo seu contacto. Responderemos em breve.</p><a href="formulario.html">Voltar</a>';

    } catch (Exception $e) {
        echo "<h1>Erro!</h1><p>A sua mensagem não pôde ser enviada. Por favor, tente novamente mais tarde.</p>";
        // echo "Erro detalhado: {$mail->ErrorInfo}"; // Descomente para depuração
    }
} else {
    echo "Acesso inválido.";
}
?>

Passo 3: Testar o Formulário

Está tudo pronto! Para testar, aceda à página do formulário no seu browser:

http://seudominio.com/formulario.html

Preencha os campos e clique em “Enviar Mensagem”. Irá surgir a mensagem de sucesso e receberá um e-mail com os dados que preencheu.

Este artigo foi útil?

Sim
Não
Agradecemos o seu feedback!
Precisa de mais informações sobre os nossos serviços?
Contacte a nossa equipa