Problem - Form HTML + PHP does not attach

Asked

Viewed 407 times

0

I need to make an application form for a web page and I need that form to send the information entered by the user and also to attach the attached file. What’s happening is that after testing with my email address, I can receive all the information entered except the attachment. I’m going to input the code that processes this form and ask you to help me understand why the file isn’t being sent.

HTML

<div class="container-fluid">
    <div class="row">
      <div class="col-sm-10 col-sm-offset-1 col-xs-12">
        <div class="panel panel-default text-center">
          <div class="panel-heading">
            <h1>Recrutamento</h1>
          </div>
          <div class="panel-body">
            <br />
            <p>Se gostava de trabalhar connosco envie-nos a sua candidatura preenchendo este formulário.</p>
            <br />
            <form id="form-contacto" method="POST" enctype="multipart/form-data" action="mail/mail_recrut.php">
                    <div class="row">
                        <div class="col-sm-12 form-group">
                            <p class="text-top-rh">Que tipo de candidatura quer fazer?</p>
                  <div class="checkbox" style="text-align: left">
                    <input class="form-control" name="cand" placeholder="Ex: Colaborador Interno ou Perito Externo" type="text" required>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                <div class="col-sm-12 form-group">
                  <input class="form-control" name="nome" placeholder="Nome" type="text" required>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <input class="form-control" name="email" placeholder="E-mail" type="email" required>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="tel" placeholder="Número de telefone" type="number">
                </div>
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="pai" placeholder="PAI/20XX/XXXX" type="text">
                </div>
              </div>
              <div class="row">
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="zona_resid" placeholder="Zona de Residência" type="text">
                </div>
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="zona_act" placeholder="Zona de Actuação" type="text">
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <textarea class="form-control" name="mensagem" placeholder="Apresentação" type="text" rows="5"></textarea>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group"  style="text-align: left">
                  <label>Anexar Curriculum vitae:</label>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <input name="arquivo" type="file" class="form-control-file">
                </div>
              </div>
            </div>
          <div class="panel-footer">
            <h3>Envie a sua candidatura</h3>
            <input class="btn btn-lg" type="submit" name="btn_enviar" value="Enviar"></input>
          </div>
          </form>
        </div>
      </div>
    </div>
  </div>

PHP

<?php
//pego os dados enviados pelo formulario
$para = "[email protected]";
$cand = $_POST["cand"];
$nome = $_POST["nome"];
$email = $_POST['email'];
$tel = $_POST['tel'];
$pai = $_POST['pai'];
$zona_resid = $_POST['zona_resid'];
$zona_act = $_POST['zona_act'];
$assunto = "Candidatura enviada a partir de k.pt";


//Definição da  mensagem que vai ser enviado no e-mail

$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE;
if(file_exists($arquivo["mail_temp"]) and !empty($arquivo)){
$fp = fopen($_FILES["arquivo"]["mail_temp"],"rb");
$anexo = fread($fp,filesize($_FILES["arquivo"]["mail_temp"]));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
$mensagem = "--$boundary\n";
$mensagem .= "<br>  <strong>Tipo de Candidatura: </strong>".$cand;
$mensagem .= "<br>";
$mensagem .= "<br> <strong>Nome:  </strong>".$nome;
$mensagem .= "<br>";
$mensagem .= "<br>  <strong>E-mail: </strong>".$email;
$mensagem .= "<br>";
$mensagem .= "<br>  <strong>Telefone: </strong>".$tel;
$mensagem .= "<br>";
$mensagem .= "<br>  <strong>PAI: </strong>".$pai;
$mensagem .= "<br>";
$mensagem .= "<br>  <strong>Zona de Residência: </strong>".$zona_resid;
$mensagem .= "<br>";
$mensagem .= "<br>  <strong>Zona de Atuação: </strong>".$zona_act;
$mensagem .= "<br>";
$mensagem .= "<br> <strong>Mensagem: </strong>".$_POST['mensagem'];
$mensagem .= "Content-Transfer-Encoding: 8bits\n";
$mensagem .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
$mensagem .= "$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";
$headers = "MIME-Version: 1.0\n";
$headers .= "From: \"$nome\" <$email>\r\n";
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
$headers .= "$boundary\n";
//envio o email com o anexo
mail($para,$assunto,$mensagem,$headers);
echo"Email enviado com Sucesso!";
}
//se não tiver anexo
else{
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: \"$nome\" <$email>\r\n";
//envia o email sem anexo
mail($para,$assunto,$mensagem, $headers);
echo"Email enviado com Sucesso!";
}
?>


