Ir ao conteúdo

Posts recomendados

Postado

Minha pergunta é a seguinte, galera que trabalha/estuda liguagem web, como vocês testam os projetos? Pelo que entendi tem programas de servidores locais que acessam com o localhost. Qual o mais indicado? Wamp, xamp, Apache, etc...

Postado

HTML não precisa de um servidor.

No caso do seu projeto possuir várias imagens, você pode simplesmente colocar todos os arquivos em um diretório e nele subdividir em várias pastas, e nesse diretório uma pasta "imagens".

Agora, PHP + HTML sim é necessário a criação de um servidor Apache + MariaDB/MySQL.

Eu pessoalmente quando estava cursando Análise de Sistemas gostava muito do Wamp, utilizei também o Xampp e o Vetrigo.

Postado
  Em 09/05/2017 às 19:39, rsm_rlb disse:

@SagaGemini Então no caso do PHP o melhor é o Apache né? 

Em relação ao My SQL, ele não é para banco de dados?

Expandir  


Assim como qualquer servidor do tipo, o Apache é responsável por disponibilizar páginas e todos os recursos que podem ser acessados pelo internauta. É o Apache que faz a transcrição do PHP para a tela do seu navegador, o HTML puro qualquer navegador já consegue realizar essa leitura.

MYSQL é sim o banco de dados, que é importante para por exemplo armazenar dados de um formulário de cadastro.

O Xampp por exemplo inclui : : Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin, Webalizer, Mercury Mail Transport System for Win32 e NetWare Systems v3.32, JpGraph, FileZilla FTP Server, mcrypt, eAccelerator, SQLite e WEB-DAV + mod_auth_mysql.


 

  • Curtir 1
Postado

@SagaGemini Entendi. Mais uma pergunta, eu estou tentando testar um formulário de envio. Pelo Wamp não vai. Tentei pesquisar na net, mas falaram que servidor local não tem este tipo de funcionalidade. Saberia confirmar isso?

Postado

@SagaGemini Coloquei pra você. Primeiro spoiler é o "contato.php" que seria a página do formulário. Segundo é "envio.php" que seria a ação de enviar e o terceiro é a mensagem que aparece quando clico em enviar no servidor do Wamp.

<!doctype html> <html> <head> <meta charset="utf-8"> <title>Formulário de Contato</title> </head> <body> <h1>Formulário de Contato</h1> <form action="envio.php" method="post"> <table width="400" border="0" align="center"> <tbody> <tr> <td colspan="2" align="center"><h2><strong>Formulário de Contato</strong></h2></td> </tr> <tr> <td width="91" align="right"><strong>Nome:</strong></td> <td width="299"><input name="nome" type="text" id="nome" size="40" maxlength="150"></td> </tr> <tr> <td align="right"><strong>Telefone:</strong></td> <td><input name="telefone" type="text" id="telefone" size="40" maxlength="11"></td> </tr> <tr> <td height="29" align="right"><strong>Email:</strong></td> <td><input name="email" type="text" id="email" size="40" maxlength="150"></td> </tr> <tr> <td align="right"><strong>Mensagem:</strong></td> <td><textarea name="msg" cols="35" id="msg" ></textarea></td> </tr> <tr> <td> </td> <td><input type="reset" name="button" id="button" value="Limpar"> <input type="submit" name="submit" id="submit" value="Enviar"></td> </tr> </tbody> </table> </form> </body> </html>
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Mensagem enviada</title> </head> <body> <!--Página para configurar o envio do formulário!--> <?php if(!empty($_POST)){ $cab= "Form: ".$_POST['nome']. "<".$_POST[email].">\n"; $mensagem = "Contato via Site \n"; $mensagem = "Nome: ".$_POST['nome']."\n"; $mensagem = "Telefone: ".$_POST['telefone']."\n"; $mensagem = "Email: ".$_POST['email']."\n"; $mensagem = "Mensagem: ".$_POST['msg']."\n"; if(mail("rsm_rlb@hotmail.com", "Formulario de Contato - Nome do Site", $mensagem, $cab)){ echo "<script type=\"text/javascript\"> alert (\"Sua mensagem foi enviada com sucesso.\");history.go(-1); </script>\n"; } else{ "<script type=\"text/javascript\"> alert (\"Ocorreu um erro. Tente novamente! \");history.go(-1); </script>\n"; } } else{ header("Location:contato.php"); } ?> </body> </html>
  Mostrar conteúdo oculto
  • Moderador
