Ir ao conteúdo
  • Cadastre-se

PHP Formulario php envia com anexo pdf


Posts recomendados

Boa tarde, tenho um formulario (funcionando) que envia dados e anexo que a pessoa adiciona, porém eu não quero que ela adicione o arquivo, ao invés disso, quero q o formulario puxe um arquivo hospedado pdf no meu sate e envie, não estou conseguindo alterar para fazer isso.

 

se alguem tiver uma outra sugestão para anexar, posso adaptar também, sõ não estou conseguindo fazer o php anexar direto, sem a pessoa ter que subir o arquivo

obrigada!

 

arquivo html:

<!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="enviar.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>

arquivo 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!";
}
?>

 

Link para o comentário
Compartilhar em outros sites

@Bruna Siqueira Se você quer só anexar um único arquivo pdf, você pode modifica um pouco o php para colocar o arquivo.

 

Eu fiz essa modificação, deve funcionar para um único arquivo pdf:

<?php

/* Valores recebidos do formulário  */
$arquivo = "Local e o nome do arquivo"; // Local do arquivo que vai ser anexado
$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) and !empty($arquivo))
{
    $fp = fopen($arquivo, "rb"); // Abri o arquivo enviado.
    $anexo = fread($fp,filesize($arquivo)); // 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: application/pdf\n";  
    $mensagem.= "Content-Disposition: attachment; filename=\"".basename($path,".pdf")."\"\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!";
}

 

Link para o comentário
Compartilhar em outros sites

@GabrielSennaMs Oi!

Talvez eu esteja colocando o nome do arquvio em lugar errado, porque ja tentei fazer funcionar de varias formas e não foi

 

Linha4

$arquivo = "COLOQUEI NOME E ENDEREÇO DO ARQUIVO AQUI"; // Local do arquivo que vai ser anexado

 

Linha36

 $fp = fopen($arquivo, "COLOQUEI NOME E ENDEREÇO DO ARQUIVO AQUI"); // Abri o arquivo enviado.

 

Linha47

$mensagem.= "Content-Disposition: attachment; filename=\"".basename($path,"COLOQUEI NOME DO ARQUIVO AQUI")."\"\n";  

 

Link para o comentário
Compartilhar em outros sites

@Bruna Siqueira 

 

A URL é o endereço de um recurso disponível em uma rede, seja a rede internet ou intranet. Quando eu falo arquivo em disco eu estou falando do endereço em disco do arquivo e não o endereço de rede dele. o php só pode trabalhar com o arquivo se ele estiver o seu endereço em disco. 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Bruna Siqueira Sim,  usa estes headers no seu php( arquivo onde está o envio do e-mail

 

header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="filename"');

Desta forma, você força o navegador a fazer o download. seja em qualquer dispositivo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...