Denis Almeida 0 Denunciar post Postado Janeiro 21, 2012 Caro amigos não consigo fazer esse form de contato funcionar especificamente nos servidores da locaweb, então vim aqui pedir uma humilde contribuição de vocês: XHTML: http://sstransporte.com.br/contato.html <form action="mail.php" id="validate_form" method="post"> <ul> <li><input id="name" type="text" name="name" class="required" /> </li> <li><input id="email" type="text" name="email" value="" class="required" /> </li> <li><textarea id="message" name="message" rows="8" cols="40" class="required"></textarea></li> <li></li> <li class="button-holder"> <span class="button alignleft default-2"> <span><input type="submit" name="contact" value="Enviar" /></span></span> <span class="loading"></span></li> </li> </ul> </form> AJAX e VALIDAÇÃO: $(document).ready(function(){ // show a simple loading indicator var loader = jQuery('<img src="media/images/loading.gif" alt="loading..." />') .appendTo(".loading") .hide(); jQuery().ajaxStart(function() { loader.show(); }).ajaxStop(function() { loader.hide(); }).ajaxError(function(a, b, e) { throw e; }); jQuery.validator.messages.required = ""; var v = jQuery("#validate_form").validate({ submitHandler: function(form) { jQuery(form).ajaxSubmit({ target: "#result" }); } }); jQuery("#reset").click(function() { v.resetForm(); }); }); $(config.form_validate).blur( function() { var val = $(this).val(); $(this).removeClass('valid'); if (val == '' || val == $(this).data('placeholder')) { $(this).addClass('error'); } else { if ($(this).attr('name') == 'email' || $(this).attr('id') == 'email' || $(this).hasClass('email')) { if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(val)) { $(this).removeClass('error').addClass('valid'); } else { $(this).addClass('error'); } } else { $(this).removeClass('error').addClass('valid'); } } }); PHP: <? // edit these lines $your_name="S/S Transporte"; $your_email="contato@sstransporte.com.br"; $your_web_site_name="http://www.sstransporte.com.br"; ?> <?php //If the form is submitted if(isset($_POST['name'])) { //Check to make sure that the name field is not empty if(trim($_POST['name']) === '') { $hasError = true; } else { $name = trim($_POST['name']); } //Check to make sure sure that a valid email address is submitted if(trim($_POST['email']) === '') { $hasError = true; } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) { $hasError = true; $errorMessage = "Por favor insira um E-mail Valido!"; } else { $email = trim($_POST['email']); } //Check to make sure comments were entered if(trim($_POST['message']) === '') { $hasError = true; } else { if(function_exists('stripslashes')) { $comments = stripslashes(trim($_POST['message'])); } else { $comments = trim($_POST['message']); } } //If there is no error, send the email if(!isset($hasError)) { $emailTo = $your_email; $subject = 'Formulario do Site'.$name; //message body $body ="Name: $name \n\n"; $body .="Email: $email \n\n"; $body .="Message: $comments"; $headers = 'From: S/S Transporte '.$your_web_site_name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: contato@sstransporte.com.br' . $email; mail($emailTo, $subject, $body, $headers); $emailSent = true; } } ?> <?php if(isset($emailSent) == true) { ?> <div class="ok_box"> <h3>obrigado, <b><?php echo $name;?></b></h3> <p class="p_form">Seu e-mail foi enviado com sucesso! Em breve retornaremos.</p> </div> <?php } ?> <?php if(isset($hasError) ) { ?> <div class="error_box"> Ocorreu um erro ao enviar o formulario! <br /> <?php echo $errorMessage;?> </div> <?php } ?> E também as bibliotecas: JQUERY VALIDATE LIBRARY: http://sstransporte.com.br/media/scripts/libs/jquery.validate.js JQUERY FORMS LIBRARY: http://sstransporte.com.br/media/scripts/libs/jquery.form.js É o que compõe o form, a locaweb recomenda esses padrões: http://ajuda.locaweb.com.br/pt-br/Como_enviar_e-mails_com_a_fun%C3%A7%C3%A3o_mail%28%29_do_PHP#Hospedagem_Linux Se vocês puderem ajudar a achar o erro, sera de muita ajuda. Desde ja agradeço Compartilhar este post Link para o post Compartilhar em outros sites
Diéssica 140 Denunciar post Postado Janeiro 22, 2012 Tu não tá conseguindo validar o formulário, é isso? Ou o problema é no envio? Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Janeiro 22, 2012 Meu, seu arquivo de enviar tá beeemm zuado... troque a linha com a variavel $headers por estas linhas: $headers = "MIME-Version: 1.1\r\n"; $headers .= "Content-type: text/html;charset=utf-8\r\n"; $headers .= "From: $your_name <$your_email>\r\n"; $headers .= "Reply-To: $nome <$email>\r\n"; A função mail está errada amigão, você está enviando o e-mail pra você mesmo?? Não seria para o e-mail que foi digitado na caixa de login?? Troque a linha da função mail por este código: $emailSent = mail($email, $subject, $body, $headers) ? true : false; Compartilhar este post Link para o post Compartilhar em outros sites
Denis Almeida 0 Denunciar post Postado Janeiro 22, 2012 Tu não tá conseguindo validar o formulário, é isso? Ou o problema é no envio? problema no envio, o não recebo o formulario no email Meu, seu arquivo de enviar tá beeemm zuado... troque a linha com a variavel $headers por estas linhas: $headers = "MIME-Version: 1.1\r\n"; $headers .= "Content-type: text/html;charset=utf-8\r\n"; $headers .= "From: $your_name <$your_email>\r\n"; $headers .= "Reply-To: $nome <$email>\r\n"; A função mail está errada amigão, você está enviando o e-mail pra você mesmo?? Não seria para o e-mail que foi digitado na caixa de login?? Troque a linha da função mail por este código: $emailSent = mail($email, $subject, $body, $headers) ? true : false; Ola Lucas obrigado e descupe a ignorancia sou iniciante, então uma duvida na $emailSent, altero as duas linhas pela que você mencionou? ou somente a segunda? mail($emailTo, $subject, $body, $headers); $emailSent = true; Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Janeiro 22, 2012 Olá Denis, não há porque se desculpar, eu já fui iniciante em programação php. O correto seria alterar as duas linhas, porque dessa forma, será feita a validação da função mail, veja: A forma como estava: mail($emailTo, $subject, $body, $headers); $emailSent = true; // a variavel sempre recebe true, mesmo se o e-mail não for enviado A forma correta $emailSent = mail($email, $subject, $body, $headers) ? true : false; //A variável $emailSent receberá true se o e-mail for enviado e false se não for enviado E detalhe importante, você deve usar na função mail a variável $email (email que o usuário digitou no formulário), não a variável com o seu e-mail Compartilhar este post Link para o post Compartilhar em outros sites
Denis Almeida 0 Denunciar post Postado Janeiro 23, 2012 valew Lucas, não sei se ficou algo errado amigo mas continua sem enviar o form, lembrando que minha hospedagem é linux na locaweb, como ficou: <? // edit these lines $your_name="S/S Transporte"; $your_email="contato@sstransporte.com.br"; $your_web_site_name="http://www.sstransporte.com.br"; ?> <?php //If the form is submitted if(isset($_POST['name'])) { //Check to make sure that the name field is not empty if(trim($_POST['name']) === '') { $hasError = true; } else { $name = trim($_POST['name']); } //Check to make sure sure that a valid email address is submitted if(trim($_POST['email']) === '') { $hasError = true; } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) { $hasError = true; $errorMessage = "Por favor insira um E-mail Válido!"; } else { $email = trim($_POST['email']); } //Check to make sure comments were entered if(trim($_POST['message']) === '') { $hasError = true; } else { if(function_exists('stripslashes')) { $comments = stripslashes(trim($_POST['message'])); } else { $comments = trim($_POST['message']); } } //If there is no error, send the email if(!isset($hasError)) { $emailTo = $your_email; $subject = 'Formulario do Site'.$name; //message body $body ="Name: $name \n\n"; $body .="Email: $email \n\n"; $body .="Message: $comments"; $headers = "MIME-Version: 1.1\r\n"; $headers .= "Content-type: text/html;charset=utf-8\r\n"; $headers .= "From: $your_name <$your_email>\r\n"; $headers .= "Reply-To: $nome <$email>\r\n"; $emailSent = mail($email, $subject, $body, $headers) ? true : false; } } ?> <?php if(isset($emailSent) == true) { ?> <div class="ok_box"> <h3>obrigado, <b><?php echo $name;?></b></h3> <p class="p_form">Seu e-mail foi enviado com sucesso! Em breve retornaremos.</p> </div> <?php } ?> <?php if(isset($hasError) ) { ?> <div class="error_box"> Ocorreu um erro ao enviar o formulário! <br /> <?php echo $errorMessage;?> </div> <?php } ?> A xarope da locaweb exige o padrão internacional RFC 822, e aqui segue um modelo que eles testaram e funcionou na minha hospedagem, como implantaria esse padrão no meu form sem ter que fazer do 0? <?php /* Medida preventiva para evitar que outros domínios sejam remetente da sua mensagem. */ if (eregi('tempsite.ws$|locaweb.com.br$|hospedagemdesites.ws$|websiteseguro.com$', $_SERVER[HTTP_HOST])) { $emailsender='contato@sstransporte.com.br'; // Substitua essa linha pelo seu e-mail@seudominio } else { $emailsender = "contato@sstransporte.com.br"; // Na linha acima estamos forçando que o remetente seja 'webmaster@seudominio', // Você pode alterar para que o remetente seja, por exemplo, 'contato@seudominio'. } /* Verifica qual éo sistema operacional do servidor para ajustar o cabeçalho de forma correta. */ if(PATH_SEPARATOR == ";") $quebra_linha = "\r\n"; //Se for Windows else $quebra_linha = "\n"; //Se "não for Windows" // Passando os dados obtidos pelo formulário para as variáveis abaixo $nomeremetente = $_POST['nomeremetente']; $emailremetente = $_POST['emailremetente']; $emaildestinatario = $_POST['emaildestinatario']; $comcopia = $_POST['comcopia']; $comcopiaoculta = $_POST['comcopiaoculta']; $assunto = $_POST['assunto']; $mensagem = $_POST['mensagem']; /* Montando a mensagem a ser enviada no corpo do e-mail. */ $mensagemHTML = '<P>Esse email é um teste enviado no formato HTML via PHP mail();!</P> <P>Aqui está a mensagem postada por você; formatada em HTML:</P> <p><b><i>'.$mensagem.'</i></b></p> <hr>'; /* Montando o cabeçalho da mensagem */ $headers = "MIME-Version: 1.1" .$quebra_linha; $headers .= "Content-type: text/html; charset=iso-8859-1" .$quebra_linha; // Perceba que a linha acima contém "text/html", sem essa linha, a mensagem não chegará formatada. $headers .= "From: " . $emailsender.$quebra_linha; $headers .= "Cc: " . $comcopia . $quebra_linha; $headers .= "Bcc: " . $comcopiaoculta . $quebra_linha; $headers .= "Reply-To: " . $emailremetente . $quebra_linha; // Note que o e-mail do remetente será usado no campo Reply-To (Responder Para) /* Enviando a mensagem */ //É obrigatório o uso do parâmetro -r (concatenação do "From na linha de envio"), aqui na Locaweb: if(!mail($emaildestinatario, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix $headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix" mail($emaildestinatario, $assunto, $mensagemHTML, $headers ); } ?> confere? vlw Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Janeiro 23, 2012 Vou dar uma olhada e testar o form em meu servidor (um deles é na locaweb), e te passo uma resposta Compartilhar este post Link para o post Compartilhar em outros sites
Denis Almeida 0 Denunciar post Postado Janeiro 23, 2012 Vou dar uma olhada e testar o form em meu servidor (um deles é na locaweb), e te passo uma resposta opa valew brother!!! Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Janeiro 25, 2012 Testei aqui e funcionou certinho. Agora você editar o arquivo com as suas validações, e as mensagens para mostrar <?php function protect($str){ $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str); $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str); $str = str_replace("<script","",$str); $str = str_replace("script>","",$str); $str = str_replace("<Script","",$str); $str = str_replace("Script>","",$str); $str = trim($str); $tbl = get_html_translation_table(HTML_ENTITIES); $tbl = array_flip($tbl); $str = addslashes($str); $str = strip_tags($str); return strtr($str, $tbl); } $emailsender ='contato@sstransporte.com.br'; // Substitua essa linha pelo seu e-mail@seudominio /* Verifica qual é o sistema operacional do servidor para ajustar o cabeçalho de forma correta. */ $quebra_linha = PATH_SEPARATOR == ";" ? "\r\n" : "\n"; // Passando os dados obtidos pelo formulário para as variáveis abaixo $nome = protect($_POST['name']); $email = protect($_POST['email']); $mensagem = protect($_POST['message']); $assunto = "Mensagem do site SS Transporte"; /* Montando a mensagem a ser enviada no corpo do e-mail. */ $mensagemHTML = " <p>Mensagem do site</p> Nome: {$nome}<br/> E-mail: {$email}<br/> Mensagem: {$mensagem} "; /* Montando o cabeçalho da mensagem */ $headers = "MIME-Version: 1.1" .$quebra_linha; $headers .= "Content-type: text/html; charset=utf-8" .$quebra_linha; $headers .= "From: " . $emailsender.$quebra_linha; $headers .= "Reply-To: " . $email.$quebra_linha; /* Enviando a mensagem */ if(!mail($emailsender, $assunto, $mensagemHTML, $headers ,"-r".$emailsender)){ // Se for Postfix $headers .= "Return-Path: " . $emailsender . $quebra_linha; // Se "não for Postfix" mail($emailsender, $assunto, $mensagemHTML, $headers ); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 25, 2012 era mais simples usar um PHP_EOL no lugar disso aqui: $quebra_linha = PATH_SEPARATOR == ";" ? "\r\n" : "\n"; ficando então: /* Montando o cabeçalho da mensagem */ $headers = "MIME-Version: 1.1" .PHP_EOL; $headers .= "Content-type: text/html; charset=utf-8" .PHP_EOL; $headers .= "From: " . $emailsender.PHP_EOL; $headers .= "Reply-To: " . $email.PHP_EOL; Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Peperaio 20 Denunciar post Postado Janeiro 25, 2012 verdade bruno, nem lembrei.. Compartilhar este post Link para o post Compartilhar em outros sites
Denis Almeida 0 Denunciar post Postado Fevereiro 13, 2012 sem palavras! valew Lucas e william, funcionou 100% perfeito, descupe a demora!!! Compartilhar este post Link para o post Compartilhar em outros sites