Postado

@rsm_rlb

O HTML não precisa do servidor como já mencionaram, contudo ele funciona igual.

 

Sugiro instalar o EasyPHP   e coloque os seus arquivos na pasta raiz dele que é eds-www ... criando um diretório lá você vai acessar suas páginas com  localhost/seudiretorio

Lembrando que o arquivo html principal é index.html ou index.php(se for em php)

 

Em tempo, é impossível usar envio de e-mails em localhost usando a função nativa do php.

 

Para funcional em localhost, use uma classe chamada phpmailer.  Esta classe é essencial para quem deseja enviar e-mails de forma fácil. Já que ele usa como autenticador o gmail, hotmail  e/ou seu próprio webmail(do servidor se estiver contratado)

 

PS:  Vou reforçar aqui o que informei na edição de seu post, por gentileza, evite de usar o botão de "olho" (spoiler) nos códigos.  Use o botão CODE <>  e deixe o seu código edentado para que torne mais simples a compreensão e leitura de seu código.

Postado

@DiF Pode me dar um auxilio então em como usar essa classe? Googleando, não entendi exatamente como incluo no meu código. 

 

E desculpe sobre o spoiler. Não se repitirá. 

  • Moderador
Postado

@rsm_rlb

  Em 09/05/2017 às 20:15, rsm_rlb disse:

Pode me dar um auxilio então em como usar essa classe?

Expandir  

Sim, posso. Mas Aqui no fórum tem centenas de tópicos de como usar essa classe, na qual eu explico passo a passo.  Tente! Caso não funcione do jeito que tentou, posta aqui no seu tópico o código que tentou juntamente com o problema ocasionado. Assim podemos explicar melhor.

 

Digo isso, porque não adianta eu dizer "faça isso e aquilo" e você não entender rsrs

O objetivo aqui é seu aprendizado!

No aguardo.

Postado

@DiF Cara, tá bem confuso isso. Esse phpmailer é uma classe extra, digo fora do meu código que eu tenho que puxar pra dentro do código? Pelo que to lendo tenho que baixar no Site do PHPMailer, é isso mesmo? E desculpe parecer meio burro, mas realmente não consegui compreender como puxar pra dentro do código. 

 

Obs.:  Corrigi algo errado que tava no código. Upei ele num servidor gratuito junto com um index genérico. Ele dá a mensagem de "email enviado" mas não recebo no meu email a mensagem. Também não consigo fazer o formulário "limpar" automaticamente após confirmar o envio. 

 

Obs².: Eu sabia fazer essas paradas tudo. Mas fiquei quase 6 meses parado por ficar sem computador e agora to tomando uma surra tanto com algumas coisas do CSS quanto com o PHP.

 

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Mensagem enviada</title>
</head>
<body>

<!--Página para configurar o envio do formulário!-->
<?php
	if(!empty($_POST)){
		$cab= "From: <>\n";
		
		$mensagem = "Contato via Site \n";
		$mensagem = "Nome: ".$_POST['nome']."\n";
		$mensagem = "Telefone: ".$_POST['telefone']."\n";
		$mensagem = "Email: ".$_POST['email']."\n";
		$mensagem = "Mensagem: ".$_POST['msg']."\n";
		
		if(mail("rsm_rlb@hotmail.com", "Formulario de Contato - Nome do Site", $mensagem, $cab)){
			echo "<script type=\"text/javascript\"> alert (\"Sua mensagem foi enviada com sucesso.\");history.go(-1); </script>\n";
		}
		else{
			echo "<script type=\"text/javascript\"> alert (\"Ocorreu um erro. Tente novamente!	\");history.go(-1); </script>\n";
		}
	}
	
	else{
		header("Location:contato.php");
	}
