Post com a tag phpmailer com cakephp

Enviando multiplos emails com o PHPmailer

0

Neste artigo vou mostrar como enviar multiplos emails com o PHPmailer adaptado ao CakePHP.
Senti a necessidade em usar este tipo de envio, pois o component do cake que trabalha como PHPmailer não tem este recurso, por tanto, teremos que fazer pequenas mudanças no component.
Se você não viu o artigo que fala como usar o PHPmailer no CakePHP, clique aqui.

Vamos lá!

No component Email, basta substituir a linha que contem $mail->AddAddress($this->to, $this->toName ); por este conjunto de código abaixo:

if(is_array($this->to))
{
foreach($this->to as $item)
{
$mail->AddAddress($item['Email']['to'],$item['Email']['name']);
}
}
else
{
$mail->AddAddress($this->to, $this->toName );
}

No código acima está a mágica em enviar multiplos emails com o PHPmailer.

Este script faz o seguinte:
Ele verifica se a variavel $this->to é um array, se for, ela ler todo o array atravez do foreach e alimenta a função AddAddress, caso a variavel $this->to não seja um array, o script age normalmente, como antes. Ou seja, esta mudança no código não vai fazer a diferença alguma em outras aplicações suas que não utilizam envio de multiplos emails com o PHPmailer.

Feito!
Agora vamos trabalhar no controller.
Onde seria $this->Email->to, será um array, veja o exemplo abaixo:

$email['Email']['to'] = ‘webrenanlima@gmail.com’;
$email['Email']['name'] = “Renan Lima”;

Para gerar diversos emails dentro de um loop, basta seguir o exemplo abaixo:

$result = $this->Usuario->findAll();

$i=0;
foreach($result['CoorporativoUsuario'] as $item)
{
$email[]['Email']['to'] = ‘webrenanlima@gmail.com’;

$email[]['Email']['name'] = “Renan Lima”;
$i++;
}

Se você quiser enviar um email para uma única pessoa, basta usar o método tradicional: $this->Email->to.

Para você que não viu o tutorial que explica como usar o PHPmailer com o cakephp, veja aqui na matéria anterior: PHPmailer com CakePHP.

PHPmailer com CakePHP

5

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.

Go to Top