5
respostas

Enviar anexo para Email usando PHPMailer - Wordpress

Na minha caixa de entrada esta chegando normalmente a mensagem enviada através do formulário PHP, mas o arquivo não esta sendo anexado

email-trabalhe-conosco.php

    <?php
  $name = $_POST['nome'];
  $linkedin = $_POST['linkedin'];
  $email = $_POST['email'];
  $celular = $_POST['celular'];
  $assunto = "$name - Currículo - Trabalhe Conosco";

  $arquivo = $_FILES['arquivo']['tmp_name'];
  $nome_arquivo = $_FILES['arquivo']['name'];
  $dir = 'upload/';
  move_uploaded_file($arquivo, $dir.$nome_arquivo);
  $path_file = $dir.$nome_arquivo;

  $urlretorno = $_POST['url'];
  $myEmail = "rodolfo@studiojete.com.br";

  $corpo = "Formulário enviado\n\n";
  $corpo .= "Nome: " . $name . "\n\n";
  $corpo .= "Email: " . $email . "\n\n";
  $corpo .= "Celular: " . $celular . "\n\n";
  $corpo .= "Linkedin: " . $linkedin . "\n\n";

  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;

  require 'PHPMailer/src/Exception.php';
  require 'PHPMailer/src/PHPMailer.php';
  require 'PHPMailer/src/SMTP.php';

  $mail = new PHPMailer(); 

  $mail->IsSMTP(); 
  $mail->Host = "smtp.umbler.com";
  $mail->Port = 587;
  $mail->SMTPAuth = true; 
  $mail->Username = $myEmail; 
  $mail->Password = 'lasanha17'; 


  $mail->CharSet = 'UTF-8'; 
  $mail->From = $myEmail; 
  $mail->FromName = $name; 
  $mail->Subject = $assunto; 
  $mail->Body = $corpo;
  $mail->AddAddress('rodolfodossantos29@gmail.com'); 
  $mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);

  $status = $mail->Send(); 

  if ($status) {
    echo "<script> alert('Formulário enviado com sucesso!'); </script>";
  } else {
    echo "<script> alert('Falha ao enviar o Formulário.'); </script>";
  }
?>

<script>
      window.location.href = "<?php echo $urlretorno ?>";
</script>';








