Attachment with phpMailer does not arrive

0

I'm creating a system for sending a resume, it's working properly, but the attachment does not arrive.

PHP:

<?php

$nome     =  strip_tags(trim($_POST['nome']));
$email    =  strip_tags(trim($_POST['email']));
$assunto  =  strip_tags(trim($_POST['assunto']));
$mensagem =  strip_tags(trim($_POST['mensagem']));
$arquivo  =  $_FILES['arquivo'];

$tamanho = 512000;
$tipos   = ['image/JPEG', 'image/pjpeg'];

if (empty($nome)) {
    $msg = 'O nome é Obrigatório';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $msg = 'Digite um email Válido';    
} elseif (empty($assunto)) {
    $msg = 'Digite um Assunto';
} elseif (empty($mensagem)) {
    $msg = 'a Mensagem é Obrigatoria';
} elseif (! is_uploaded_file($arquivo['tmp_name'])) {
    $msg = 'o arquivo é obrigatório';
} elseif ($arquivo['size'] > $tamanho) {
    $msg ='o tamanho do arquivo é inválido';
} elseif (in_array($arquivo['type'], $tipos)) {
    $msg = 'O formato de arquivo é inválido';
} else {

    include("phpmailer\src\class.phpmailer.php");
    require 'phpmailer\src\PHPMailerAutoload.php';

    $mail = new PHPMailer ();
    $mail->SMTPDebug = 2; 
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->Port = 587;
    $mail->Host = 'smtp.gmail.com';
    $mail->Username = '[email protected]';
    $mail->Password = '*******';
    $mail->SetFrom('[email protected]', 'Samuel');
    $mail->AddAddress('[email protected]', 'Samuel');
    $mail->Subject = $assunto;

    $body = "<strong>Nome :</strong>$nome<br>
            <strong>E-mail :</strong>$email<br>
            <strong>Assunto :</strong>$assunto<br>
            <strong>Mensagem :</strong>$mensagem<br>
            <strong>Currículo :</strong>$arquivo<br>";

    $mail->MsgHTML($body);
    $mail->AddAttachment($arquivo['mtp_name'], $arquivo['name']);

    if($mail->Send())
        $msg = "Sua Mensagem foi enviada com Sucesso!!!";
    else
        $msg = "Sua Mensagem Não foi enviada, tente novamente";
}

HTML:

<?php

if (isset($_POST['acao']) && $_POST['acao'] == 'enviar') {
    require('envia.php');
}

?><!DOCTYPE html>
<html>
    <head>
        <style>
            p#msg {
                width: 300px;
                margin:0 auto;
                padding:5px 0;
                text-align:center;
                color: #F00;
                font-weight:bold;
            }

            span {
                color: black;
            }
        </style>
    </head>
    <body>
        <?php
                if(isset($msg))
                    echo "<p id=\"msg\">$msg</p>";
        ?>
        <br><br>
        <form action="" method="post" enctype="multipart/form-data" align="center"> 
            <fieldset>
                <legend> Formulário de Contato </legend>

                <label>
                    <span>Nome</span>
                    <input type="text" name="nome">
                </label>

                <br><br>

                <label>
                    <span>E-mail</span>
                    <input type="text" name="email">
                </label>

                <br><br>

                <label>
                    <span>Assunto</span>
                    <input type="text" name="assunto">
                </label>

                <br><br>

                <label>
                    <span>Mensagem</span>
                    <br>
                    <textarea rows="10" cols="30" name="mensagem"> </textarea>
                </label>

                <br><br>

                <input type="file" name="arquivo">

                <br><br>

                <input type="hidden" name="acao" value="enviar">
                <input type="submit" value="enviar"> 

            </fieldset>
        </form>
    </body>
</html>
    
asked by anonymous 12.09.2018 / 14:01

2 answers

1

First is to know if you are searching for the correct address with the variable $arquivo .

As said by Valdeir in the comments, it would be $arquivo[tmp_name] .

See: Documentation $ _FILES

To redirect to another page, redirect to if :

if(!$mail->Send())
      $msg = "Erro ao enviar mensagem...";
else
      header('location: thanks.php');
    
12.09.2018 / 19:10
-1

I have a code here working perfectly, change some things and see if it suits you, any doubts we try to solve!

home.html

  
<form method="post" action="processa.php" enctype="multipart/form-data">
  anexo: <input type="file" class= "anexo" name="arquivo">

- 

##processa.php##

<?php

include ("conexao.php"); //inicia minha conexao com o banco de dados

// aqui e onde é inserido o arquivo do tipo file

if(isset($_FILES['arquivo'])){

$extensao = strtolower(substr($_FILES['arquivo']['name'], -4)); // pega o nome atual da imagem e troca por um novo nome, o "-4" ali esta indicando que ira pegar as ultimos caracter do arquivo ex: nova_foto.jpg
$novo_nome = md5(time()). $extensao; // define um novo nome para a imagem 
$diretorio = "upload/"; // pasta de diretorio onde iram as imagens enviadas, ou seja, ela vai para o banco de dados e para uma pasta de "origem" dentro do seuservidor 

move_uploaded_file($_FILES['arquivo']['tmp_name'], $diretorio.$novo_nome); // codigo para mover para a pasta ja com o novo nome 

// incere os dados no banco

$sql = "insert into NOME_DA_SUA_TEBELA (NOME_CAPO_TABELA) values ('$novo_nome')";

//salva os dados 

$salvar = mysqli_query($conexao,$sql);

//verifica se alguma linha no banco de dados foi adicionada 

$linhas = mysqli_affected_rows($conexao);

//fecha a conexão com o banco de dados

 mysqli_close($conexao); } //verifica se foi adicionado as informaçoes corretamente, caso contrario exibe mensagem de erro if($linhas == 1){ print"Sucesso! Formulario Enviado:

           </h5>

           <a href= inicio.php > <img src= sucesso.jpg > </a>

           ";                   

       }else{
           print"<h2>Erro!<h2><h5>Consulte um Administrador:</h5>                                                        
           <a href= inicio.php > <img src= erro.jpg > </a>

           ";
       }

       ?>
    
12.09.2018 / 18:47