Alguém me sabe dizer o que se passa de errado aqui?\

Embrace, Juliana

  • Hello Juliana. I suggest using Phpmailer. Check out this link: https://www.linhadecomando.com/php/php-usando-phpmailer-para-mailsent.

  • Thank you so much for the suggestion. I’ll try it on and then I’ll tell you if I can get it working :)

2 answers

0

I must be really dumb! I did it with PHP but now even stopped sending e-mail at all... :( Is there something wrong.

      <!-- Formulário RH -->
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-10 col-sm-offset-1 col-xs-12">
        <div class="panel panel-default text-center">
          <div class="panel-heading">
            <h1>Recrutamento</h1>
          </div>
          <div class="panel-body">
            <br />
            <p>Se gostava de trabalhar connosco envie-nos a sua candidatura preenchendo este formulário.</p>
            <br />
            <form id="form-contacto" method="POST" enctype="multipart/form-data" action="?acao=enviar">
                    <div class="row">
                        <div class="col-sm-12 form-group">
                            <p class="text-top-rh">Que tipo de candidatura quer fazer?</p>
                  <div class="checkbox" style="text-align: left">
                    <input class="form-control" name="cand" placeholder="Ex: Colaborador Interno ou Perito Externo" type="text" required>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                <div class="col-sm-12 form-group">
                  <input class="form-control" name="nome" placeholder="Nome" type="text" required>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <input class="form-control" name="email" placeholder="E-mail" type="email" required>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="tel" placeholder="Número de telefone" type="number">
                </div>
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="pai" placeholder="PAI/20XX/XXXX" type="text">
                </div>
              </div>
              <div class="row">
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="zona_resid" placeholder="Zona de Residência" type="text">
                </div>
                <div class="col-sm-6 form-group">
                  <input class="form-control" name="zona_act" placeholder="Zona de Actuação" type="text">
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <textarea class="form-control" name="mensagem" placeholder="Apresentação" type="text" rows="5"></textarea>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group"  style="text-align: left">
                  <label>Anexar Curriculum vitae:</label>
                </div>
              </div>
              <div class="row">
                <div class="col-sm-12 form-group">
                  <input name="arquivo" type="file" class="form-control-file">
                </div>
              </div>
            </div>
          <div class="panel-footer">
            <h3>Envie a sua candidatura</h3>
            <input class="btn btn-lg" type="submit" name="btn_enviar" value="Enviar"></input>
          </div>
          </form>
        </div>
      </div>
    </div>
  </div>

  <?php
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;

    if($_GET['acao'] == 'enviar'){
     $cand        = $_POST['cand'];
     $nome        = $_POST['nome'];
     $email       = $_POST['email'];
     $tel         = $_POST['tel'];
     $pai         = $_POST['pai'];
     $zona_resid  = $_POST['zona_resid'];
     $zona_act    = $_POST['zona_act'];
     $assunto     = "Candidatura enviada a partir de Brick.pt";
     $arquivo     = $_FILES["arquivo"];

     $corpoMSG = "<strong>Candidatura para:</strong> $cand<br>
                  <br />
                  <strong>Nome:</strong> $nome<br>
                  <br />
                  <strong>E-mail:</strong> $mail<br>
                  <br />
                  <strong>Telefone:</strong> $tel<br>
                  <br />
                  <strong>PAI:</strong> $pai<br>
                  <br />
                  <strong>Zona de Residência:</strong> $zona_resid<br>
                  <br />
                  <strong>Zona  de Atuação:</strong> $zona_act<br>";
     // chamada da classe
     require 'php/src/Exception.php';
     require 'php/src/PHPMailer.php';
     require 'php/src/SMTP.php';
     require_once('PHPMailerAutoload.php');
     // instanciando a classe
     $mail   = new PHPMailer();
     // email do remetente
     $mail->SetFrom('$email', 'remetente');
     // email do destinatario
     $address = "[email protected]";
     $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!";
      }
    }
?>

As it says on the linhadecomando.com/php/.... - Fox.11 2 hours ago, I unzipped the zip files in the folder I have on the server...

  • Hello Juliana. Don’t give up. We are all always learning something ;) Try to change require 'php/src/Phpmailer.php'; for require 'php/src/Phpmailerautoload.php' Also see if the files are in the call directory in require.

  • I’ll try that. Thank you Fox :)

0

Just swap:

require_once('class.phpmailer.php');

For:

require_once('PHPMailerAutoload.php');

Browser other questions tagged

You are not signed in. Login or sign up in order to post.