PHP Mailer sending e-mail without the information

3

Folks, I made a landing page on the company page and it sends the information that people fill to my email using PHPMailer. Most emails are coming straight, with all the necessary information. However, some emails are coming empty, as if the variables were empty; as in the image below:

Thecodethatsendstheemailisonthe"Thank you" page, which retrieves the data via post:

            $identificador = $_POST['identificador'];
            $nome = $_POST['nome'];
            $email = $_POST['email'];
            $empresa = $_POST['company'];
            $cargo = $_POST['cargo'];
            $nfuncionarios = $_POST['func'];
            $tipopessoa = $_POST['pessoa'];
            $dificuldade = $_POST['dificuldade'];
            //... recuperar os dados do formulario via post

            require 'mailer/PHPMailerAutoload.php';
            $Mailer = new PHPMailer();

            // define que será usado SMTP
            $Mailer->IsSMTP();

            // envia email HTML
            $Mailer->isHTML(true);

            // codificação UTF-8
            $Mailer->Charset = 'UTF-8';

            // Configurações do SMTP
            $Mailer->SMTPAuth = true;
            $Mailer->Host = 'br296.hostgator.com.br';
            $Mailer->Port = 25;
            $Mailer->Username = '[email protected]';
            $Mailer->Password = 'minha senha está aqui';

            // E-Mail do remetente 
            // nesse caso email-do-cliente@)
            $Mailer->From = '[email protected]';

            // Nome do remetente-cliente
            $Mailer->FromName = 'Kamers Marketing';

            // assunto da mensagem
            $Mailer->Subject = 'Ebook Marketing Digital: Passo a Passo';

            // corpo da mensagem
            $Mailer->Body = '<p><b>'.$nome.', baixou seu ebook "'.$identificador.'"</b>.</p> <p>E-mail para contato: '.$email.'<br><br>Empresa: '.$empresa.'<br><br>Cargo: '.$cargo.'<br><br>Número de Funcionários: '.$nfuncionarios.'<br><br>Tipo de pessoa: '.$tipopessoa.'<br><br>Principal Dificuldade: '.$dificuldade.'</p>';

            // adiciona destinatário /*para onde a mensagem será enviada*/
            $Mailer->AddAddress('[email protected]');
            $Mailer->AddAddress('[email protected]');


            // verifica se enviou corretamente
            if ($Mailer->Send())
            {
            }
            else
            {
                ('Location: marketing-digital-passo-a-passo');
            }

I have already done several tests on the form, but its validation is right, it does not let empty fields pass. I imagine this would happen if someone accessed the "Thank you" page directly through the url without filling in the data before, but it is strange that this happens so many times ...

Well, maybe it's the validation, which I did with pattern in html:

<!--no action do form vai para pagina de agradecimento-->
                                <form id="conversion-form" action="obrigado" method="POST" onsubmit="imgloader()">
                                    <input type="hidden" name="identificador" value="Marketing Digital: Passo a Passo">
                                    <div class="field">
                                        <label for="name">Nome*</label>
                                        <input type="text" required name="nome" id="name" pattern="^([^*]{3,20})+\ ([^*]{3,20})$" title="Seu Nome Completo, por favor" value="" class="form-control  required">
                                    </div>
                                    <div class="field">
                                        <label for="email">Email*</label>
                                        <input type="email" required name="email" id="email" title="Insira um E-mail V&#225;lido" pattern="^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" value="" class="form-control  required">
                                    </div>
                                    <div class="field">
                                        <label for="company">Empresa*</label>
                                        <input type="text" required name="company" pattern="^[^*]{2,20}" id="company" value="" class="form-control  required">
                                    </div>
                                    <div class="field">
                                        <label for="custom_fields_8346">Cargo*</label>
                                        <select required name="cargo" id="custom_fields_8346" class="form-control  required">
                                            <option value="" disabled selected>Selecione</option>
                                            <option value="CEO / Sócio">CEO / Sócio</option>
                                            <option value="Diretor">Diretor</option>
                                            <option value="Gerente/Coordenador de marketing">Gerente/Coordenador de marketing</option>
                                            <option value="Gerente/Coordenador de vendas">Gerente/Coordenador de vendas</option>
                                            <option value="Analista de marketing">Analista de marketing</option>
                                            <option value="Outros cargos">Outros cargos</option>
                                        </select>
                                    </div>
                                    <div class="field">
                                        <label for="custom_fields_8341">Número de funcionários*</label>
                                        <select required name="func" id="custom_fields_8341" class="form-control  required">
                                            <option value="" disabled selected>Selecione</option>
                                            <option value="1 - 5">1 - 5</option>
                                            <option value="6 - 10">6 - 10</option>
                                            <option value="11 - 25">11 - 25</option>
                                            <option value="26 - 50">26 - 50</option>
                                            <option value="51 - 200">51 - 200</option>
                                            <option value="201 - 1.000">201 - 1.000</option>
                                            <option value="mais de 1.000">mais de 1.000</option>
                                        </select>
                                    </div>
                                    <div class="field">
                                        <label for="custom_fields_17882">Como você se define*</label>
                                        <select required name="pessoa" id="custom_fields_17882" class="form-control  required">
                                            <option value="" disabled selected>Selecione</option>
                                            <option value="Estudante buscando conhecimento">Estudante buscando conhecimento</option>
                                            <option value="Funcionário procurando informações">Funcionário procurando informações</option>
                                            <option value="Empresa procurando soluções">Empresa procurando soluções</option>
                                        </select>
                                    </div>
                                    <div class="field">
                                        <label for="custom_fields_17930">Principal Dificuldade*</label>
                                        <select name="dificuldade" id="custom_fields_17930" class="form-control  required" required>
                                            <option value="" disabled selected>Selecione</option>
                                            <option value="Gerar mais leads">Gerar mais leads</option>
                                            <option value="Leads mais qualificados">Leads mais qualificados</option>
                                            <option value="Aumentar as vendas">Aumentar as vendas</option>
                                            <option value="Aumentar visitas">Aumentar visitas</option>
                                            <option value="Estou totalmente perdido">Estou totalmente perdido</option>
                                        </select>
                                    </div>
                                    <div class="field">
                                        <label><span id="math_expression">3 + 7 = ?</span></label>
                                        <input required type="text" name="captcha" class="math">
                                    </div>

                                <!--fim do formulario*****************-->

                                    <div class="actions">

                                        <input type="submit" class="call_button" value="RECEBER MATERIAL">

                                </form>

Do you know if it's a mistake I did not see?

    
asked by anonymous 14.04.2016 / 13:30

1 answer

1

The solution to your problem would be basically this:

require 'mailer/PHPMailerAutoload.php';

class SendMail extends Exception
{

    private $params;
    private $identificador;
    private $nome;
    private $empresa;
    private $cargo;
    private $nfuncioanrios;
    private $tipopessoa;
    private $dificuldade;

    //dados da empresa

    private $charset = 'UTF-8';
    private $host = 'br296.hostgator.com.br';
    private $auth = true;
    private $port = 25;
    private $username = '[email protected]';
    private $password = 'you password';
    private $from = '[email protected]';
    private $fromname = 'Kamers Marketing';
    private $receiveMail = array(
                            '[email protected]',
                            '[email protected]'
        );
    private $layout;
    private $subject =  'Ebook Marketing Digital: Passo a Passo';
    private $isSMTP = true;
    private $isHTML = true;
    public $errors = array();

