Como faço um formulários PHP?

Adotamos como solução padrão de e-mail para nossos clientes o Google Apps. Este serviço oferecido pela Google Inc. é a melhor solução disponível em todo o mundo quando se trata de e-mails e serviços de Group Office.

Para o envio de e-mails através de páginas de um site o procedimento recomendado é utilizar a biblioteca PHP conhecida como Swift Mailer. Para facilitar o desenvolvimento de sites em nossos servidores, e que necessitem desta funcionalidade a biblioteca Swift Mailer está disponível pré-instalada para todos os sites hospedados conosco.

Abaixo temos um exemplo de sua utilização.

Inicialmente precisaremos de um arquivo que irá gerar uma página web com um formulário que será preenchido e depois remetido via e-mail para um destinatário:

form.php

<?php

//Display an error if something went wrong
if (!empty($_GET["error"]))
{
    switch ($_GET["error"])
    {
        case "not_enough_info": ?>
            <strong style="color: red;">você precisa preencher todos os campos marcados com *<strong><?php
            break;
        case "invalid_email": ?>
            <strong style="color: red;">Informe um endereço de email válido</strong><?php
            break;
        case "upload_failed": ?>
            <strong style="color: red;">Falha ao anexar o arquivo enviado, pode ser umproblema temporário.
            Por favor, tente de novo mais tarde.</strong><?php
            break;
        case "sending_failed": ?>
            <strong style="color: red;">Problema temporário ao enviar o email, tente de novo mais tarde.</strong><?php
            break;
    default: ?>
        <strong style="color: red;"><?php echo $_GET["error"]; ?></strong><?php
        
    }
}
 
?>
 
<form action="envia_email.php" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td class="label">Nome *</td>
            <td><input type="text" name="sender_name" value="" /></td>
        </tr>
        <tr>
            <td class="label">Seu email *</td>
            <td><input type="text" name="sender_email" value="" /></td>
        </tr>
        <tr>
            <td class="label">Seu telefone fixo *</td>
            <td><input type="text" name="sender_tel" value="" /></td>
        </tr>
        <tr>
            <td class="label">Seu celular *</td>
            <td><input type="text" name="sender_cel" value="" /></td>
        </tr>
        <tr>
            <td class="label">Cidade</td>
            <td><input type="text" name="sender_city" value="" /></td>
        </tr>
        <tr>
            <td class="label">Estado</td>
            <td><input type="text" name="sender_state" value="" /></td>
        </tr>
        <tr>
            <td class="label">Assunto *</td>
            <td><input type="text" name="comment_subject" value="" /></td>
        </tr>
        <tr>
            <td colspan="2">Mensagem *<br />
                <textarea name="comment_body" rows="10" cols="30"></textarea></td>
        </tr>
        <tr>
            <td class="label">Arquivo anexado (opcional)</td>
            <td><input type="file" name="attachment" /></td>
        </tr>

        <tr>
            <td colspan="2"><input type="submit" name="submit" value="Enviar" /></td>
        </tr>
    </table>
</form>
?>

 

Após o preenchimento do formulário o POST do mesmo será enviado para um script que irá processar os dados e enviar o e-mail:

envia_email.php

<?php

require_once 'swift_required.php';

// Paginas que serao exibidas em caso de sucesso ou nao no envio
$mail_sent_page  = './contato_confirma.php';
$mail_error_page = './form.php';

// Verifica se tem os campos obrigatórios
// retorna ao form se faltar algum
if (empty($_POST["sender_name"]) || empty($_POST["sender_email"])
    || empty($_POST["comment_subject"]) || empty($_POST["comment_body"]) 
    || empty($_POST["sender_tel"]) || empty($_POST["sender_cel"]) )
{
    // Redtorna ao formulário
    header("Location: " . $mail_error_page . "?error=not_enough_info"); // Coloque a URL absoluta se souber qual é
    exit();
}

# Associa os campos do formulario recebidos via POST com as variaveis usadas no corpo do email
$nome        = $_POST["sender_name"];
$email        = $_POST["sender_email"];
$tel            = $_POST["sender_tel"];
$cel            = $_POST["sender_cel"];
$cidade         = $_POST["sender_city"];
$estado         = $_POST["sender_state"];
$assunto        = "Novo Form: " . $_POST["comment_subject"];
$mensagem       = $_POST["comment_body"];
$data          = date("d/m/y");                     // para pegar a data de envio do e-mail
$ip            = $_SERVER['REMOTE_ADDR'];           // para pegar o ip do usurio
$navegador     = $_SERVER['HTTP_USER_AGENT'];       // para pegar o navegador do visitante
$hora          = date("H:i");                       // para pegar a hora com a funo date

// Valida o email usando regex (Existem exemplos melhores na internet!!)
if (!preg_match("/[a-zA-Z0-9_\\.-]+@[a-zA-Z0-9_\\.-]+/", $email))
{
    header("Location: " . $mail_error_page . "?error=invalid_email");
    exit();
}

