Criar Formulário com Envio de Anexo (PHP)

Como configurar conta de Email no MAC OS X (Apple)
24 de agosto de 2018

Como criar uma formulário em PHP com envio de anexo
Pedro Flores – Especialista de Atendimento

Pensou em criar um formulário em PHP com envio de anexo? Te mostramos o caminho das pedras abaixo 😀

Um formulário de contato em seu site facilita a comunicação de seus clientes e pessoas que têm interesse em seu negócio. Sua implementação é bastante simples, mas você precisa ter alguns cuidados para que tudo ocorra bem na configuração do formulário.

No exemplo desta página, trataremos a configuração de um formulário escrito em PHP com o recurso de envio de anexo. O script abaixo possui apenas o código básico para funcionamento, caso desejar adequar ao template do seu site, precisará de conhecimento em HTML e CSS.

Informações para uso do formulário em PHP com envio de anexo
Há um limite de tamanho de anexo para envios via web: 2MB por mensagem (Política de emails)

O Formulário de envio de anexo é dividido em dois scripts:
form.php >> Responsável pela parte gráfica e por pegar os dados informados pelo usuário do site.
envia.php >> Responsável pelas funções e configurações de remetente e destinatário.
Crie o arquivo form.php
Crie um novo arquivo e insira no diretório desejado no FTP. O arquivo deve conter o código abaixo e na linha 20 é definido para onde serão enviadas as informações deste formulário via método POST, o nome do arquivo de destino fica a sua escolha, neste exemplo será utilizado o “envia.php“.

<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset=”utf-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<title>Formulário PHP com anexo</title>

<!– Layout –>
<link rel=”stylesheet” href=”//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css”>

<!– JavaScript –>
<script src=”https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js”></script>
</head>

<body>
<div class=”container”>
<br>

<form class=”form-horizontal” method=”POST” action=”envia.php” enctype=”multipart/form-data”>
<fieldset>

<!– Título do formulário –>
<legend>Formulário PHP com envio de anexo</legend>

<!– Campo: Nome –>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”nome”>Nome</label>
<div class=”col-md-4″>
<input id=”nome” name=”nome” placeholder=”Informe seu nome” class=”form-control input-md” required=”” type=”text”>
</div>
</div>

<!– Campo: Email –>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”nome”>Email</label>
<div class=”col-md-4″>
<input id=”replyto” name=”replyto” placeholder=”Informe seu email” class=”form-control input-md” required=”” type=”text”>
</div>
</div>

<!– Campo: Assunto –>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”nome”>Assunto</label>
<div class=”col-md-4″>
<input id=”assunto” name=”assunto” placeholder=”Informe o assunto da mensagem” class=”form-control input-md” required=”” type=”text”>
</div>
</div>

<!– Campo: anexo –>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”arquivo”>Anexo</label>
<div class=”col-md-4″>
<input id=”arquivo” name=”arquivo” class=”input-file” type=”file”>
<span class=”help-block”>2MB por mensagem</span>
</div>
</div>

<!– Campo: Mensagem –>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”mensagem”>Mensagem</label>
<div class=”col-md-4″>
<textarea class=”form-control” id=”mensagem” name=”mensagem”></textarea>
</div>
</div>

<!– Botão Enviar –>
<center>
<div class=”form-group”>
<label class=”col-md-4 control-label” for=”submit”></label>
<div class=”col-md-4″>
<button type=”submit” class=”btn btn-inverse”>Enviar</button>
</div>
</div>

</fieldset>
</form>

</div>
</body>
</html>

 

Crie o arquivo envia.php

Seguindo nosso exemplo, vamos criar o arquivo “envia.php”, responsável pelas funções e configurações de remetente e destinatário. Insira o “envia.php” dentro do mesmo diretório onde colocou o arquivo anterior.

formulário em PHP com envio de Anexo
O arquivo deve conter o código abaixo e você deve fazer as devidas alterações para que o mesmo funcione:

