Back-End

23 jun, 2008

Envio de e-mail com CakePHP

Publicidade

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
<div>

<?php echo $form->create(´Contact´, array(´url´ => ´/contacts´)); ?>
<?php
echo $form->input(´primeiroNome´);
echo $form->input(´sobreNome´);
echo $form->input(´email´);
echo $form->input(´msg´, array(´type´ => ´textarea´));
?>
<?php echo $form->end(__(´submit´, true)); ?>

</div

Acima, 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
<?php
class Contact extends AppModel
{
var $name = ´Contact´;
var $useTable = false;
}
?>

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
<?php
class ContactsController extends AppController {

var $name = ´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/contact.ctp
$this->Email->template = ´contact´;

// set view variables as normal
$this->set(´from´, $name);
$this->set(´msg´, $msg);

$this->Email->to = ´ seuemail@seusite.com.brEste e-mail está sendo protegido dos spam bots, você precisa ter o JavaScript habilitado para vê-lo ´;
$this->Email->subject = $subject;
$this->Email->replyTo = ´ naoresponda@seusite.com.brEste 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(´/´);
}
}

}
?>

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.