Annex with phpmailer not enough

Asked

Viewed 509 times

0

I am creating a system for sending resume, is 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>
  • 1

    The correct is $arquivo['tmp_name'] instead of $arquivo['mtp_name'].

  • great, really had an error there, could you tell me how do I redirect the person to a thank you page?

  • @Samuelnicolau If an answer did not answer your question, there is no reason to accept it. The correct thing is to wait for an answer, or even answer it so that everyone can see/simulate the problem.

2 answers

1


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

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

Behold: Documentation $_FILES


To forward to another page, redirect to if:

if(!$mail->Send())
      $msg = "Erro ao enviar mensagem...";
else
      header('location: thanks.php');
  • not redirecting, (Thanks is the thank you page). header('Location: Thanks.php');

  • I updated the answer.

  • still not redirecting to Thanks

  • Did you change everything? Because I added one ! in if(!$mail->Send())

  • yes, I changed everything

-1

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

top 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>

           ";
       }

       ?>

  • Welcome to the noobphp! Even if it "helps" with the solution, it is not an "answer", because you pass a "model" and tell the person "change everything", it is complicated. Once you have a reputation, you can "comment" on the question, so you can add something like this!

Browser other questions tagged

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