Error in PHP form with attachment submission

Asked

Viewed 160 times

0

I’m having trouble sending PHP form with attachment. It causes the error:

Parse error: syntax error, Unexpected T_VARIABLE in dominio.com.br daniel formulario Formking envia.php on line 19

On line 19 is the code:

$headers.= "$boundary\n";

Follow codes:

php form.

<!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>

php.

<!-- 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 protected]]";
$remetente = "[[email protected]]"; // 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!";
}
?>
  • Thanks for all the answers!

1 answer

0

I got one that worked, to whom it matters:

// Mensagem formatada, enviada no corpo do email 
$html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> 
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pt-BR\" lang=\"pt-BR\"> 
<head> 
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"> 
<style> 
body     {background:#FFFFFF;} 
a, a:link   {color:#5b6105; text-decoration:none;} 
#tab     {margin:0; padding:0px; width:500px; border:1px solid #8F8E96; padding:10px;} 
#tab tr {background:#F6F6F6; } 
#tab td {color:#000000; font: normal 11px arial, helvetica, sans-serif; border:dashed 1px #DDD; padding:30px;} 
</style> 
</head> 
<body> 
<br /> 
<table border='0' cellspacing='10' cellpadding='0' id='tab' align='center'> 
<tr> 
<td> 
<b>Nome:</b> {$name}<br /> 
<b>Email:</b> {$mail}<br /> 
<b>Telefone:</b> {$_POST['telefone']}<br /><br /> 
<b>Mensagem:</b> {$_POST['mensagem']}<br /> 
</td> 
</tr> 
</table> 
<br /> 
</body> 
</html> 
"; 
// Resolvo a diferença de quebra de linhas, entre o Linux e o Windows 
$snap = (PHP_OS == "Linux")?"\n":((PHP_OS == "WINNT")?"\r\n":exit()); 
// Verifico se o formulário postado, possui arquivos anexos 
$file = (isset($_FILES["arquivo"]) && in_array("0",$_FILES["arquivo"]["error"]))?$_FILES["arquivo"]:FALSE; 
// Executo a condição seguinte, se identificar um ou mais anexos junto a mensagem 
if($file){ 
// É removido da matriz os anexos falsos 
for($x=0; $x<count($_FILES["arquivo"]["name"]); $x++): 
if(empty($file['name'][$x])){ 
unset($file['name'][$x]); 
unset($file['size'][$x]); 
unset($file['type'][$x]); 
unset($file['tmp_name'][$x]); 
unset($file['error'][$x]); 
}else{ 
$attach[] = array( 
$file['name'][$x], 
$file['size'][$x], 
$file['type'][$x], 
$file['tmp_name'][$x] 
); 
} 
endfor; 
$boundary = "==Multipart_Boundary_x".md5(time())."x"; 
$body = stripslashes($html); 
// Criamos os cabeçalhos MIME utilizados para separar as partes da mensagem MIME 
$html = "--".$boundary.$snap; 
$html.= "Content-Transfer-Encoding: 8bits".$snap; 
$html.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$snap.$snap; 
$html.= $body.$snap; 
$html.= "--".$boundary.$snap; 
for($i=0; $i<sizeof($attach); $i++): 
if(is_uploaded_file($attach[$i][3])){ 
$Name = $attach[$i][0]; 
$Size = $attach[$i][1]; 
$Type = $attach[$i][2]; 
$Temp = $attach[$i][3]; 
if((strlen($Name)>1) && ($Size>0)){ 
$fopen = fopen($Temp,"rb"); // Fazemos a leitura do arquivo a ser anexado em leitura binária(rb) 
$fread = fread($fopen, filesize($Temp)); 
$cript = base64_encode($fread); // Codificamos o arquivo de dados com Base64 
$close = fclose($fopen); 
$chunk = chunk_split($cript); // Convertemos a saída de base64_encode(), conforme semântica RFC 2045 
$html.= "Content-Disposition: attachment; filename=\"{$Name}\"".$snap; 
$html.= "Content-Type: {$Type}; name=\"{$Name}\"".$snap; 
$html.= "Content-Transfer-Encoding: base64".$snap.$snap; 
$html.= $chunk.$snap; 
if(sizeof($attach) == $i+1) $html.= "--".$boundary."--".$snap; 
else $html.= "--".$boundary.$snap; 
} 
} 
endfor; 
// Adiciono os cabeçalhos de um arquivo anexado 
$head = "MIME-Version: 1.0".$snap; 
$head.= "From: {$mail}".$snap; 
$head.= "Content-type: multipart/mixed; boundary=\"{$boundary}\"".$snap; 
$head.= $boundary.$snap; 
} 
// Caso contrário, enviamos uma mensagem html, sem anexos 
else{ 
$head = "MIME-Version: 1.0".$snap; 
$head.= "From: {$mail}".$snap; 
$head.= "Content-type: text/html; charset=\"ISO-8859-1\"".$snap; 
} 
endif; 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Multi-Anexos</title> 
<link href="_css/typo.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<div id="div"> 
<h1>Orcamentos - Provas - Outros Contatos</h1>  
<? 
// Se o formulário for enviado sem a presença do email do remetente, é exibido uma mensagem de retorno 
if(isset($erro) && $erro==1): 
?> 
<div style='padding:10px;'> 
<a href='javascript:history.back(1)'>Clique aqui para retornar e informe um <b>email válido</b>!</a> 
</div> 
<? 
// Faço o envio da mensagem, se o formulário for submetido e passar no teste anterior 
elseif(isset($subm)): 
?> 
<div style='padding:10px;'> 
<? 
$msg1 = "<h2><b>Sua mensagem foi enviada com sucesso!</b></h2>"; 
$msg2 = "<h2><b style='color:#e23b30;'>Sua mensagem não pôde ser enviada.</b><br /><br />Por favor tente novamente mais tarde.</h2>"; 
$conf = @mail($__to, $__sj, $html, $head); 
echo ($conf)?$msg1:$msg2; 
?> 
<br /> 
<a href='javascript:history.back(1)'>Clique aqui para retornar!</a> 
</div> 
<? 
// Exibe o formulário para preenchimento 
else: 
?> 
<p>Preencha o formulario abaixo para enviar sua mensagem.<br />Necessario preencher todos os campos.</p> 
<form id="frm" action="<?=basename(__FILE__)?>" method="post" enctype="multipart/form-data"> 
<input type="hidden" name="frm_ok" /> 
<fieldset> 
<legend>Formulario de Contato</legend> 
<p> 
<label for="nome">Nome:</label> 
<input id="nome" name="nome" onKeyDown="if(event.keyCode==13) event.keyCode=9;" /> 
</p> 
<p> 
<label for="email">E-Mail:</label> 
<input id="email" name="email" onKeyDown="if(event.keyCode==13) event.keyCode=9;" /> 
</p> 
<p> 
<label for="telefone">Telefone:</label> 
<input id="telefone" name="telefone" onKeyDown="if(event.keyCode==13) event.keyCode=9;" /> 
</p> 
<p><label for="para">Para:</label> 
<select name="destino" class="texto"> 
<option value="[email protected]" selected>Selecione um Setor</option> 
<option value="[email protected]">Provas</option> 
<option value="[email protected]">Orçamento</option> 
<option value="[email protected]">Administração do Site</option> 
</select> 
<p> 
<label for="mensagem">Anexo #1:</label> 
<input type="file" name="arquivo[]" size="50" class="file" /> 
</p> 
<p> 
<label for="mensagem">Anexo #2:</label> 
<input type="file" name="arquivo[]" size="50" class="file" /> 
</p> 
<p> 
<label for="mensagem">Anexo #3:</label> 
<input type="file" name="arquivo[]" size="50" class="file" /> 
</p> 
<p> 
<label for="mensagem">Mensagem:</label> 
<textarea id="mensagem" name="mensagem" class="text"></textarea> 
</p> 
<p style="text-align:right; padding-right:10px;"> 
<input type="submit" value="ENVIAR" class="send" /> 
</p> 
</fieldset> 
</form> 
<? 
endif; 
?> 
</div> 
</body> 
</html>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.