Neste post veremos como usar o já consagrado PHPmailer com o outro consagrado(rs) chamado CakePHP.

1. Baixe o PHPmailer neste link: PHPmailer

2. No CakePHP, crie uma pasta chamada ‘phpmailer’ dentro de ‘app/vendors’, ficando desta forma: app/vendors/phpmailer. Agora coloque dentro desta pasta os arquivos ‘class.phpmailer.php’ e ‘class.smtp.php’.

3. Crie um component chamado ‘Email’, ficando neste caminho: app/controllers/components/email.php.

4. Dentro do arquivo email.php, coloque o código que está dentro deste arquivo: Ver código de email.php

OBS: No arquivo email.php, eu fiz umas modificações e isso fica a critério seu.
Eu comentei as seguintes linhas:

//var $smtpUserName = ”; // SMTP username
//var $smtpPassword = ”; // SMTP password

OBS 2: A porta a ser usada normalmente é 25 mesmo.

5. No controller você deve invocar o component criado no passo anterior da seguinte forma: var $components = array(‘Email’);

Script de envio para ser usado no controller e dentro de um método é claro:

$this->Email->template = ‘email/confirm’; // Template a ser usado no envio

$this->set(‘data’, $data); // Conteúdo dinamico a ser passado para o template (opcional)
$this->Email->to = ‘webrenanlima@gmail.com’; // Destinatário
$this->Email->subject = ‘Seu assunto’; // Assunto do email

$this->Email->attach($fully_qualified_filename, optionally $new_name_when_attached);
// Para enviar arquivos em anexo (opcional)

$result = $this->Email->send(); // necessário para enviar os emails

Na prática
Vou explicar aqui como funciona o PHPmailer com CakePHP na prática.

Você deverá criar dois arquivos(template) para o email, um com o conteúdo em HTML e outro somente com texto.

Como no script acima você informou que o template a ser usado será “email/confirm”, isso quer dizer que existirá dois arquivos dentro neste caminho: ‘view/email/’, um chamado ‘confirm_html.thtml’ e outro como ‘confirm_text.thtml’.

A lógica é simples, o valor do template é email(pasta)/nome_do_arquivo, não é preciso informar o nome completo( ex: confirm_html.thtml). Ok?

Não é obrigatório você criar os templates dentro da pasta ‘email’, eu mesmo coloco os templates dentro da pasta da view de seu controller.

Mas simples que usar o PHPmailer sem o cakePHP. rs
Além de ficar mais organizado (como tudo no cakePHP).

Artigo baseado em http://bakery.cakephp.org/articles/view/sending-email-with-phpmailer

Dica do Fábio

Na linha 73, troque aquele metodo “vendor” que foi descontiuado na versão 1.2 por:

App::import(‘Vendor’, ‘phpmailer’, array(‘file’ => ‘phpmailer’.DS.’class.phpmailer.php’));

Veja também como enviar multiplos emails com o PHPmailer.