Jump to content
vinihhylian0103

ENVIAR EMAIL COM ARQUIVOS ANEXOS VIA PHP

Recommended Posts

Eu estou usando esse código: 

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Enviar e-mail com anexo</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="?acao=enviar" enctype="multipart/form-data">
   <table width="500" border="0" align="center" cellpadding="0" cellspacing="2">
   <tr>
     <td align="right">Nome:</td>
     <td><input type="text" name="nome" id="nome" /></td>
   </tr>
   <tr>
     <td align="right">Assunto:</td>
     <td><input type="text" name="assunto" id="assunto" /></td>
   </tr>
   <tr>
     <td align="right">Mensagem:</td>
     <td><textarea name="mensagem" id="mensagem" cols="45" rows="5"></textarea></td>
   </tr>
   <tr>
     <td align="right">Anexo:</td>
     <td><input type="file" id="arquivo" name="arquivo" /></td>
   </tr>
   <tr>
     <td colspan="2" align="center"><input type="submit" value="Enviar" /></td>
   </tr>
   </table>
</form>

<?php
if($_GET['acao'] == 'enviar'){
 $nome      = $_POST['nome'];
 $assunto   = $_POST['assunto'];
 $mensagem  = $_POST['mensagem'];
 $arquivo   = $_FILES["arquivo"];

 $corpoMSG = "<strong>Nome:</strong> $nome<br> <strong>Mensagem:</strong> $mensagem";
 // chamada da classe       
 require_once('class.phpmailer.php');
 // instanciando a classe
 $mail   = new PHPMailer();
 // email do remetente
 $mail->SetFrom('remetente@dominio.com.br', 'remetente');
 // email do destinatario
 $address = "destinatario@dominio.com.br";
 $mail->AddAddress($address, "destinatario");
 // assunto da mensagem
 $mail->Subject = $assunto;
 // corpo da mensagem
 $mail->MsgHTML($corpoMSG);
 // anexar arquivo
 $mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']  );

 if(!$mail->Send()) {
   echo "Erro: " . $mail->ErrorInfo;
  } else {
   echo "Mensagem enviada com sucesso!";
  }
}
?>
</body>
</html>

E estou recebendo o seguinte erro:

 

( ! ) Notice: Undefined index: acao in C:\wamp\www\EMAILL\email.php on line 33
Call Stack
# Time Memory Function Location
1 0.0020 386856 {main}( ) ...\email.php:0

 

Alguém poderia me ajudar por favor!

Share this post


Link to post
Share on other sites

Olá amigo, saudações...

 

