Ir para conteúdo

Arquivado

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

agenciamocho

Formulário PHP funciona só quando ele quer

Recommended Posts

Pessoal, alguns formulários do meu site às vezes não envia para o e-mail. O site chega a confirmar o envio mas tem hora que não chega nada no e-mail. Agora vem a pior parte: isso acontece às vezes, ou seja, tem hora que ele envia. É como se às vezes o código não pegasse no tranco. Alguém poderia me ajudar??

 

Se quiserem acessar o formulário do meu site, o endereço é o http://www.agenciamocho.com

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="../images/favicon.gif" />

<style type="text/css">
a:link {
	text-decoration: none;
	color: #f24f13;
}
a:visited {
	text-decoration: none;
	color: #f24f13;
}
a:hover {
	text-decoration: underline;
	color: #f24f13;
}
a:active {
	text-decoration: none;
	color: #f24f13;
}
body {
	background-color: #333333;
	font-family:Arial, Helvetica, sans-serif;
	color:#c0c0c0;
}
body,td,th {
	color: #c0c0c0;
}
a {
	font-size: 12px;
}
</style>

<!--Google Analytics-->
<script type="text/javascript">
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-48343930-1', 'agenciamocho.com');
  ga('send', 'pageview');
</script>

</head>
<body>
<br /><br /><br />

<table align="center" width="100%" border="0">
<tr><td align="center">

<br />
<img src="../images/agencia-mocho-envio.png" alt="" height="115" width="240" align="middle" />
<br /><br />



<?php

/*apenas dispara o envio da mensagem caso houver/existir $_POST['enviar']*/

if (isset($_POST['enviar']))
{

$destinatarios = 'nome@email.com';
$nomeDestinatario = 'Nome do Destinatario';
$usuario = 'nome@email.com';
$senha = 'XXXXXX';


/*abaixo as veriaveis principais, que devem conter em seu formulario*/
$categoria                = $_POST["categoria"];
$nome                     = $_POST["nome"];
$email                    = $_POST["email"];
$cidade                   = $_POST["cidade"];
$website                  = $_POST["website"];
$empresa                  = $_POST["empresa"];
$areaatuacao              = $_POST["areaatuacao"];
$tipodenegocio            = $_POST["tipodenegocio"];
$caracterconteudo         = $_POST["caracterconteudo"];
$incluir_objeto_na_marca  = $_POST["incluir_objeto_na_marca"];
$preferencia_cores        = $_POST["preferencia_cores"];
$referencia      		  = $_POST["referencia"];
$comentarios              = $_POST["comentarios"];

//Loop para o Checkbox $caracterconteudo 
if (isset($_POST["enviar"])){
foreach($_POST["caracterconteudo"] as $caracterconteudo)
{$caracterconteudo_check = "$caracterconteudo_check "."$caracterconteudo".",";
}}

//Dados que vão aparecer no corpo do e-mail
$_POST['mensagem'] = nl2br('

<b>Nome:</b> '. $_POST['nome'] ."

<b>E-mail:</b> ". $_POST['email'] ."

<b>Cidade:</b> ". $_POST['cidade'] ."

<b>Website:</b> ". $_POST['website'] ."

<b>Nome que aparecerá no Logotipo:</b> ". $_POST['empresa'] ."

<b>Descreva a sua área de atuação:</b> ". $_POST['areaatuacao'] ."

<b>O seu negócio é um(a):</b> ". $_POST['tipodenegocio'] ."

<b>Quais características descrevem melhor o seu negócio?</b> $caracterconteudo_check"."

<b>O que não pode faltar na sua marca?</b> ". $_POST['incluir_objeto_na_marca'] ."

<b>Cores de sua preferência:</b> ". $_POST['preferencia_cores'] ."

<b>Possui referência de outra marca?:</b> ". $_POST['referencia'] ."

<b>Comentarios Finais:</b> ". $_POST['comentarios']);




//mensagens de erro para caso algum campo fique em branco

if ($nome == "") {
	echo "<p align=center>Por favor, preencha o campo nome.</p>";
}
else if ($email == "") {
	echo "<p align=center>Por favor, preencha o campo email.</p>";
}
else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
	echo "<p align=center>Informe um e-mail válido.</p>";
}
else if ($empresa == "") {
	echo "<p align=center>Por favor, preencha o campo empresa.</p>";
}
else {




/*********************************** A PARTIR DAQUI NAO ALTERAR ************************************/

include_once("../phpmailer/class.phpmailer.php");

$To = $destinatarios;
$Subject = 'Orcamento - Logotipo';
$Message = $_POST['mensagem'];

$Host = 'smtp.'.substr(strstr($usuario, '@'), 1);
$Username = $usuario;
$Password = $senha;
$Port = "587";

$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $Host; // SMTP server
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = $Port; // set the SMTP port for the service server
$mail->Username = $Username; // account username
$mail->Password = $Password; // account password

$mail->SetFrom($usuario, $nomeDestinatario);
$mail->Subject = $Subject;
$mail->MsgHTML($Message);
$mail->AddAddress($To, "");



// CÓDIGO DO ANEXO - SIMPLES!

$files = $_FILES['files'];
	for ($i=0; $i < sizeof($files); $i++)
	{
		if (is_uploaded_file($files['tmp_name'][$i]))
		{
			// Adiciona um anexo de um caminho sobre o sistema de ficheiros
			$mail->AddAttachment($files['tmp_name'][$i], $files['name'][$i]);
		}
	}
	
	
// FIM DO CÓDIGO DO ANEXO
	


if(!$mail->Send()) {
$mensagemRetorno = 'Erro ao enviar e-mail: '. print($mail->ErrorInfo);
$mail->ErrorInfo."\n";
} else {
echo "<p align=center>$nome, sua mensagem foi enviada.</p>";
echo "<p align=center>Retornaremos em breve.</p>";
}
}
}
?>



