Enviando e-mail autenticado com Email Component no CakePHP

Envio e-mail autenticado CakePHP
  • 24 de Jan de 2014
  • 4847 Visualizações
  • 7 Comentários

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' => [email protected]',
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

    public $smtp = array(
        'transport' => 'Smtp',
        'from' => array([email protected]' => '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' => [email protected]',
        '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.

TAGS: cakephp, email autenticado, email component, php, tiagomatosweb

Deixe um comentário


7 Comentários

    • Muito Bom! o Melhor que encontrei na internet. Parabéns!

      • Valeu Edmilson! Se tiver dúvidas e só perguntar.

    • Olá,
      Já entendi como funciona a configuração e a logica de envio de e-mail, mas como elaboro a view pagina.ctp para um envio adequado?

      • Olá Luiz, seguindo a lógica do exemplo do post, você iria utilizar. $Email->template('template'); e $Email->layout('layout');. Sendo que a string é o nome do arquivo .ctp.

    • Olá Tiago estou tentando fazer como no seu exemplo acima, porém está dando o seguinte erro: " Uma tentativa de conexão falhou porque o componente conectado não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu ";

      Habilitei a extensão de ssl no php.ini e ainda continua o erro..

    • Parabéns pela dica Tiago!

      • Obrigado Saulo!