?>

</body>
</html>

 

EDIT: Reupei os arquivos e dessa vez o email foi. O problema é: Nenhum dos itens de identificação vieram junto (Nome, Email e Telefone).

 

hgnIEjW.png

  • Moderador
Postado

@rsm_rlb Então,  o phpmailer é uma classe extra sim. Ele deve ser baixado e colocado dentro do seu diretório raiz do seu projeto.

 

São 4 arquivos,  mas você chama apenas  um que é autoload.  Este autoload fica em carregado de buscar no arquivo de classe do phpmailer as funções que serão utilizadas.

PHPMailerAutoload.php

class.phpmailer.php

class.smtp.php

 class.pop3.php

 

Como disse anteriormente, a função nativa do php é bem ruim  e quase sempre dá problemas além de não funcionar em localhost.

 

Contudo, aquele site que você postou do phpmailer, não é certo. O site certo é no GITHUB do phpmailer

Basicamente, o phpmailer é uma classe orientada a objetos exclusiva pra envio de emails de forma prática.

Mesmo sendo um iniciante, amador ou profissional  dá para entender perfeitamente a documentação dele.

 

No github tem um exemplo funcional.

 

Vamos ao exemplo que consta lá no github:

<?php

//Chama o arquivo que faz a auto chamada do arquivo de classe(obrigatório)
require 'PHPMailerAutoload.php';

//cria um objeto de instância(obrigatório)
$mail = new PHPMailer;

//esta linha é só para debug, pode retirar se quiser.
//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Define que a classe usará o SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';  // Especifica o endereço principal e backup do SMTP
$mail->SMTPAuth = true;                               // Habilita a autenticação do SMTP
$mail->Username = 'user@example.com';                 // SMTP usuário (pode ser o seu email do gmail)
$mail->Password = 'secret';                           // SMTP senha (pode ser a sua senha do gmail)
$mail->SMTPSecure = 'tls';                            // Habilita a criptografia SSL ou TLS (o gmail usa tls)
$mail->Port = 587;                                    // Porta TCP para conectar não precisa mexer nele

$mail->setFrom('from@example.com', 'Mailer');         // Quem está enviando o e-mail, no caso você
$mail->addAddress('joe@example.net', 'Joe User');     // Adiciona qual e-mail receberá o seu e-mail
$mail->addAddress('ellen@example.com');               // O nome é opicional

$mail->isHTML(true);                                  // Define o email no formato HTML

$mail->Subject = 'Aqui é o título do e-mail'; 
$mail->Body    = 'Esta é a mensagem em HTML <b>Em negrito!</b>';
$mail->AltBody = 'Este é o corpo do email em texto, caso o navegador não suporte o HTML em e-mail';

if(!$mail->send()) {
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'A mensagem foi enviada';
}

 

 

Basicamente é bem simples o uso da classe. Basta você compreender que você instancia um objeto da classe e nesse objeto você chama as funções!

Eu traduzi os comentários ao lado de cada linha para que você entenda o que são.

Se ainda, está incompreensível para você, vamos mais uma explicação.

 

No paradigma orientada a objetos, é necessário que criemos um objeto de instância. 

O que vem a ser um objeto de instância? é uma variável criada para receber uma nova chamada da classe.

Por exemplo:

Vamos supor que temos uma classe Pessoa  e dentro dessa classe, possui a função andar() e parar().

 

Para instanciar um objeto da classe pessoa, fazemos:

 

$fulano  =  new Pessoa();

 

Desta forma, estamos instanciando um objeto da classe pessoal que é o $fulano.

Com isso,  podemos chamar nossas funções através do símbolo de atribuição ->  

Sim, é o traço  -  seguido do sinal maior  >  

