Enviando e-mails via Gmail com Zend_Mail

Configurar um servidor SMTP é trabalhoso, principalmente pela briga de gato e rato que é não cair nas listas negras e ser tratado como SPAM, confesso que não tenho muita paciência pra isso, apesar de já ter de faze-lo algumas vezes, mas se puder correr dessa alternativa, melhor ainda.

As vezes, tudo que precisamos é criar um formulário de contato simples para um pequeno site de cliente, ou mesmo apenas para nos enviar alguns avisos da aplicação. 

Classes para envio de e-mails existem aos montes, uma que gosto muito e recomendo é a PHPMailer, que já usei por algum tempo e nunca me deu trabalho. Mas como a algum tempo venho utilizando a Zend Framework em meus projetos, nada melhor do que utilizar o módulo já incluso na mesma para esta tarefa não é mesmo? Seguindo o passo a passo descrito abaixo, fica simples enviar e-mails. Vamos lá.

Primeiro, criamos um um arquivo chamado ‘smtp.ini’ em application/configs com o seguinte conteúdo:

; -------------------------------------------------
; | SMTP Host configuration
; -------------------------------------------------


[smtp]
smtp.titulo  = Título padrão para o e-mail
smtp.usuario = [email protected]
smtp.senha   = senha
smtp.host    = smtp.gmail.com
smtp.porta   = 465
smtp.seguranca = ssl
smtp.auth    = login

Agora, na action que vamos enviar o nosso e-mail, basta colocar o seguinte código

// busco as configurações no ini
$objCfg = new Zend_Config_Ini(APPLICATION_PATH . '/configs/smtp.ini', 'smtp');
$arrCfg = $objCfg->toArray();

// configuro o cliente SMTP
$config = array('auth'     => $arrCfg['smtp']['auth'],
                'username' => $arrCfg['smtp']['usuario'],
                'password' => $arrCfg['smtp']['senha'],
                'smtp'     => $arrCfg['smtp']['host'],
                'ssl'      => $arrCfg['smtp']['seguranca'],
                'port'     => $arrCfg['smtp']['porta']);

// instancio o cliente SMTP
$smtp = new Zend_Mail_Transport_Smtp($config['smtp'], $config);

// instancio o cliente de e-mail e tento enviar a mensagem
$mail = new Zend_Mail();
$mail->setFrom($params['email'], $params['nome'])
     ->setReplyTo($params['email'], $params['nome'])
     ->addTo('[email protected]')
     ->setBodyHtml('Teste de e-mail')
     ->setSubject($arrCfg['smtp']['titulo'])
     ->send($smtp);

// desconecto do host smtp
$smtp->getConnection()->disconnect();

Pronto, e-mail enviado!!! Agora é só fazer os tratamentos de campos, excessões e etc, conforme a necessidade da sua aplicação. ;)