Oi pessoal. Hoje apresentarei a vocês como utilizar o componente nativo do CakePHP para envio de e-mails. No caso deste artigo, para um formulário de contato.
Lembrando que este é um componente nativo do CakePHP 1.2.
Inicialmente, vamos criar nosso formulário com ajuda do helper Form do CakePHP.
// app/views/contacts/index.ctp<br /><div><br /><br /><?php echo $form->create(´Contact´, array(´url´ => ´/contacts´)); ?><br /><?php<br /> echo $form->input(´primeiroNome´);<br /> echo $form->input(´sobreNome´);<br /> echo $form->input(´email´);<br /> echo $form->input(´msg´, array(´type´ => ´textarea´));<br />?><br /><?php echo $form->end(__(´submit´, true)); ?><br /><br /></divAcima, temos um formulário de contato básico. Crie uma pasta de nome contacts dentro da pasta app/view
Ex. (/app/view/contacts) e salve este arquivo como index.ctp.
Agora vamos criar nosso modelo:
// app/models/contact.php<br /><?php<br />class Contact extends AppModel<br />{<br /> var $name = ´Contact´;<br /> var $useTable = false;<br />}<br />?>Nosso modelo será bem simples, sem validação. Mas isto não impede de vocês inserirem validações nos campos, utiliizando componentes de segurança, etc.
Esta variável $useTable que usei acima, é para falar ao CakePHP que este modelo não trabalhará com nenhuma tabela, por isto o valor está especificado como false.
Vamos agora ao nosso controller:
// app/controllers/contacts_controller.php<br /><?php<br />class ContactsController extends AppController {<br /><br /> var $name = ´Contacts´;<br /> var $uses = ´´;<br /> var $components = array(´Email´);<br /><br /> function index()<br /> {<br /> if(isset($this->data))<br /> {<br /> $name = $this->data[´Contact´][´primeiroNome´] . ´ ´ . $this->data[´Contact´][´sobreNome´];<br /> $from = $this->data[´Contact´][´email´];<br /> $subject = ´Contato do Site´;<br /> $msg = $this->data[´Contact´][´msg´];<br /><br /> $this->Email->sendAs = ´both´; // html, text, both<br /> $this->set(´conteudo´, $msg); // especifica variavel da mensagem para o template<br /> $this->Email->layout = ´contact´; // views/elements/email/html/contact.ctp<br /> $this->Email->template = ´contact´;<br /><br /> // set view variables as normal<br /> $this->set(´from´, $name);<br /> $this->set(´msg´, $msg);<br /><br /> $this->Email->to = ´ seuemail@seusite.com.brEste e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ´;<br /> $this->Email->subject = $subject;<br /> $this->Email->replyTo = ´ naoresponda@seusite.com.brEste e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ´;<br /> $this->Email->from = $name . ´<´ . $from .´>´;<br /><br /> if ( $this->Email->send($msg) ) {<br /> $this->Session->setFlash(´E-mail enviado´);<br /> } else {<br /> $this->Session->setFlash(´E-mail nao enviado´);<br /> }<br /> $this->redirect(´/´);<br /> }<br /> }<br /><br />}<br />?>Seguem agora algumas explicações sobre nosso controle:
$this->Email->sendAs = ´both´;
Esta parte serve para configurarmos como será enviado o e-mail. Se terá formato html, texto ou ambos(both)
$this->Email->layout = ´contact´;
Nesta parte informamos ao componente Email qual será o layout utilizado neste envio.
Lembrando que o layout deverá ser salvo dentro da pasta
/app/view/elements/email/html/contact.ctp e /app/view/elements/email/text/contact.ctp
respectivamente, para os layouts dos e-mails texto ou html.
Bom, espero que este artigo ajude vocês a inserir em seus sites/projetos os formulários de contato, sem que haja a necessidade de utilizar algum script externo (phpMailer, SwiftMailer, etc), para um simples formulário de contato.
Abraços e até o próximo artigo.