Linha 14 – $to = “email@dominio”: Email de destino – Pode ser qualquer conta de email do domínio ou conta externa
Linha 15 – $remetente = “email@seu-dominio”: Deve ser uma conta de email válida e ativa do domínio do cliente
<!– Layout –>
<link rel=”stylesheet” href=”//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css”>

<?php

/* Valores recebidos do formulário */
$arquivo = $_FILES[‘arquivo’];
$nome = $_POST[‘nome’];
$replyto = $_POST[‘replyto’]; // Email que será respondido
$mensagem_form = $_POST[‘mensagem’];
$assunto = $_POST[‘assunto’];

/* Destinatário e remetente – EDITAR SOMENTE ESTE BLOCO DO CÓDIGO */
$to = “email@dominio”;
$remetente = “email@seu-dominio”; // Deve ser um email válido do domínio

/* Cabeçalho da mensagem */
$boundary = “XYZ-” . date(“dmYis”) . “-ZYX”;
$headers = “MIME-Version: 1.0\n”;
$headers.= “From: $remetente\n”;
$headers.= “Reply-To: $replyto\n”;
$headers.= “Content-type: multipart/mixed; boundary=\”$boundary\”\r\n”;
$headers.= “$boundary\n”;

/* Layout da mensagem */
$corpo_mensagem = ”
<br>Formulário via site
<br>——————————————–<br>
<br><strong>Nome:</strong> $nome
<br><strong>Email:</strong> $replyto
<br><strong>Assunto:</strong> $assunto
<br><strong>Mensagem:</strong> $mensagem_form
<br><br>——————————————–
“;

/* Função que codifica o anexo para poder ser enviado na mensagem */
if(file_exists($arquivo[“tmp_name”]) and !empty($arquivo)){

$fp = fopen($_FILES[“arquivo”][“tmp_name”],”rb”); // Abri o arquivo enviado.
$anexo = fread($fp,filesize($_FILES[“arquivo”][“tmp_name”])); // Le o arquivo aberto na linha anterior
$anexo = base64_encode($anexo); // Codifica os dados com MIME para o e-mail
fclose($fp); // Fecha o arquivo aberto anteriormente
$anexo = chunk_split($anexo); // Divide a variável do arquivo em pequenos pedaços para poder enviar
$mensagem = “–$boundary\n”; // Nas linhas abaixo possuem os parâmetros de formatação e codificação, juntamente com a inclusão do arquivo anexado no corpo da mensagem
$mensagem.= “Content-Transfer-Encoding: 8bits\n”;
$mensagem.= “Content-Type: text/html; charset=\”utf-8\”\n\n”;
$mensagem.= “$corpo_mensagem\n”;
$mensagem.= “–$boundary\n”;
$mensagem.= “Content-Type: “.$arquivo[“type”].”\n”;
$mensagem.= “Content-Disposition: attachment; filename=\””.$arquivo[“name”].”\”\n”;
$mensagem.= “Content-Transfer-Encoding: base64\n\n”;
$mensagem.= “$anexo\n”;
$mensagem.= “–$boundary–\r\n”;
}
else // Caso não tenha anexo
{
$mensagem = “–$boundary\n”;
$mensagem.= “Content-Transfer-Encoding: 8bits\n”;
$mensagem.= “Content-Type: text/html; charset=\”utf-8\”\n\n”;
$mensagem.= “$corpo_mensagem\n”;
}

/* Função que envia a mensagem */
if(mail($to, $assunto, $mensagem, $headers))
{
echo “<br><br><center><b><font color=’green’>Mensagem enviada com sucesso!”;
}
else
{
echo “<br><br><center><b><font color=’red’>Ocorreu um erro ao enviar a mensagem!”;
}
?>

Pronto! Agora você conseguirá enviar emails através de um formulário em PHP com envio de anexo.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *