Ir para conteúdo
Fórum Script Brasil
  • 0

PHPMailer e Locaweb


PiXwell

Pergunta

Bom dia,
Tenho um site hospedado na Locaweb (Hospedagem Linux), e estou enviando um formulário de e-Mail via Ajax ... o envio está ocorrendo corretamente, o problema está na quantidade de mensagens. Ao invés de enviar apenas uma mensagem, está disparando 5 mensagens iguais, vejam a imagem "caixa de entrada" anexada à esse tópico. 

Script PHP:

<?php
require 'mailer/PHPMailerAutoload.php';
$mail_restaurante = new PHPMailer;
$mail_cliente = new PHPMailer;

// Campos do formulario
$nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_SPECIAL_CHARS);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_SPECIAL_CHARS);
$dataReserva = filter_input(INPUT_POST, 'data-reserva', FILTER_SANITIZE_SPECIAL_CHARS);
$horaReserva = filter_input(INPUT_POST, 'hora-reserva', FILTER_SANITIZE_SPECIAL_CHARS);
$qtdPessoas = filter_input(INPUT_POST, 'qtd-pessoas', FILTER_SANITIZE_SPECIAL_CHARS);

//====================================================
//Informacoes dos e-Mails **************************//
//====================================================
$infoEmail['email'] = 'email@email.com.br';
$infoEmail['senha'] = 'secreto';

$infoEmail['assunto_restaurante'] = "Solicita&ccedil;&atilde;o de reserva para {$nome}";
$infoEmail['mensagem_restaurante'] = "
<p>{$nome} com o e-mail {$email}, deseja efetuar uma reserva para o dia {$dataReserva}, hor&aacute;rio {$horaReserva} para {$qtdPessoas}.</p>

<p>
    <b>Nome:</b> {$nome} <br>
    <b>e-Mail:</b> {$email} <br>
    <b>Data:</b> {$dataReserva} <br>
    <b>Hor&aacute;rio:</b> {$horaReserva} <br>
    <b>N&ordm; de pessoas:</b> {$qtdPessoas}<br>
</p>
";
    
$infoEmail['assunto_cliente'] = 'Restaurante :: Seu pedido foi recebido, aguarde nossa confirma&ccedil;&atilde;o';
$infoEmail['mensagem_cliente'] = "
    <p>Restaurante Romamia :: Seu pedido foi recebido, aguarde nossa confirma&ccedil;&atilde;o</p>
<h3>Dados do seu pedido de reserva:</h3>
<p>
    <b>Nome:</b> {$nome} <br>
    <b>e-Mail:</b> {$email} <br>
    <b>Data:</b> {$dataReserva} <br>
    <b>Hor&aacute;rio:</b> {$horaReserva} <br>
    <b>N&ordm; de pessoas:</b> {$qtdPessoas}<br>
</p>
";

//Regex formato da data
$rgxFormatoData = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}$/';
preg_match($rgxFormatoData, $dataReserva, $matches);

//Data atual
$hoje = new DateTime( 'now', new DateTimeZone( 'America/Sao_Paulo'));
$hojeMais2Dias = new DateTime(' +2 day');

