Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leo Barreto

Envio duplicado de email - PHPmailer()

Recommended Posts

Bem amigos,

Eu uso a classe phpmailer para enviar emails e esta está enviando em duplicidade.

Faço a chamada via ajax.

 

Segue a função JS

$("#sendmail").click(function(){
	var nrpedido;
	
	nrpedido = $("#nrpedido").val();
	
	if($(this).is(":checked")){
	  $.ajax({
		type: "POST",
		url: "_email/modelo_email.php",
		data: {nrpedido: nrpedido},
		dataType: "HTML",
		success: function(email){
		  $("#alerta").html(
			"<h4>"+email+".</h4>"+
			"<button type='button' class='alerta'>OK</button>");
		  $("#alerta").show();
		  $(".alerta").click(function(){
			$("#alerta").hide();
		  });
		}
	  }); 
	}
  });

e o PHP que cria um arquivo PDF e o envia como anexo

$mail = new PHPMailer();

//Define os dados do servidor.
$mail->IsSMTP();
$mail->Host = "mail.servidor.com.br";
$mail->SMTPAuth = TRUE;
$mail->Username = "email@email";
$mail->Password = "12345";


//Define o Remetente
$mail->From = "{$_SESSION["email"]}";
//$mail->From = "pedido@andrama.com.br";
$mail->FromName = utf8_decode($_SESSION["email"]);

//Define o(s) Destinatário(s).
$mail->AddAddress($_SESSION["email_contato"]);

//$mail->AddAddress("oterrab@gmail.com");
//$mail->AddCC("leobarreto77@hotmail.com");

//Define os Dados Técnicos do email.
$mail->IsHTML(TRUE);

//Define a Mensagem.
$mail->Subject = "Email de envio de pedido"; //Assunto
$mail->Body = "<b>Prezado cliente</b><br />".
			  "<b>A fim de mantermos a transparência de informações e possibilitar o controle dos pedidos da sua parte, ".
			  "em anexo encontra-se o pedido para conferencia.<br /><br />".
			  "Caso ocorra alguma dúvida estamos a sua disposição para esclarecimentos.</b><br />".
	          "{$_SESSION["email"]}";

//$mail->attachmentExists(TRUE);
$mail->addAttachment("C:\wamp\www\LDMWeb\_anexos\pedido_".$nrpedido.".pdf");

//envia o email.
$enviado = $mail->Send();

$mail->clearAddresses();
$mail->clearBCCs();
$mail->clearCCs();
$mail->clearAllRecipients();
$mail->clearAttachments();
$mail->clearReplyTos();

//Exibe mensagem de resultado (enviado ou falha).
if($enviado){
  echo "Email enviado com sucesso";
}else{
  switch($mail->ErrorInfo){
	case "You must provide at least one recipient email address.":
	  echo "Não foi possível enviar o email. <br />".
		   "Informe um email de destinatário válido";
	  break;
  }
}

Alguma luz??? Já pesquisei na net e dizem que é para usar o clearAddAdresses, mas ainda assim não adianta.

 

Grato desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa!

Você deixou a senha real? altera isso aí!! :)

Você não colocou um nem um for não? while?

Nunca tive problemas com PHPMailer, foi sempre de boa. Estranho! :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa!

Você deixou a senha real? altera isso aí!! :)

Você não colocou um nem um for não? while?

Nunca tive problemas com PHPMailer, foi sempre de boa. Estranho! :wacko:

Garay, nem me liguei. Valeu por chamar a atenção. :upset:

 

Não, para o envio não tem nem for, nem while. só para a montagem do PDF

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que pode ser que o botão que envia essa requisição está sendo clicado duas vezes

 

por engano, isso é comum com chamadas ajax. Uma opção seria tentar desabilitar o botão que faz o envio.

 

Voltando o botão ao estado original após o sucesso ou falha do envio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, primeiro quero agradecer aos comentários e dicas.

 

 

Verifica de novo, acho que o problema seu está na montagem do pdf!

O problema não estava na montagem, mas mesmo assim separei a montagem do envio.

 

Acho que pode ser que o botão que envia essa requisição está sendo clicado duas vezes

 

por engano, isso é comum com chamadas ajax. Uma opção seria tentar desabilitar o botão que faz o envio.

 

Voltando o botão ao estado original após o sucesso ou falha do envio.

Não, é clicado apenas uma vez.

 

Até que deu um estalo e resolvi criar uma função e colocá-la no evento onclick do checkbox e aí sim voltar ao estado original, mas somente para efeito visual mesmo.

 

Mais uma vez grato a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.