Troque essa linha: if($_GET['acao'] == 'enviar'){

 

por essa linha......: if($_POST['acao'] == 'enviar'){

 

acho que vai dar certo

Share this post


Link to post
Share on other sites
Em 06/09/2019 at 22:28, vinihhylian0103 disse:

Eu tentei mas o erro se mantém o mesmo. Não sei o que pode ser.

 

Amigo tente assim:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Enviar e-mail com anexo</title>
</head>
<body>

<!--Linha abaixo modificada - FORM-->
<form id="form1" name="form1" method="POST" action="" enctype="multipart/form-data">
   <table width="500" border="0" align="center" cellpadding="0" cellspacing="2">
   <tr>
     <td align="right">Nome:</td>
     <td><input type="text" name="nome" id="nome" /></td>
   </tr>
   <tr>
     <td align="right">Assunto:</td>
     <td><input type="text" name="assunto" id="assunto" /></td>
   </tr>
   <tr>
     <td align="right">Mensagem:</td>
     <td><textarea name="mensagem" id="mensagem" cols="45" rows="5"></textarea></td>
   </tr>
   <tr>
     <td align="right">Anexo:</td>
     <td><input type="file" id="arquivo" name="arquivo" /></td>
   </tr>
   <tr>
     <td colspan="2" align="center">
         <!--Linha abaixo modificada - BUTTON-->
         <button type="submit" name="execut" id="execut" class="btn btn-primary" value="Enviar" >Enviar</button>
     </td>
   </tr>
   </table>
</form>

<?php
//Linha abaixo modificada
if(isset($_POST['execut']) && $_POST['execut'] == 'Enviar'){
 $nome      = $_POST['nome'];
 $assunto   = $_POST['assunto'];
 $mensagem  = $_POST['mensagem'];
 $arquivo   = $_FILES["arquivo"];

 $corpoMSG = "<strong>Nome:</strong> $nome<br> <strong>Mensagem:</strong> $mensagem";
 // chamada da classe       
 require_once('class.phpmailer.php');
 // instanciando a classe
 $mail   = new PHPMailer();
 // email do remetente
 $mail->SetFrom('remetente@dominio.com.br', 'remetente');
 // email do destinatario
 $address = "destinatario@dominio.com.br";
 $mail->AddAddress($address, "destinatario");
 // assunto da mensagem
 $mail->Subject = $assunto;
 // corpo da mensagem
 $mail->MsgHTML($corpoMSG);
 // anexar arquivo
 $mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']  );

 if(!$mail->Send()) {
   echo "Erro: " . $mail->ErrorInfo;
  } else {
   echo "Mensagem enviada com sucesso!";
  }
}
?>
</body>
</html>

 

Share this post


Link to post
Share on other sites

 

Em 06/09/2019 at 22:28, vinihhylian0103 disse:

Eu tentei mas o erro se mantém o mesmo. Não sei o que pode ser.

Você precisa de estudo. Está fazendo algo que não sabe nem o que é nem de onde vem.

 

Você precisa saber o que é GET o que é POST... como seu formulário está sendo enviado, como tratar os dados, etc.

 

o seu $_GET['acao'] está sendo enviado realmente, só faltou a verificação com o "isset". Se você trabalha com envio de arquivos via formulário para o servidor, é necessário dizer isso ao seu formulário com a marcação "

enctype="multipart/form-data"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By blbvicente
      Olá amigos, gostaria de tirar uma dúvida para o andamento do meu projeto de conclusão de curso.
       
      Como posso fazer um código para alterar imagens no banco de dados via PHP e utilizando o MySQL com ambiente de admin?
       
      Como meu HTML e CSS estão prontos, (tanto a home quanto a página de login para o admin) a ultima parte que falta é conseguir fazer isso que lhes estou pedindo ajuda hahaha
       
      Desde já agradeço a ajuda! 
    • By sonix1309@gmail.com
      Boa tarde

      Minha primeira participação.

      Tenho dois Sistemas em servidores diferente:
      Mesma biblioteca mpdf60 mesma versão PHP 7.2 (ea-php72).

      Em um não ocorre erro nenhum, no outro ocorre o erro abaixo:
      Parse error: syntax error, unexpected 'var' (T_VAR), expecting end of file in /home/assetnet/public_html/site/sistema/mpdf60/mpdf.php on line 96
       
      ///////////////////////////////
      // EXTERNAL (PUBLIC) VARIABLES
      // Define these in config.php
      ///////////////////////////////
      (linha 96) var $useFixedNormalLineHeight;    // mPDF 6     <---- linha do ERRO
      (linha 97) var $useFixedTextBaseline;    // mPDF 6
      (linha 98) var $adjustFontDescLineheight;    // mPDF 6
      (linha 99) var $interpolateImages; // mPDF 6
      ...

       
    • By Rogerio Pancini
      Boa tarde pessoal.
       
      Sempre uso um script para exportar dados para xls com PHP.
      Me serviu muito, mas, neste caso, preciso apenas gerar o xls e anexar no e-mail.
      Passei boa parte de manhã tentando fazer que o script apenas gere a planilha, sem forçar o download, mas, se eu tiro o "Content-Disposition: attachment", dá erro na página.
       
      include("php/phpmailer/PHPMailerAutoload.php"); // Trazendo as informações da tabela: $header = ""; $dados = ""; $header .= utf8_decode('Serviço'. "\t"); $header .= utf8_decode('Projeto nº'. "\t"); $header .= utf8_decode('Cliente'. "\t"); $header .= utf8_decode('Processo'. "\t"); $header .= utf8_decode('Vencimento'. "\t"); // Select dos processos para fazer o lembrete $sql_2 = mysqli_query($config, "SELECT ps.data_vencimento_limite, ps.id_processo, IFNULL(NULL, ps.num_processo), ps.descricao, c.nome_razao FROM tb_processos_servicos ps LEFT JOIN tb_processos AS p ON (ps.id_processo = p.id_processo) LEFT JOIN tb_agenda AS c ON (p.cliente = c.id) WHERE ps.data_vencimento_limite <> '0000-00-00' AND ps.data_vencimento_limite <= '$data_atual_db' ORDER BY ps.data_vencimento_limite DESC") or die(mysqli_error($config)); if(@mysqli_num_rows($sql_2) <= 0){ echo ""; }else{ while($r_sql_2 = mysqli_fetch_array($sql_2)){ $vencimento_limite = date("d/m/Y", strtotime($r_sql_2[0])); $id_processo = $r_sql_2[1]; $num_processo = $r_sql_2[2]; $descricao_sel = utf8_decode($r_sql_2[3]); $cliente_sel = utf8_decode($r_sql_2[4]); // Insere a linha $line = ''; $value = '"' ."$descricao_sel". '"' . "\t"; $value .= '"' ."$id_processo". '"' . "\t"; $value .= '"' ."$cliente_sel". '"' . "\t"; if(empty($num_processo)){ $value .= '""' . "\t"; }else{ $value .= '"' ."'$num_processo". '"' . "\t"; } $value .= '"' ."$vencimento_limite". '"' . "\t"; $line .= strtr($value,"","") ; // O trim retira os espaços encontrados no começo e no final de cada linha encontrada. $dados .= trim($line)."\n"; // Substituindo todas as quebras de linha ao final de cada registro, que por padrão seria \r por uma valor em branco, para que a formatao fique legível $dados = str_replace("\r","",$dados); // Caso não encontre nenhum registro, mostra esta mensagem. if ($dados== "") { $dados = "\n Nenhum registro encontrado!\n"; } } // O trim retira os espaços encontrados no começo e no final de cada linha encontrada. $dados .= trim($line)."\n"; // Substituindo todas as quebras de linha ao final de cada registro, que por padrão seria \r por uma valor em branco, para que a formatao fique legível $dados = str_replace("\r","",$dados); // Cabeçalhos e instruções para geração e download do arquivo: header("Content-type: application/x-msexcel"); // Este cabeçalho abaixo, indica que o arquivo deve ser gerado para download. // Se eu tirar ele salva o arquivo na pasta, mas dá erro na página header("Content-Disposition: attachment; filename=$nome_arquivo"); // No cache, ou seja, não guarda cache, pois é gerado dinamicamente header("Pragma: no-cache"); // Não expira header("Expires: 0"); // E aqui geramos o arquivo com os dados mencionados acima! print "$header\n$dados"; file_put_contents("anexos/".$nome_arquivo,$dados); //Aqui será enviado o e-mail. } mysqli_close($config); Não sei é possível apenas gerar o xls com esse script, mas ele é tão prático que vou fazer uma última tentativa.
      Neste caso ele salva na pasta "anexos", mas abre a caixa do navegador para fazer download.
       
      Desde já agradeço!
    • By Carlos - Aracaju
      Olá, pretendo criar um sistema de sorteio de palavras onde o usuário coloca-se os nomes que quiser e quantos quiser, porem n consigo fazer com que o sorteio seja bem sucedido, não consigo achar uma solução, quem poder me ajudar, desde já agradeço
      esse é meu código:
      <?php if ($_POST) { $controle = 1; $tipo = 'nome'; $quantidade = $_POST['quant']; $rand = rand(1, $quantidade); $tdnome = ''; while($controle <= $quantidade){ $result = $tipo.$controle; $nomes = $_POST[$result]; echo $controle.' - '.$nomes . '<br />'; if ($controle < $quantidade) { $tdnome .= '"'.$nomes.'", '; } else{ $tdnome .= '"'.$nomes.'"'; } $controle++; } print '<br>'.$tdnome.'<br>'; echo "<br><b>sorteado: ".$array[$rand]."</b>"; } ?> <!DOCTYPE html> <html> <head> <title>sorteio</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script type="text/javascript"> var numero = 1; function adicionar() { numero++; $("#divPrincipal").append("<input type='text' name='nome"+numero+"' placeholder='nome "+numero+"' value='nome "+numero+"' /><br><br>"); $("#quant").val(numero); $("#numerodenomes").text(numero); } </script> </head> <body> <form name="teste" method="post" action=""> <!-- <textarea name="text"></textarea> --> <input id="quant" type="text" name="quant" value="1" style="display: none;" /> <p ><b>quantidade de nomes:</b> <q id="numerodenomes">1</q></p> <br><br><br><br> <div id="divPrincipal"> <input type="text" name="nome1" placeholder="nome 1" value="nome 1" /> <br><br> </div> <input type="submit" name="enviar" value="Enviar" /> </form> <a href="javascript: adicionar()">Adicionar</a> </body> </html>  
    • By EvertonFD
      bom dia senhores estou com dificuldades para colocar determinados valores no banco, pois não posso fazer update e sim acrescentar o valor digitado no input.
      não tenho o código prq ainda estou fazendo o esboço de como deve funcionar mais ou menos assim;
      valores A - B - C  devem ir para o banco
      no banco os valores ja contem A=10 - B=1 C=3
      no input terei A=2 - B=1 C=3 preciso que esses valores sejam adicionados para ficarem por exemplo A=10 +input =2 total 12
      pensei em fazer um função para isso pegando o valor existente no bd e somando ao input para gerar o resultador e ai sim usar o update mas achei que vai ficar muito
      complicado a execução
      Se alguém puder me ajudar com uma ideia mais simples de fazer isso agradeço
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.