$fulano = new Pessoa();

$fulano->andar();
$fulano->parar();

Para utilizar o phpmailer, basta você entender esta parte de instanciar objetos e chamar funções!

 

Dicas,  No seu arquivo php que recebe os dados do formulário, não utilize as tags do html.  Deixe apenas o php, nada mais.

 

Voltando ao código,  não costumo fazer isso, mas dessa vez vou abrir uma exceção e postar como ficaria seu código com o phpmailer + o formulário de envio.

 

HTML do formulário:

 

<form method="post" action="envia_email.php">
   <input type="text" name="nome" />
   <input type="text" name="telefone" />
   <input type="text" name="email" />
   <textarea name="mensagem"></textarea>
   <input type="reset" value="Reset">
   <input type="submit" value="Enviar">
</form> 

PS: deixei bem simples, no formulário não precisa de tabelas.. use a técnica tableless.

 

No PHP:

<?php

$nome     = $_POST["nome"];
$telefone = $_POST["telefone"];
$email    = $_POST["email"];
$msg      = $_POST["mensagem"];

require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                               
$mail->Username = 'seuemail@gmail.com';                 
$mail->Password = 'suasenha do gmail';                          
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                  

$mail->setFrom('seusite@seusite.com.br', 'Admin do site');         
$mail->addAddress($email, $nome);     

$mail->isHTML(true);                                  


$corpo = "
          <h1>Orçamentos</h1> <br/> 
          O cliente $nome que possui o e-mail: $email
          Pede o orçamento: <br/>
          $msg 
         ";


$mail->Subject = 'Pedido de orçamento'; 
$mail->Body    = $corpo;

if(!$mail->send()) {
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'A mensagem foi enviada';
}

Como você pode ver,  o arquivo envia_email.php é responsável por receber os dados do formulário, carregar a classe do phpmailer e chamar suas funções.

 

Se quiser, podes ir ainda mais além e criar sua própria função de envio com a classe. Foi o que eu fiz. eu criei uma função que usa parâmetros assim não preciso ficar colocando aquele código todo , bastando chamar a função de envio.. por exemplo:

 

Arquivo funcao_php_enviar.php

function enviaEmail($destinatario, $nome, $msg){

$mail = new PHPMailer;

$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                               
$mail->Username = 'seuemail@gmail.com';                 
$mail->Password = 'suasenha do gmail';                          
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                  

$mail->setFrom('seusite@seusite.com.br', 'Admin do site');         
$mail->addAddress($email, $nome);     

$mail->isHTML(true);                                  


$corpo = "
          <h1>Orçamentos</h1> <br/> 
          O cliente $nome que possui o e-mail: $email
          Pede o orçamento: <br/>
          $msg 
         ";


$mail->Subject = 'Pedido de orçamento'; 
$mail->Body    = $corpo;

if(!$mail->send()) :
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
 else :
    echo 'A mensagem foi enviada';
 endif;

}

Desta forma você chama o arquivo da função no php!

<?php

$nome     = $_POST["nome"];
$telefone = $_POST["telefone"];
$email    = $_POST["email"];
$msg      = $_POST["mensagem"];

require 'PHPMailerAutoload.php';
include 'funcao_php_enviar.php';


enviaEmail($email, $nome, $msg);

?>

Mais explicado do que isso, acho que eu não consigo escrever..  rsrs

Bons estudos.

 

PS: seja firme!  E aprenda a usar a classe, você não vai se arrepender.

Postado

Acho que entendi. Amanhã de manhã dou uma mexida melhor pra ver se sanei todas as duvidas. Mas vou deixar algumas perguntas fora do código por enquanto:

 

1 - Você disse que são 4 arquivos mas só chamo um. Então não preciso colocar os outros na index do meu projeto ou também preciso colocar esses arquivos para que não dê erro?

 

2 - Se eu não usar tabela, como o usuário identificaria os campos? Além disso, eles não ficariam um do lado do outro? Essa organização teria que ser por css?

  • Moderador