<br /><br />
<a href="../orcamento-logotipo.html"> retornar </a>

</td></tr></table>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema pode estar no servidor de email utilizado e não no código. O código é ciência exata, ou ele funciona ou não funciona, não existe esse meio termo de hora funciona hora não. Isso é problema de servidor, ao meu ver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o Alaerte mencionou, em programação não tem essa de meio de termo.

 

Mas tenho uma pergunta: esse código foi desenvolvido especialmente pro seu servidor, ou você encontrou ele dessa forma na internet?

 

Ele tem algumas coisas que diferem de maioria dos servidores por aí. Por exemplo, o subdomínio responsável pelo servidor de e-mails é smtp e, na maioria das hospedagens, o pessoal utiliza o subdomínio mail.

 

Não estou dizendo que está errado, pode ser a informação correta, mas vale a pena conferir.

 

Outro detalhe é fazer testes nas portas 25 e 26 e ver se funciona como esperado (a porta atual é 587). E também não custa dar uma atualizada no PHPMailer, se for o caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Alaerte e Clayderson, tudo bem? Obrigado pelas contribuições.

 

Clayderson, eu encontrei a base desse código na internet, mas já andei manipulando ele.Eu uso a hospedagem da UOL HOST, não acho as mil maravilhas, mas acho que ela pode interferir.

 

Eu fiz a atualização do PHPMailer, mas parece que não era isso, pois não surtiu muito efeito. Vou fazer os outros testes que você falou, de mudar as informações das portas e de alterar o subdomínio.

 

Passarei um retorno para vocês caso eu tenha resolvido o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, apenas para dar um retorno para vocês. Aparentemente o meu form voltou a funcionar, ainda vou fazendo mais testes durante a semana, mas acredito que agora está OK.

 

A última alteração que eu fiz (acredito que tenha sido isso a solução), foi alterar essa linha de código...

if (isset($_POST['enviar']))
{

por esta:

if (isset($_POST['enviar']) && $_POST['enviar'] == 'send') {

Alguém sabe o que isso pode significar? Apenas para esclarecimento mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não significa nada... no primeiro caso:

se(existir($_POST['enviar']))

 

No segundo caso:

se(existir($_POST['enviar']) E $_POST['enviar'] igual a send)

 

Ou seja, você só adicionou mais uma condição no if, nada mais que isto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra, vc tem razão. Fiz mais alguns testes agora e parece que ainda não funcionou 100%.

 

O mais estranho é que não aparece mensagem de erro. Ele confirma o envio mas só chega no e-mail às vezes. Tem hora que chega, tem hora que não chega. Muito estranho! E o pior, já está dando raiva já, porque não estou conseguindo resolver!!!!

 

Quem puder me ajudar, eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A explicação já foi dada no post #2.

 

Se as vezes chega e as vezes não tem duas possibilidades:

1 - O servidor de e-mail está falhando no envio;

2 - O servidor de destino está negando os e-mails enviados do seu servidor.

 

Tente usar outro SMTP externo para testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, utilize o formulário com autenticação SMTP padrão do Uolhost.

 

Persistindo o problema, anote o dia e horário do teste realizado e abra um chamado solicitando logs do servidor.

 

Pode ser que as mensagens estejam sendo barradas no servidor do destinatário, então faça o teste utilizando contas de provedores diferentes. Se a mensagem chegar em um provedor e em outro não, revise as configurações SPF do seu domínio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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