page-contato-trabalheconosco.php`

( ... )
    <form class="anime-bottom" data-toggle="validator" method="POST"
                action="<?= get_template_directory_uri(); ?>/email-trabalhe-conosco.php">

                <div class="form-row">
                    <div class="form-group col-md-6">
                        <label for="inputNome">Nome*</label>
                        <input type="text" class="form-control" id="inputNome" placeholder="Nome" name="nome"
                            data-error="Por favor, informe seu nome" required>
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputlinkedin">Linkedin</label>
                        <input type="linkedin" class="form-control" id="inputlinkedin" placeholder="Linkedin"
                            data-error="Por favor, digite o Linkedin corretamente" name="linkedin">
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputEmail">Email*</label>
                        <input type="text" class="form-control" id="inputEmail" placeholder="Email"
                            data-error="Por favor, informe o Email" name="email" required>
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputCelular">Celular* </label>
                        <input type="tel" class="form-control telefone" id="inputCelular" name="celular"
                            placeholder="1298829888" maxlength="15" onkeyup="mascara('(##) #########',this,event)">
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputArquivo" class="inputFIle">Currículo*</label>
                        <input type="file" class="form-control-file" id="inputArquivo" name="arquivo">
                    </div>

                    <div class="d-flex flex-row-reverse col-md-6">
                        <input type="text" value="<?php echo get_home_url(); ?>/trabalhe-conosco" name="url"
                            class="d-none">
                        <button type="submit" class="btn btn-bluedark mb-4">Enviar</button>
                    </div>
                </div>
            </form>
    ( ... )
5 respostas

Olá Rodolfo, Verificando o código de seu formulário notei que está faltando o atributo enctype, para upload de arquivos é necessário passar o valor multipart/form-data neste atributo caso contrário o servidor não irá identificar ler os arquivos enviados.

A tag de formulário ficaria assim então:

( ... )
<form class="anime-bottom" 
    data-toggle="validator"
    method="POST"
    enctype="multipart/form-data"
    action="<?= get_template_directory_uri(); ?>/email-trabalhe-conosco.php">
( ... )
</form>
( ... )

Porque é necessário?

Quando multpart/data-form é usado a requisição é enviada em várias partes, quando isso ocorre o navegador separa cada parte da requisição usando multipart boundary o que permite ao navegador informar ao servidor (e este entender) onde começa e termina cada arquivo e input enviado para o backend.

Espero ter lhe ajudado.

Então já corrigi essa minha falta de atenção, mas mesmo assim o erro persiste :/

Olá Rodolfo, Notei que há uma questão envolvendo o caminho dos arquivos também.

Nesta linha você define a variável arquivo

$arquivo = $_FILES['arquivo']['tmp_name'];

Contudo na linha que você adiciona o anexo você coloca a seguinte informação:

  $mail->AddAttachment($arquivo['tmp_name'], $arquivo['name']);

Quando eu acredito que você poderia ajustar a linha para:

$mail->AddAttachment($arquivo, $nome_arquivo);

Visto que você definiu estas variáveis nas linhas:

  $arquivo = $_FILES['arquivo']['tmp_name'];
  $nome_arquivo = $_FILES['arquivo']['name'];

Me avise se ainda assim o erro persistir.

Obrigado pela ajuda, mas o erro ainda persiste, não chega o arquivo em minha caixa de entrada.

Estou usando wordpress também.

Meu arquivo php esta atualmente assim:

<?php
  $name = $_POST['nome'];
  $linkedin = $_POST['linkedin'];
  $email = $_POST['email'];
  $celular = $_POST['celular'];
  $assunto = "$name - Currículo - Trabalhe Conosco";

  $arquivo = $_FILES['arquivo']['tmp_name'];
  $nome_arquivo = $_FILES['arquivo']['name'];

  $urlretorno = $_POST['url'];
  $myEmail = "rodolfo@studiojete.com.br";

  $corpo = "Formulário enviado\n\n";
  $corpo .= "Nome: " . $name . "\n\n";
  $corpo .= "Email: " . $email . "\n\n";
  $corpo .= "Celular: " . $celular . "\n\n";
  $corpo .= "Linkedin: " . $linkedin . "\n\n";

  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;

  require 'PHPMailer/src/Exception.php';
  require 'PHPMailer/src/PHPMailer.php';
  require 'PHPMailer/src/SMTP.php';

  $mail = new PHPMailer(); 

  $mail->IsSMTP(); 
  $mail->Host = "smtp.umbler.com";
  $mail->Port = 587;
  $mail->SMTPAuth = true; 
  $mail->Username = $myEmail; 
  $mail->Password = 'lasanha17'; 


  $mail->CharSet = 'UTF-8'; 
  $mail->From = $myEmail; 
  $mail->FromName = $name; 
  $mail->Subject = $assunto; 
  $mail->Body = $corpo;
  $mail->AddAddress('rodolfodossantos29@gmail.com'); 
  $mail->AddAttachment($arquivo, $nome_arquivo);

  $status = $mail->Send(); 

  if ($status) {
    echo "<script> alert('Formulário enviado com sucesso!'); </script>";
  } else {
    echo "<script> alert('Falha ao enviar o Formulário.'); </script>";
  }
?>

<script>
      window.location.href = "<?php echo $urlretorno ?>";
</script>';

HTML:

            <form 
                class="anime-bottom" 
                data-toggle="validator" 
                method="POST"
                enctype="multipart/form-data"
                action="<?= get_template_directory_uri(); ?>/email-trabalhe-conosco.php">

                <div class="form-row">
                    <div class="form-group col-md-6">
                        <label for="inputNome">Nome*</label>
                        <input type="text" class="form-control" id="inputNome" placeholder="Nome" name="nome"
                            data-error="Por favor, informe seu nome" required>
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputlinkedin">Linkedin</label>
                        <input type="text" class="form-control" id="inputlinkedin" placeholder="Linkedin" name="linkedin"
                            data-error="Por favor, digite o Linkedin corretamente">
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputEmail">Email*</label>
                        <input type="email" class="form-control" id="inputEmail" placeholder="Email"
                            data-error="Por favor, informe o Email" name="email" required>
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputCelular">Celular* </label>
                        <input type="tel" class="form-control telefone" id="inputCelular" name="celular"
                            placeholder="1298829888" maxlength="15" onkeyup="mascara('(##) #########',this,event)">
                        <div class="help-block with-errors"></div>
                    </div>

                    <div class="form-group col-md-6">
                        <label for="inputArquivo" class="inputFIle">Currículo*</label>
                        <input type="file" class="form-control-file" id="inputArquivo" name="arquivo">
                    </div>

                    <div class="d-flex flex-row-reverse col-md-6">
                        <input type="text" value="<?php echo get_home_url(); ?>/trabalhe-conosco" name="url"
                            class="d-none">
                        <button type="submit" class="btn btn-bluedark mb-4">Enviar</button>
                    </div>
                </div>
            </form>

Também me deparei com esse erro:

Warning: Unknown: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/home/studiojete.com.br) in Unknown on line 0 Warning: File upload error - unable to create a temporary file in Unknown on line 0 File not found.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software