Postado

@rsm_rlb

  Em 10/05/2017 às 03:04, rsm_rlb disse:

1 - Você disse que são 4 arquivos mas só chamo um. Então não preciso colocar os outros na index do meu projeto ou também preciso colocar esses arquivos para que não dê erro?

Expandir  

Exatamente.  São 4 arquivos,  mas você só precisa chamar dentro do index  um deles. o resto pode deixar dentro do diretório.

 

O arquivo que você precisa chamar é o PHPMailerAutoload.php , basta usar um require nele.

desta forma:  require 'PHPMailerAutoload.php';

Este arquivo se encarrega de procurar automaticamente o arquivo de classe necessário para funcionar.

 

  Em 10/05/2017 às 03:04, rsm_rlb disse:

2 - Se eu não usar tabela, como o usuário identificaria os campos? Além disso, eles não ficariam um do lado do outro? Essa organização teria que ser por css?

Expandir  

Sim. A técnica Tableless consiste em não utilizar tabelas para estruturar o site, formulários e etc.  Use elementos <div> para criar a estrutura e manipular as posições com o CSS.

 

Por exemplo: https://jsfiddle.net/94yvsk97/

Existe centenas de formas de você estruturar seu formulário.  seja com Fieldsets, divs..

Dica, na estética atual dos sites, use o placeholder para substituir o nome dos campos do lado que ocupa espaço.

 

Dê preferência se for colocar o nome fora do campo, deixe acima do elemento ou senão use um placeholder:

exemplo: https://jsfiddle.net/94yvsk97/1/

 

Viu a diferença de usar o placeholder?! :thumbsup:

 

Outra dica legal é você usar frameworks prontos de estilos.. como o bootstrap. Com ele você pode facilmente  desenvolver um formulário de envio de e-mail, login e outras coisas com as class  já prontas e estilizadas, bastando saber em quais elementos empregar!

 

Postado

Bem, estou conseguindo entender melhor. Mas vamos a mais algumas dúvidas só pra confirmar:

 

1 - Se eu só puxo o PHPMailer, os outros ainda preciso ter os outros 3?

  Em 10/05/2017 às 02:31, DiF disse:

PHPMailerAutoload.php

class.phpmailer.php

class.smtp.php

 class.pop3.php

Expandir  

 

2 - Se eu quiser colocar essas classes dentro de uma pasta para manter meu index organizado, só preciso alterar o caminho aqui?

require 'PHPMailerAutoload.php';

3 -  Realmente preciso colocar a senha do email?

$mail->Password = 'suasenha do gmail';  

4 - Se eu quiser adicionar um novo campo só preciso adicioná-lo aqui?

$nome     = $_POST["nome"];
$telefone = $_POST["telefone"];
$email    = $_POST["email"];
$msg      = $_POST["mensagem"];

Então ficaria algo como 

$facebook = $_post["facebook"];

Isso estaria correto ou eu precisaria incluir algo mais?

 

5 - Tava lendo a descrição e pesquisando os códigos separados. Ai resolvi testar o seu código primeiro antes de começar a ver se consigo fazer o meu, para ter em que me espelhar caso de algum erro. O que alterei foi apenas isso:

 

$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                               
$mail->Username = XXXXXXXXX@gmail.com';                 
$mail->Password = 'xxx';                          
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                  

$mail->setFrom('XXXXXXX@hotmail.com', 'Renan Martins');         
$mail->addAddress($email, $nome);  

Só que na hora de mandar executar tá dando erro. Aparece essa mensagem:

 

A mensagem não pôde ser enviada.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

  • Moderador
Postado

@rsm_rlb  Vamos  lá.....

 

  Em 10/05/2017 às 15:10, rsm_rlb disse:

 

1 - Se eu só puxo o PHPMailer, os outros ainda preciso ter os outros 3?

  Em 10/05/2017 às 02:31, DiF disse:

PHPMailerAutoload.php

class.phpmailer.php

