Conteúdos

Como enviar anexo por email em formulário HTML

Conteúdos

Alguns clientes gostariam de ter um formulário no site, e receber um arquivo em anexo por email.

Todos os códigos estão disponíveis aqui: https://github.com/vanildosouto/formulariocomanexo

No nosso exemplo teremos um site de uma farmácia de manipulação que deseja ter um formulário no site, onde um usuário vai preencher os dados e enviar a receita para orçamento. Esses dados devem ser enviados por email.

Começamos com o html do formulário:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Email com anexo</title>
  </head>
  <body>
    <h2>Farmárcia Sua vida fácil</h2>
    <form action="/enviar" method="post" accept-charset="utf-8" enctype="multipart/form-data" accept="image/png|image/jpg|application/pdf">
      <fieldset>
      <legend>Deixe seus dados que entraremos em contato</legend>
      <label>Nome:</label> <input type="text" placeholder="Nome" name="nome" required><br>
      <label>Email:</label> <input type="email" placeholder="Email" name="email" required><br>
      <label>Receita:</label> <input type="file" name="receita" required><br>
      <input type="submit" value="Enviar">
      </fieldset>
    </form>
  </body>
</html>

Aqui o mais importante é o atributo enctype no qual permitimos o envio de arquivos.

Agora adicione a rota /enviar no Slim, e a dependencia dessa classe.

rota

1
$app->post('/enviar', App\Action\Enviar::class);

dependencia

1
2
3
$container[App\Action\Enviar::class] = function ($c) {
    return new App\Action\Enviar($c['logger'], $c['view'], $c['email']);
};

Então vamos criar a classe que vai responder a tudo isso.

Na linha 30, verificamos se foi enviado um arquivo mesmo.

Na linha 42, verificamos se o arquivo está na lista de tipos de arquivos permitidos no array na linha 36.

Na linha 50 e 51 pegamos a extensão do arquivo.

Na linha 53 usamos a função tempnam do PHP para criar um nome aleatório para o arquivo. O primeiro argumento deve ser uma pasta temporária, isso vai depender do seu serviço de hospedagem, o segundo parametro é um prefixo que será inserido ao nome do arquivo. Também concatenamos com a extensão do arquivo original.

Na linha 55 movemos o arquivos para essa pasta temporaria.

Com essa informação em mãos fica fácil fazer o envio de email. É só fazer o email normal e adicionar esse arquivo como anexo usando o addAttachment do PHPMailer. Fazemos isso na linha 60.

E é isso. Fiquem a vontade para deixar dúvida aqui ou lá no Github.

Até a próxima!