    public function __construct(array data = array())
    {

        try {
             //valida os campos
            if (!count($data)) {
                $this->errors[] = "Os campos não podem ficar em branco";
            }

            if (!preg_match('/[0-9]+/i', $data['identificador'])) {
                $this->errors[] = "O identificador deve ser somente números";
            }

            if ($data['nome'] == '' || strlen($data['nome']) < 2) {
                $this->errors[] = "O nome não pode ficar em branco";
            }

            if (!preg_match('/\s/', $data['nome'])) {
                $this->errors[] = "Digite seu nome completo";
            }

            if ($data['email'] == '') {
                $this->errors[] = "Digite seu e-mail";
            }

            if (filter_var($data['email'], FILTER_VALIDATE_EMAIL) === false) {
                $this->errors[] = "Digite um e-mail válido";
            }

            if ($data['empresa'] == '') {
                $this->errors[] = "Digite o nome da empresa";
            }

            if ($data['cargo'] == '') {
                $this->errors[] = "Selecione o seu cargo na empresa";
            }

            if ($data['func'] == '') {
                $this->errors[] = "Selecione o número de funcionários";
            }

            if ($data['pessoa'] == '') {
                $this->errors[] = "Selecione sua definição pessoal";
            }

            if ($data['dificuldade'] == '') {
                $this->errors[] = "Selecione o tipo de critério ou dificuldade";
            }
            $totalErrors = count($errors);

            if ($totalErrors) {
                //verifica se tem algum erro, se tiver cria uma exceção
                $exception = new Exception('Error Message');
                $exception->setParams(array('status' => 1, 'errors' => $this->errors, 'title_errors' => 'Há '.$totalErrors.' erros para corrigir:');
                throw $exception;   
            }

            $this->layout = '<p><b>'.$data['nome'].', baixou seu ebook "'.$data['identificador'].'"</b>.
                             </p> <p>E-mail para contato: '.$data['email'].'<br>
                             <br>Empresa: '.$data['empresa'].'<br>
                             <br>Cargo: '.$data['cargo'].'<br>
                             <br>Número de Funcionários: '.$data['func'].'<br>
                             <br>Tipo de pessoa: '.$data['pessoa'].'<br>
                             <br>Principal Dificuldade: '.$data['dificuldade'].'</p>';


           //se não houver erros ele continua sua aplicação aqui...
           return $this->sendMailToUs($data);


        } catch (Exception $e) {
            //as exceções são enviadas para cá, se houver algum erro, ele para o processo e retorna aqui
            return $e->getMessage();

        }
    }

    private function sendMailToUs($data)
    {

        $Mailer = new PHPMailer();

        if ($this->isSMTP) {
           $Mailer->IsSMTP();
        }

        if ($this->isHTML) {
          // envia email HTML
          $Mailer->isHTML(true);
        }

        // codificação UTF-8
        $Mailer->Charset = $this->charset;

        // Configurações do SMTP
        $Mailer->SMTPAuth = $this->auth;
        $Mailer->Host = $this->host;
        $Mailer->Port = $this->port;
        $Mailer->Username = $this->username;
        $Mailer->Password = $this->password;

        // E-Mail do remetente 
        // nesse caso email-do-cliente@)
        $Mailer->From = $this->from;

        // Nome do remetente-cliente
        $Mailer->FromName = $this->fromname;

        // assunto da mensagem
        $Mailer->Subject = $this->subject;

        // corpo da mensagem
        $Mailer->Body = $this->layout;
        // adiciona destinatário /*para onde a mensagem será enviada*/

       if (count($this->receiveMail)) {
           foreach ($this->receiveMail as $key => $value) {
              $Mailer->AddAddress($value);
           }
       }
       if (!$Mailer->Send()) {
            $this->errors[] = "Ocorreu um erro ao tentar enviar o email, causa: ".$Mailer->ErrorInfo:
            $exception = new Exception('Error Sender');
            $exception->setParams(array('status' => 1, 'errors' => $this->errors, 'title_errors' => 'Há '.count($this->errors).' erros:');
       } else{
        return "Mensagem Enviada com sucesso!";
       }
       //se não ocorrer erro, elé irá disparar

       public function setParams(array $params) {
          $this->params = $params;
       }

       public function getParams() {
          return $this->params;
       }

}

if ($_POST) {
   $send = new SendMail($_POST);
   $errorsHandle = $send->getParams();
   if (count($errorsHandle)) {
      $erroHTML = "<ul class=\"errors\">\n";
      foreach($errorsHandle as $erro) {
         $erroHTML .= "<li>{$erro}</li>\n";
      }
      $erroHTML .= "</ul>";
      echo $erroHTML;
   }
   echo $send;
}
    
14.04.2016 / 15:53