class.smtp.php

 class.pop3.php

Expandir  

 

Expandir  

Sim, os outros 3 são obrigatórios.  Como eu disse lá em cima.  você DEVE ter todos os 4 arquivos dentro da pasta que você criar ou deixar com o nome do phpmailer quando se extrai do rar ou zip.

MAS, quem você vai chamar no seu index é apenas 1 que é o PHPMailerAutoload.php. Este é encarregado de carregar os outros 3 arquivos quando necessário.  Então se você obteve o erro de falha ao conectar ao SMTP pode ser que você não tenha colocado o arquivo de classe  SMTP junto deles.   O arquivo de classe class.phpmailer.php  é para o envio do e-mail,   o arquivo de classe class.smtp.php é para fazer a conexão com o servidor SMTP( no caso o do Gmail) e o arquivo de classe  class.pop3.php é usado para fazer a autenticação. ( não me recordo se é necessário ou não, por via das dúvidas deixe junto com eles na mesma pasta.

 

  Em 10/05/2017 às 15:10, rsm_rlb disse:

2 - Se eu quiser colocar essas classes dentro de uma pasta para manter meu index organizado, só preciso alterar o caminho aqui?

require 'PHPMailerAutoload.php';
Expandir  

De preferência.  Quando você extrai o conteúdo do rar, ele já cria uma pasta com o nome do arquivo. Ou crie uma pasta e coloque os arquivos ali dentro.

Quanto ao require,  sim você deve adaptar sempre o caminho.  Do jeito que está, ele estaria puxando o PHPMailerAutoload.php da raiz do servidor.  Por isso se criar uma pasta tem que ficar assim:

require 'sua_pasta/PHPMailerAutoload.php';

 

  Em 10/05/2017 às 15:10, rsm_rlb disse:

4 - Se eu quiser adicionar um novo campo só preciso adicioná-lo aqui?

$nome     = $_POST["nome"];
$telefone = $_POST["telefone"];
$email    = $_POST["email"];
$msg      = $_POST["mensagem"];
Expandir  

Como todo e qualquer php.  você pode adicionar em qualquer lugar antes da parte do envio de e-mail, mas é sempre bom manter a organização e agrupar tudo em um lugar só.

 

  Em 10/05/2017 às 15:10, rsm_rlb disse:

Então ficaria algo como 

$facebook = $_post["facebook"];
Expandir  

Sim, se você tiver um campo no seu formulário que tenha name="facebook"

e o $_POST tem que ser em maiúsculo:  

$_post "errado" | $_POST "certo"

 

  Em 10/05/2017 às 15:10, rsm_rlb disse:

3 -  Realmente preciso colocar a senha do email?

$mail->Password = 'suasenha do gmail';  
Expandir  

Se você está usando o gmail como autenticador, sim você precisa colocar a sua senha do seu e-mail, ou a senha do e-mail que estiver usando.. você pode criar um novo gmail só para isso, sem usar o seu pessoal.

 

Espero que agora tenha ficado mais claro, pois não saberia explicar mais do que isso. eu expliquei passo a passo.

Postado

Não sei o que tá acontecendo. Fica dando o erro "A mensagem não pôde ser enviada.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting" tanto no servidor quanto no localhost. 

 

81wzbLc.png

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
</head>
<body>

<?php

$nome     = $_POST["nome"];
$telefone = $_POST["telefone"];
$email    = $_POST["email"];
$msg      = $_POST["mensagem"];

require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                               
$mail->Username = 'xxxxx@gmail.com';                 
$mail->Password = '**********';                          
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                  

$mail->setFrom('xxxxxx@hotmail.com', 'Renan Martins');         
$mail->addAddress($email, $nome);     

$mail->isHTML(true);                                  


$corpo = "
          <h1>Orçamentos</h1> <br/> 
          O cliente $nome que possui o e-mail: $email
          Pede o orçamento: <br/>
          $msg 
         ";


$mail->Subject = 'Pedido de orçamento'; 
$mail->Body    = $corpo;

if(!$mail->send()) {
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'A mensagem foi enviada';
}
?>
</body>
</html>

Não faço ideia do que tá acontecendo. Já chequei, tá os quatro arquivos na pasta. Inclusive quando eu baixei veio com um erro que eu corrigi. Será que é isso? Basicamente não tinha o "?>" fechando o PHP em nenhum dos 4 arquivos. 

 

Confesso que to estressado e frustrado com isso já. 

  • Moderador
Postado

@rsm_rlb Entendo que seja estressante, acredite, já passei por isso.

Mas o que prevalece é a perseverança em continuar!

 

A falta  do  ?> no final,  não é um erro. Apenas ele foi omitido, para que quando houver algum problema no código, ele não executa, mostrando um erro, ou  aparece aquele outro famoso erro chamado "Headers already sent

 

Faz parte das boas práticas da programação  omitir isso. Recomendo sempre que possível.

Sobre seu código, a princípio, não vi nada de errado. Mas tenho algumas observações a fazer.

 

Quando você requere o arquivo de autoload,  ali no código ele está chamando na raiz do seu servidor. Se ele estiver dentro de uma pasta, deve conter o caminho exato, ou deixar todos os 4 arquivos soltos na raiz.

 

Então:

Deixe assim:

/ (raiz)
|
|-PHPmailer
|     |-PHPMailerAutoload.php
|     |-class.phpmailer.php
|     |-class.smtp.php
|     |-class.pop3.php
|
|-index.php

Então na chamada você  faz:

 

require 'PHPmailer/PHPMailerAutoload.php';

Para saber se está tudo certo, na sua IDE precisa aparecer como link. Pelo menos no Eclipse for PHP(oxygen)  quando você põe o caminho certo, ele automaticamente cria um link que se clicar ele te mostra o arquivo.. assim sabemos que o caminho está correto.

 

Um dos erros pode ter sido porque você estava chamando errado o auto load.

 

Mas, pode ser que o problema seja de autenticação. Tente ver se a causa do problema é  a opção IMAP do gmail desabilitada(na sua conta mesmo)

 

Pode ser também algum bug, de versão. Faz tempo que não mexia com o phpmailer.  

Sempre que usei, funcionava bem. 

Em localhost,  para testar, use o EasyPHP. Que é um conjunto de servidor php e mysql mais usado para testar sites em localhost.

Nele, não esqueça de editar o php.ini  e descomentar a linha de extension  para openssl.

 

Não posso testar para você, mas recomendo que busque mais informações específicas sobre o phpmailer e gmail.

 

 

 

Postado

@DiF Consegui resolver. Parece que o problema era o servidor afinal. Depois que instalei o Easy PHP ele começou a rodar bem e disparou o email. Só mais uma pergunta... Duas na verdade:

 

1 - Este código redireciona pra uma página escrito "A mensagem foi enviada"

 

if(!$mail->send()) {
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'A mensagem foi enviada';
}

Eu quero colocar o script para dar um "pop up" apresentando só a mensagem. Testando aqui este funciona

echo "<script type=\"text/javascript\"> alert (\"Sua mensagem foi enviada com sucesso.\");history.go(-1); </script>\n";

A pergunta é, ele me dá a mensagem de confirmação, mas continua tudo digitado nos campos. Como faço pra dar um "refresh" na página pra não ficar mais nada digitado?

 

e 2 - Percebi que acentos e cedilha estão vindo bugados. Sabe como corrijo?

 

o9NHea2.png?1

  • Moderador
Postado

@rsm_rlb Beleza, que bom que conseguiu resolver o problema. 

 

  Em 11/05/2017 às 04:40, rsm_rlb disse:

1 - Este código redireciona pra uma página escrito "A mensagem foi enviada"

 

if(!$mail->send()) {
    echo 'A mensagem não pôde ser enviada.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'A mensagem foi enviada';
}
Expandir  

Na verdade ele não redireciona. Apenas apresenta a mensagem na mesma tela já que esse arquivo de envio é todo em php sem o html e estilos.

 

  Em 11/05/2017 às 04:40, rsm_rlb disse:

Eu quero colocar o script para dar um "pop up" apresentando só a mensagem. Testando aqui este funciona

Expandir  

Para fazer isso, é  necessário que use a técnica "ajax" do javascript. Felizmente o jQuery tem funções específicas para este tipo de aplicação.

 

Como por exemplo $.ajax().

 

Não vou entrar em detalhes aqui neste tópico pois ficaria muito extenso, mas se você quiser pode abrir um novo sobre como submeter um formulário via ajax ccom jQuery.:thumbsup:

 

Sobre a acentuação...  sempre são problemas rsrs. Tente usar o utf8_decode() , se não funcionar testa com utf8_encode().

 

Esta função converte para de UTF-8 para ISO-8859-1, já a  utf8_encode, converte  ISO-8859-1 para UTF-8

adicionado 22 minutos depois

Exemplo:

$corpo = " <h1>Orçamentos</h1> <br/> O cliente ". utf8_encode($nome) . 
            " que possui o e-mail: $email Pede o orçamento: <br/>" . 
            utf8_encode($msg);

Desta forma, você pode separar os textos estáticos e concatenar com a variável que usa a função do utf8_encode() ou decode()

Não coloquei no e-mail porque geralmente em endereços de e-mail não são permitidos caracteres especiais.

Postado

@DiF tá meio estranho aqui uma coisa que eu percebi, ele tá mandando o email para o email digitado no campo "email" por algum motivo. Tava indo certo porque eu tava usando o email hotmail. Mas quando eu botei um outro email, a mensagem foi para o email digitado, não o que indiquei no código. 

 

Edit: Faltou só o assunto:

 

Assim o código fica zoado: "Pedido de orçamento"

$mail->Subject = 'Pedido de orçamento'; 
$mail->Body    = $corpo;

 

Dessas duas formas fica zoado. Tem outro jeito?

$mail->Subject = '.utf8_decode.(Pedido de orçamento)'; 
$mail->Body    = $corpo;

$mail->Subject = .utf8_decode.('Pedido de orçamento'); 
$mail->Body    = $corpo;

 

 

P.S. Desculpa ficar incomodando tanto assim haha

  • Moderador
Postado
  Em 11/05/2017 às 17:29, rsm_rlb disse:

ele tá mandando o email para o email digitado no campo "email" por algum motivo.

Expandir  

Agora que percebi...   no adress você tem que indicar o e-mail na qual vai mandar! Foi falha minha.

 

$mail->setFrom('xxxxxx@hotmail.com', 'Renan Martins');         
$mail->addAddress($email, $nome);     

Troque por:

$mail->setFrom('xxxxxx@hotmail.com', 'Renan Martins');         
$mail->addAddress('E-mail que vai receber os dados que usuário escreveu');     

Do jeito que está, ele vai enviar para o e-mail do usuário! rsrsrs foi falha minha!

 

Sobre os caracteres, veja esse exemplo: http://utf8_decode.onlinephpfunctions.com/

 

Na verdade, não sei se a função funciona com string direto, acho que ela precisa de uma variável.

 

Tenta assim:

 

$subject = "Pedido de Orçamento";


$mail->Subject = utf8_decode($subject); 
$mail->Body    = $corpo;

Até porque ali o uso do utf8_decode está errado.

Ela é uma função.   então utf8_decode.()  está errado. tem um ponto entre o decode e o ()

 

Partes da função você não concatena. Mas sim as funções com texto ou outras funções.

Já experimentou usar o utf8_encode()?  

  • Curtir 1
Postado

@DiF Já tentei. O decode funcionou no código, o encode não. 

 

Mas agradeço, dessa forma que me explicou está tudo funcionando. Se surgir alguma outra dúvida eu volto. Muito obrigado amigo. 

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!