Enviando e-mail autenticado com Email Component no CakePHP

Vou apresentar agora um dica bastante útil para quem usa o cakePHP e precisa enviar e-mails autenticados.

Mas para que servem os e-mails autenticados?

O principal motivo para que você use esta forma de envio é evitar o grande problema de SPAM. Quando você faz um envio autenticado, quer dizer que está usando realmente seu login e senha autênticos. Sendo assim, você confirma que você é realmente proprietário daquele envio.

Mãos à obra!

Considero que você já tenha pleno domínio sobre o cakePHP, caso contrário, sugiro estudar um pouco mais :).

1. Renomeie o arquivo email.php.default para email.php localizado em /app/Config/

2. Abra este arquivo. Perceba que dentro dele exite uma classe chamada EmailConfig e vários atributos para uso. Ele deve está mais ou menos assim:

 

class EmailConfig {
    public $default = array(
        'transport' => 'Mail',
        'from' => 'you@localhost',
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

    public $smtp = array(
        'transport' => 'Smtp',
        'from' => array('site@localhost' => 'My Site'),
        'host' => 'localhost',
        'port' => 25,
        'timeout' => 30,
        'username' => 'user',
        'password' => 'secret',
        'client' => null,
        'log' => false,
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

    public $fast = array(
        'from' => 'you@localhost',
        'sender' => null,
        'to' => null,
        'cc' => null,
        'bcc' => null,
        'replyTo' => null,
        'readReceipt' => null,
        'returnPath' => null,
        'messageId' => true,
        'subject' => null,
        'message' => null,
        'headers' => null,
        'viewRender' => null,
        'template' => false,
        'layout' => false,
        'viewVars' => null,
        'attachments' => null,
        'emailFormat' => null,
        'transport' => 'Smtp',
        'host' => 'localhost',
        'port' => 25,
        'timeout' => 30,
        'username' => 'user',
        'password' => 'secret',
        'client' => null,
        'log' => true,
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );
}
3. Vamos focar no atributo $smtp. Basta preencher de acordo com os dados de acesso ao seu e-mail (email, login e senha). Recomendo descomentar as linhas do “charset”. Depois de preenchido ficará mais ou menos assim:
    
        public $smtp = array(
            'transport' => 'Smtp',
            'from' => array('[email protected]' => 'Tiago Matos'),
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            'username' => '[email protected]',
            'password' => '123456',
            'client' => null,
            'log' => false,
            'charset' => 'utf-8',
            'headerCharset' => 'utf-8',
        );
    
4. Caso você use algum e-mail que precise utilizar a conexão SSL como GMail ou Hotmail, deve ficar assim:
    
        public $smtp = array(
            'transport' => 'Smtp',
            'from' => array('[email protected]' => 'Tiago Matos'),
            'host' => 'ssl://smtp.gmail.com',
            'port' => 465,
            'timeout' => 30,
            'username' => '[email protected]',
            'password' => '123456',
            'client' => null,
            'log' => false,
            'charset' => 'utf-8',
            'headerCharset' => 'utf-8',
        );
    

E agora, como faço para usar de fato as configurações?

Simples, em qualquer lugar da sua aplicação, na camada Controller, utilize da seguinte forma:

    
        $Email = new CakeEmail('smtp');
        $Email->to('[email protected]');
        $Email->subject('Assunto');
        $Email->send('Mensagem');
    

Você pode conferir outras opções na documentação do CakePHP. OBS: Se o CakePHP reportar algum erro relacionado à SSL, tente ativar a extensão php_openssl no seu php.ini. Abraços e até a próxima.