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 ViniciusRamoa
      Oi! Quando eu comecei a estudar php e logica de programação, é que uma das primeiras coisas que precisamos ter é uma noção exata do que queremos fazer, entao, o que eu estou querendo fazer, eu diria que é bem ousado para um iniciante, mas eu estou estudando e meu único foco é criar um de conteudos simples para meu site, será apenas para uso pessoal, nal tenho interesse em vender, mas iria disponibilizar para download , caso alguém queira, ele irá apenas postar conteúdos, apagar, editar e somente isso, não editará banner, ou layout ou qualquer outra coisa. Quero criar um sistema de loguin e dar permissão para apenas quem tiver o "rank 2" será considerado um adm e poderá postar.
      Nesse campo de postagem, terá apenas os campos de:
      Titulo
      Imagem (thumbnail)
      Link da página  (pois será um post clicavel, como um cardbox que ira redirecionar o visitante para a página destinada apenas àquele  conteudo) 
      Descrição 
      Apenas  isso
      Então, eu estou estudando PHP, no início ainda, mas é possivel eu criar tal ferramente em quanto tempo em média com a experiência que vocês ja possuem? 
      E outra, qual caminho devo seguir? Quero apenas criar o gerenciador de conteudo e sistema de loguin, tem algum "caminho" que eu deva seguir? Tenho que focar mais em x area para atingir o que eu quero e nao focar em y area, pois será perda de tempo? Como eu disse, quero apenas criar isso, e futuramente me aprofundar mais
      Então, possui alguma dica, orientação, link ou qualquer coisa que possa me ajudar a pelo menos ver qual caminho seguir, levando em conta que estou estudando por conta propria e nao tenho quem me orientar? Obrigado 
    • By Anderson Maciel
      Boa tarde pessoal,

      Estou quebrando a cabeça para resolver um problema, tenho uma div dinâmica que carrega uma <table> em uma das colunas deveria apresentar o componente Switchery, esta <table> é montada a partir de uma função PHP que faz o select em uma tabela do banco de dados conforme abaixo:
       
      echo '<table class="table table-hover"> <thead> <tr> <th>Nome</th> <th>Agrupamento</th> <th>Ativo</th> </tr> </thead> <tbody>'; foreach($data as $row) { If ($row['ativo'] == 1) { $vativochk = "checked"; } else { $vativochk = ""; } echo '<tr> <td>'.$row['nome'].'</td> <td>'.$row['agrupamento'].'</td> <td><input type="checkbox" name="ativo_grid" class="js-switch" '.$vativochk.' disabled="disabled"></td> </tr>'; } echo '</tbody> </table>'; Aqui está o Ajax que chama e retorna atualizando a DIV:
       
      function atualiza_grid_graficos() { $.ajax({ type: "POST", url: "hubfuncind.php", data: { id_tabindicadores_paineis: $('#id_tabindicadores_paineis').val(), acao: "gridgraficos" }, success: function(data) { $('#conteudo').html(data); } }); } O retorno vem certinho, mas apenas o componente Switchery está vindo desconfigurado, ou seja vem um checkbox normal (html).

      O que é mais incrível é que neste mesmo formulário mais acima tenho este mesmo componente funcionando normalmente, somente dentro da DIV dinâmica é que fica desconfigurado conforme imagem anexa.

      Será que alguém já passou por isso?

    • By egalauber
      Preciso descobrir qual é o nome do arquivo com a extensão.
      Só sei o início do nome:
       
      pasta "anexos".
      nome_do_arquivo_DAQUI_PRA_FRENTE_NAO_SEI_O_RESTO_DO_NOME_NEM_A_EXTENSAO
       
      Com a função glob eu consigo achar o arquivo, mas o nome completo ainda não.
       
       
      $verifica = glob("anexos/nome_do_arquivo_*");
      if($verifica == true){
         // achei o arquivo e agora preciso pegar o nome completo e a extensão
      } else {
            echo "Arquivo não encontrado";
         }
    • By kelvinferraz
      Bom dia Pessoal,
       
      Estou com um problema que talvez muitos já devem ter passado, eu criei um FormRequest de um cadastro que fiz para validar os campos de anexo que vai para o BD. Incluindo a seguinte regra do name anexo_rg
        return [ 
                 'anexo_rg'           => 'mimes:jpeg,png,jpg,pdf|max:2048', 
              ];
       
      O campo não é required, porém ele fica pedindo para inserir um arquivo do tipo que foi criado na regra, ou seja, ele esta forçando um required no anexo, como consigo ignorar quando não possuir anexo?

      OBs: Eu criei um campo hidden para enviar um texto "NÃO POSSUI ANEXO". Antes de eu criar esse FormRequest ele conseguia deixar o anexo vazio, porém não tinha regras e a pessoa conseguia anexar qualquer tipo de arquivo.
       
    • By mayko@123
      TENHO O SEGUINTE SELECT :   select loja,NOME,PREÇO from produtos  GROUP BY NOME,LOJA order by NOME,PREÇO ASC ;
      E O RETORNO É : 
       
      LOJA             NOME                            PREÇO
      A banana prata 1,98 C                  banana prata 1,99 B          COCO VERDE 1 123   COCO VERDE 1 C  COCO VERDE 1 C   laranja pera rio 0,49 A       laranja pera rio 1,99 123 laranja pera rio 1211 B LARANJA SERRA DAGUA 1,99 C LARANJA SERRA DAGUA 2,99 B maca fuji 2,50 C maca fuji 2,97 A maca fuji 2,99 B MAMAO 1,97 C MAMAO 2,10 123 PESSEGO 12 C PESSEGO 2,30 A PESSEGO 234 C UVA 1212 123 UVA 212 A UVA 3,25  
      QUERIA QUE ME RETORNASSE APENAS O PRIMEIRO PRODUTO,PREÇO DE CADA LOJA POR EXEMPLO : A LOJA 'A'  VENDEU A BANANA MAIS BARATA, A LOJA 'B' VENDEU O COCO VERDE MAIS BARATO A LOJA 'C' A LARANJA..... e assim por diante , senão o retorno vai ficar muito extenso pois vai ser muitas lojas e produtos.
×

Important Information

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