Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal. Vou diretamente ao assunto... Possuo um site feito com cakePHP (não foi eu quem fiz, mas digamos que fui deixado na mão). O site possui uma página de contato com um formulário, no qual ele puxa da o valor dos campos informados em um formulário na home page, até ai tudo bem funciona tranquilamente, porem ele não envia os dados para o e-mail.. Não envia dados nenhum, o formulário simplesmente não chega para o e-mail que recebe. Pior é que não sei nada de cakePHP, não sei se utiliza painel, nada.. Poderiam me ajudar?
controllers/contacts_controller.php
// app/controllers/contacts_controller.php
<?php
class ContactsController extends AppController {
var $name = 'br/Contacts';
var $uses = '';
var $components = array('Email');
function index()
{
if(isset($this->data))
{
$name = $this->data['Contact']['primeiroNome'] . '' . $this->data['Contact']['sobreNome'];
$from = $this->data['Contact']['email'];
$subject = 'Contato do Site';
$msg = $this->data['Contact']['msg'];
$this->Email->sendAs = 'both'; // html, text, both
$this->set('conteudo', $msg); // especifica variavel da mensagem para o template
$this->Email->layout = 'Contact"; // views/elements/email/html/default.ctp
$this->Email->template = 'Contact";
// set view variables as normal
$this->set('from', $name);
$this->set('msg', $msg);
$this->Email->to = ' email@provedor.com.br Este e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ';
$this->Email->subject = $subject;
$this->Email->replyTo = ' email@provedor.com.br Este e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ';
$this->Email->from = $name . '<' . $from .'>';
if ( $this->Email->send($msg) ) {
$this->Session->setFlash('E-mail enviado');
} else {
$this->Session->setFlash('E-mail nao enviado');
}
$this->redirect('/');
}
}
}
?>
views/br/contato.ctp
<p>
<?php
echo 'De: '.$contato['nome'];
echo 'Email: '.$contato['email'].'<br/>';
echo 'Tel.: '.$contato['telefone'].'<br/>';
?>
</p>
<p>
<?php
echo 'Mensagem: '.$contato['mensagem'].'<br/>'; // Essas informações são puxadas da home page
echo 'Entrada: '.$contato['dataentrada'];
echo ' Saída: '.$contato['datasaida'].'<br/>';
echo 'Hóspedes: '.$contato['numadultos'].' adultos, e '.$contato['numcriancas'].' crianças.';
?>
</p>
controllers/br_controller.php
<?php
class BrController extends AppController {
var $name = 'Br';
var $uses = array();
var $helpers = array('Html', 'Javascript');
var $components = array('Email');
function index(){
$this->layout = 'default_br';
$this->set('title_for_layout', 'Bem-vindo');
//$this->redirect('/');
}
function contatos(){
$this->layout = 'clean_br';
$this->set('title_for_layout', 'Contatos');
if($this->data & $this->data['etapa'] != 1){
$contato = $this->data;
//print_r($contato);
$this->set('contato', $contato);
$this->Email->to = 'email@provedor.com.br';
$this->Email->cc = 'email@provedor.com.br';
$this->Email->subject = 'Contato';
$this->Email->from = 'email@provedor.com.br';
$this->Email->template = 'contato';
$this->Email->sendAs = 'html';
if($this->Email->send()){
$this->set('mensagem', '<div class="sucesso"><h2>Obrigado pelo seu contato, '.$contato['nome']
.'<br/>Em breve responderemos a sua mensagem.</h2></div>');
}else{
$this->set('<div class="erro"><h2>mensagem', 'Desculpe, '.$contato['nome'].', houve uma pequena falha
em nosso sistema que impediu o envio de sua mensagem. Pedimos que tente novamente dentro
de alguns minutos.</h2></div>');
}
}
}
?>
controller/contatos_controller
<?php
class ContatosController extends AppController {
var $name = 'Contatos';
var $uses = array();
var $helpers = array('Javascript');
function index(){
$this->layout = 'clean';
}
}
?>
modulos/contato.php
<?php
class contatos extends AppModel
{
var $name = 'contatos';
var $useTable = true;
}
?>
Eu acho, não tenho certeza, que esses são os arquivos, qualquer coisa vocês que tem o conhecimento, me informem que eu procuro.
Grato desde já.
Hahaha complicado brother, ainda mais que não manjo nada de cake e não foi eu quem fez o form. Mas olha só como conseguir resolver, foi mais pela noção de PHP mesmo do que por saber de cake que por sinal é uma vergonha para mim,
// Arquivo br_controller.php
$headers = "MIME-Version: 1.1\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: Web Site <email@provedor.com.br>\n";
$headers .= "Reply-To: email@provedor.com.br\n";
$headers .= "Return-Path: email@provedor.com.br\n"; // return-path
$destinatario = 'email@provedor.com.br';
$assunto = 'Web Site - Contato';
$body = '<html><body>';
$body .= '<h2>Um visitante entrou em contato:</h2>';
$body.='<p>Nome: '.$contato['nome'];
$body.='<br>Email: '.$contato['email'];
$body.='<br>Telefone: '.$contato['telefone'];
$body.='<br>Mensagem: '.$contato['mensagem'];
$body.='</p><h3>Informações extras</h3><p>';
$body.='<br>Data Entrada: '.$contato['dataentrada'];
$body.='<br>Data Saída: '.$contato['datasaida'];
$body.='<br>Adultos: '.$contato['numadultos'];
$body.='<br>Crianças: '.$contato['numcriancas'].'</p>';
$body.='</body></html>';
Tava faltando os headers para funcionar no servidor que o site está :/ sueu, mas consegui hehehe.
Obrigado pela disposição na ajuda amigo.
Abraço.
Nossa senhora, ta biito o codigo em! rsrs
Vamos lá,
o Cakephp trabalha em MVC, então acho que eu to vendo muitos Controllers para apenas uma pagina.
Vamos ficar com o controller ContactsController
Model Contact / contact.php
class Contact extends AppModel{
/*
* @public
*/
var $name = "Contact";
/*
* Este model utiliza uma tabela no banco?
* @string com nome da tabela ou false para nao usar tabela
* @public
*/
var $useTable = false; #não utilizaremos tabela pois os dados seram enviados por e-mail
/*
* Se preferir tambem pode colocar a validação dos campos do form
* http://book.cakephp.org/view/1143/Data-Validation
*/
}
ContactsController / contacts_controller.php
/*
* Classe responsavel pela pagina de contato do site
*/
class ContactsController extends AppController{
/*
* @public
*/
var $name = "Contacts";
/*
* Os modelos que serão usados pelo controller
* @mixed
* @public
*/
var $uses = array('Contact');
/*
* Componentes que seram usados pelo controller
* E-mail: responsavel por enviar e-mails
* @mixed
* @public
*/
var $components = array('E-mail');
/*
* Function Index
* Metodo que será chamado caso a url /contacts seja chamada
* Exibe form de contato ou envia envia e-mail com dados do contato
* @public
*/
Agora é necessario criar o layout para o e-mail, a estrutura de pastas e arquivo é essa apatir da pasta Layout
email/
html/
default.ctp
text/
default.ctp
No arquivo text/default.ctp coloque o conteudo
No arquivo
html/default.ctp
coloque o conteudo
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Agora criaremos o template da mensagem o que recebera os dados do formulário
- Na pasta /views/elements/email/text e /html crie um arquivo contact.ctp com o conteudo
Pronto acho agora, teste e veja oq está indo, se pelo menos a view que o kra criou estiver correta acho que ira funcionar e ira enviar um Dump com os dados de contato, apatir da ai é só formatar o template e o layout como queira.
Qualquer erro de digitação me avisem, nao sou acostumado a escrever codigo para posts!
[]s