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ção de reserva para {$nome}";
$infoEmail['mensagem_restaurante'] = "
<p>{$nome} com o e-mail {$email}, deseja efetuar uma reserva para o dia {$dataReserva}, horário {$horaReserva} para {$qtdPessoas}.</p>
<p>
<b>Nome:</b> {$nome} <br>
<b>e-Mail:</b> {$email} <br>
<b>Data:</b> {$dataReserva} <br>
<b>Horário:</b> {$horaReserva} <br>
<b>Nº de pessoas:</b> {$qtdPessoas}<br>
</p>
";
$infoEmail['assunto_cliente'] = 'Restaurante :: Seu pedido foi recebido, aguarde nossa confirmação';
$infoEmail['mensagem_cliente'] = "
<p>Restaurante Romamia :: Seu pedido foi recebido, aguarde nossa confirmaçã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ário:</b> {$horaReserva} <br>
<b>Nº 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);