//Campos preenchidos
if(empty($nome) or empty($email) or empty($dataReserva) or empty($horaReserva) or empty($qtdPessoas)){
    echo '<p style="color: red">Por favor, preencha todos os campos</p>';
}
//A data combina com o formato permitido? 00/00/0000
elseif($matches){
    //O dia escolhido obedece a regra de +2 dias?
    if($dataReserva < $hojeMais2Dias->format('d/m/Y')){
        echo '<p style="color: red">Escolha uma data a partir de ' . $hojeMais2Dias->format('d/m/Y') . '</p>';
    } 
    //Enviar mensagem
    else {        
        //========================================================
        //Mensagem para o restaurante **************************//
        //======================================================== 
        $mail->SMTPDebug = 2;
        $mail_restaurante->isSMTP(); // Set mailer to use SMTP
        $mail_restaurante->Host = 'email-ssl.com.br'; // Specify main and backup SMTP servers
        $mail_restaurante->SMTPAuth = true; // Enable SMTP authentication
        $mail_restaurante->Username = $infoEmail['email']; // SMTP username
        $mail_restaurante->Password = $infoEmail['senha']; // SMTP password
        $mail_restaurante->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
        $mail_restaurante->Port = 587; // TCP port to connect to
        $mail_restaurante->isHTML(true); // Set email format to HTML        
        $mail_restaurante->setFrom($infoEmail['email']);
        
        $mail_restaurante->addAddress($infoEmail['email'], 'Restaurante'); // Add a recipient        
        $mail_restaurante->Subject = $infoEmail['assunto_restaurante']; //Here is the subject
        $mail_restaurante->Body    = $infoEmail['mensagem_restaurante'];//This is the HTML message
        
        if(!$mail_restaurante->send()) {
            echo 'Erro ao enviar e-amil para - Mailer Error: ' . $mail_cliente->ErrorInfo;
        } else {
            
            //====================================================
            //Mensagem para o cliente **************************//
            //====================================================
            $mail->SMTPDebug = 2;
            $mail_cliente->isSMTP(); // Set mailer to use SMTP
            $mail_cliente->Host = 'email-ssl.com.br'; // Specify main and backup SMTP servers
            $mail_cliente->SMTPAuth = true; // Enable SMTP authentication
            $mail_cliente->Username = $infoEmail['email']; // SMTP username
            $mail_cliente->Password = $infoEmail['senha']; // SMTP password
            $mail_cliente->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
            $mail_cliente->Port = 587; // TCP port to connect to
            $mail_cliente->isHTML(true); // Set email format to HTML

            $mail_cliente->setFrom($infoEmail['email']);
            $mail_cliente->addAddress($email, $nome); // Add a recipient        

            $mail_cliente->Subject = $infoEmail['assunto_cliente']; //Here is the subject
            $mail_cliente->Body    = $infoEmail['mensagem_cliente'];//This is the HTML message   

            if(!$mail_cliente->send()) {
                echo 'Erro ao enviar e-amil para ' . $email . ' - Mailer Error: ' . $mail_cliente->ErrorInfo;
            } else {
                echo '<p style="color: green">Mensagem enviada com sucesso!</p>';
                $mail_cliente->ClearAllRecipients();
            }//else cliente
            $mail_restaurante->ClearAllRecipients();
        }//else restaurante         
    }//else validacao
}//elseif matches

 

Script JQuery:

(function ($) {
    var form_reservas = $('#reservas');
    var tema = '/wp-content/themes/restaurante/';
    var script_reservas = tema + 'reservas/reservasRestaurante.php';        
    var status = $('#status-envio'); 
    
    function retorno(data){
        status.hide().html(data).fadeIn();
    }
    
    //Ao clicar em Submit
    form_reservas.submit(function(event){
        event.preventDefault();
        var campos = form_reservas.serializeArray();
        
        //Percorrendo os campos
        $.map(campos, function(campo){
            // ====== Minha enorme validação :P
            } else {
                $.ajax({
                    type: "POST",
                    url: script_reservas,
                    data: campos,
                    beforeSend: function(){
                        status.hide().html('<p style="color: #337AB7"><img src="'+ tema +'images/loading_icon.svg"> Enviando ...</p>').fadeIn();
                    },
                    error: retorno,
                    success: retorno,
                    complete: function(){form_reservas.get(0).reset();}
                });
            }
        });        
    });
})(jQuery);

 

Caixa de entrada.png

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Está enviando várias vezes porque a chamada ao ajax está dentro do map(). O map percorre cada campo e, para cada campo que ele percorre, ele chama o ajax postando a informação e, portanto, enviando um email. 

Um jeito fácil de resolver isso é setando uma variável de controle de erro. Aí depois verifica a variável e depois chama o ajax. Algo mais ou menos assim:

//Percorrendo os campos
var erro_form = false;
$.map(campos, function(campo){
	// ======= Minha enorme validação :P
  	if ( /* algo errado */ ) {
        erro_form = true;
    }
});

if (! erro_form ){
    $.ajax({
        type: "POST",
        url: script_reservas,
        data: campos,
        beforeSend: function(){
            status.hide().html('<p style="color: #337AB7"><img src="'+ tema +'images/loading_icon.svg"> Enviando ...</p>').fadeIn();
        },
        error: retorno,
        success: retorno,
        complete: function(){form_reservas.get(0).reset();}
    });
}

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...