// Verifica se foi anexado algum arquivo no form e se ele está disponível para ser usado na mensagem
$file_path = false;
$file_name = false;
$file_type = false;
if (!empty($_FILES["attachment"]["tmp_name"]))
{
    if ($_FILES["attachment"]["error"])
    {
        // Redireciona s eo upload do anexo falhou
        header("Location: " . $mail_error_page . "?error=upload_failed");
        exit();
    }
    $file_path = $_FILES["attachment"]["tmp_name"];
    $file_name = $_FILES["attachment"]["name"];
    $file_type = $_FILES["attachment"]["type"];
}

/* DAQUI PARA BAIXO FICA  ACONFIGURAÇÃO DA BIBLIOTECA DE ENVIO DE EMAILS */

# Servidor por onde o email sera enviado
$smtp_server  = 'smtp.gmail.com';
$smtp_porta   = 465;
$smtp_ssl     = 'tls';
$smtp_timeout = 60;

# Conta Google Apps do dominio utilizado para o envio do email
$smtp_acct = 'noreply@seudominio.com.br';
$smtp_pw   = 'suasenha';

# Para quem o conteudo do formulario sera enviado
$destinatario_nome = ':: Nome Destinatario ::';
$destinatario_email = 'contadestino@seudominio.com.br';

# Define se a pessoa que preencheu o formulario recebe uma copia via email
$copy2client = True;

# Define o tipo do conteúdo do corpo do email - text/plain ou text/html
$msg_body_type = 'text/plain';

# Quem sera o remtente do email - pode ser o mesmo que o smtp_acct acima ou nao
$from_email = 'noreply@seudominio.com.br';
$from_name  = 'Nao responda a este remetente';

// Monta o corpo da mensagem
$msg_corpo     = 'Contato com Thiago de Hungria' . chr(10) . chr(10) . 
    'Nome: ' . $nome . chr(10) . 
    'E-mail: ' . $email . chr(10) . chr(10) . 
    '-------------------------------------------------' . chr(10) . 
    'Dados preenchido pelo cliente' . chr(10) . chr(10) . 
    'Nome: ' . $nome . chr(10) . 
    'E-mail: ' . $email . chr(10) . 
    'Telefone: ' . $tel . chr(10) . 
    'Celular: ' . $cel . chr(10) . 
    'Cidade: ' . $cidade . chr(10) . 
    'Estado: ' . $estado . chr(10) . 
    'Assunto: ' . $assunto . chr(10) . 
    'Mensagem: ' . $mensagem . chr(10) . chr(10) . 
    '--------------------------------------' . chr(10) . 
    'Data: ' . $data . chr(10) . 
    'IP: ' . $ip . chr(10) . 
    'Navegador: ' . $navegador . chr(10) . 
    'Hora: ' . $hora . chr(10) . chr(10) ;

// Nao e necessario alterar nada abaixo
try
{

    // Connect to Gmail (PHP5)
    $connection = Swift_SmtpTransport::newInstance($smtp_server, $smtp_porta, $smtp_ssl);
    $connection->setTimeout($smtp_timeout);
    $connection->setUsername($smtp_acct);
    $connection->setPassword($smtp_pw);
    $mailer = Swift_Mailer::newInstance($connection);

    // Create the mailer and message objects
    //$message = new Swift_Message($assunto);
    $message = Swift_Message::newInstance();
    $message->setSubject($assunto);
    $message->setBody($msg_corpo, $msg_body_type);
    $message->setFrom(array($from_email => $from_name));
    $message->setSender($smtp_acct);
    $message->setReturnPath($from_email);
    $message->addTo($destinatario_email, $destinatario_nome);
    if ($copy2client) 
    {
        $message->addTo($email, $nome);
    }

    // Se um anexo foi enviado pelo form, anexe ele na mensagem
    if ($file_path && $file_name && $file_type)
    {
        $attachment = Swift_Attachment::fromPath($file_path, $file_type);
        $attachment->setFilename($file_name);
        $message->attach($attachment);
    }

    // Send
    $mailer->send($message);

    // Redirect to thanks page
    header("Location: " . $mail_sent_page);
}
catch (Exception $e)
{
    // handle errors here - $e->getMessage()
    header("Location: " . $mail_error_page . "?error=" . urlencode($e->getMessage()));
}


?>

Caso ocorra algum erro no processamento do formulário ou no envio do email o scrip retornará ao form.php exibindo o erro ocorrido, no caso de sucesso, o script acima redireciona o usuário para a página a seguir:

 

contato_confirma.php

&t;div>Obrigado, sua mensgem foi enviada corretamente.&t;/div>

 

Este pequeno exemplo implementa um formulário com campos obrigatórios ou não, uma pequena validação do campo email e, opcionalmente, o envio de anexos.

Para facilitar abaixo estão anexados os arquivos usados neste exemplo.

Tem mais dúvidas? Envie uma solicitação

Comentários

Powered by Zendesk