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 landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • 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
×

Informação importante

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