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. ;)

Utilizando Rotas com Zend Framework

As vezes, é importante definir algumas urls mais amistosas para sua aplicação, ao invés de deixar o padrão “controller/action/nomeparametro/valorparametro”, isso as vezes pode confundir, além de ficar feio para um site por exemplo.

Para contornar isso, temos o Zend_Controller_Router_Route, que nos facilita o trabalho de criarmos as tais rotas, que é nome mas apropriado para este tipo de redirecionamento.

O uso é simples, vamos criar no diretório ‘application/configs’ um arquivo chamado ‘routes.ini’, e colocamos nele o seguinte conteúdo:

[routes]
routes.artigos.route = "artigos/:sessao"
routes.artigos.defaults.controller = artigos
routes.artigos.defaults.action = index

Entendeu? Não? Eu explico então cada linha. Onde está escrito ‘artigos’, é o nome da rota que estamos definindo. Um identificador único para a mesma. Logo em seguida, nos valores, definimos o caminho da rota, ou seja, nossa url, que seria ‘/artigos’ e seu parâmetro, que podem ser vários, bastando começar com ‘:’ (dois pontos). As outras linhas são auto explicativas.

Dentro do action que você apontou a rota, para receber o valor do parâmetro ‘:sessao’ por exemplo, basta utilizar um $this->_getParam(‘sessao’).

Em nosso Bootstrap, adicionamos um método para buscar automaticamente nossas rotas

protected function _initRouter()
{
    $this->bootstrap('frontController');

    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes');

    $router = $this->getResource('frontController')
                   ->getRouter()
                   ->addConfig($config, 'routes');

    return $router;
}

Pronto, com isso, basta apontar sua url para ‘/artigos/nomedeumasessao’, e está definida sua rota personalizada. Você pode ir adicionando quantas rotas quiser em seu routes.ini.

Divirta-se ;)

Trabalhando com imagens utilizando a biblioteca Imagick

Qual programador nunca teve sua função ‘criaThumb’, ‘thumb’ ou parecida, utilizando aqueles terríveis - e chatos - cálculos e ‘ifs’ com GD não é mesmo? Pessoalmente, nunca gostei, utilizada por não conhecer outra alternativa, mas agora com a biblioteca Imagick isso ficou até massa de fazer.

Com ela, você pode não apenas criar miniaturas de imagens, mas também recuperar várias informações, recortar, redimensionar, inserir uma marca d’água, mesclar imagens, enfim, o limite é a sua imaginação.

A instalação é simples, no Ubuntu, basta dar um: ‘sudo apt-get install php5-imagick’ e pronto, o módulo esta lá, disponível pra uso. E você pode fazer horrores com esta biblioteca, abaixo vou citar um pequeno exemplo de uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
// instancio a biblioteca informando a imagem como fonte
$objImagem = new Imagick('/tmp/minhafotogigante.jpg');

// seto a compressão como jpeg
$objImagem->setImageCompression(Imagick::COMPRESSION_JPEG);

// defino o nível de qualidade de compressão
$objImagem->setCompressionQuality(100);

// faço o thumbnail normal
$objImagem->thumbnailImage(120, 80);

// ou faço um thumbnail recortando
$objImagem->cropThumbnailImage(120, 90);

// ou recorto um pedaço da imagem
$objImagem->cropImage(120, 90, 0, 0);

// salvo a imagem em disco
$objImagem->writeImage('/tmp/minhafotopequena.jpg');

// recupero o mime-type (tipo) da imagem
$strImagemFormato = $objImagem->getImageFormat();

// seto corretamente o content-type no header e imprimo
header("Content-Type: image/{$strImagemFormato}");
echo $strImagem;

Viu, simples não? No manual existem várias outras opções de uso, e com certeza irão atender plenamente suas necessidades.