Ao desenvolver uma aplicação utilizando o Zend Framework, me deparei com a necessidade de enviar e-mail, algo muito próximo a uma página de contato de um site, onde o usuário deveria de preencher um formulário e ao submeter deveria enviar este e-mail de forma automática, contendo as informações do formulário.

Sempre utilizei o PHPMailer para enviar e-mails em aplicações onde não utilizava um framework. Como passei a utilizar o Zend framework como base de meus projetos resolvi aprender mais este componente (Zend_Mail), me surpreendeu (ou melhor, já esperava) por tamanha facilidade.

Vamos agora entender um pouco do funcionamento deste componente.

Envio de e-mail simples

Para o envio de e-mail de forma simples, são necessárias algumas definições, como por exemplo destinatário, remetente e a mensagem.

Segue um exemplo de envio:

<?php
// Instancia classe Zend_Mail
$mail = new Zend_Mail();
// Mensagem do e-mail
$mail->setBodyText("Este foi um envio de e-mail simples");
// Seta remetente
$mail->setFrom('meu_usuario@meu_dominio.com.br', 'Nome do remetente');
// Define destinatário
$mail->addTo('usuario@gmail.com');
// Assunto do e-mail
$mail->setSubject('E-mail simples');
// Envia o e-mail
$mail->send();
?>

Envio de e-mail com autenticação

Já esta forma de envio de e-mail não foge do padrão anterior, mudando apenas que utilizaremos a classe auxiliar Zend_Mail_Transport_Smtp para efetuar a autenticação com o servidor de e-mail. O e-mail enviado passará pelo servidor de e-mail ajudando a evitar que o e-mail seja reconhecido como spam.

Lembrando, ao enviar e-mail de forma autenticada, não é uma garantia para que o e-mail não seja reconhecido como spam.

Exemplo de envio de e-mail de forma autenticada:

<?php
// Configurações para envio de e-mail
$configuracao = array(
    'auth' => 'login',
    'username' => 'meu_usuario@meu_dominio.com.br',
    'password' => 'minha_senha'
);

// Instancia da classe para autenticar
$transporte = new Zend_Mail_Transport_Smtp('smtp.meu_dominio.com.br', $configuracao);

// Instancia classe Zend_Mail
$mail = new Zend_Mail();
// Mensagem do e-mail
$mail->setBodyText("Este foi um envio de e-mail autenticado");
// Seta remetente
$mail->setFrom('meu_usuario@meu_dominio.com.br', 'Nome do remetente');
// Define destinatário
$mail->addTo('usuario@gmail.com');
// Assunto do e-mail
$mail->setSubject('E-mail autenticado');
// Envia o e-mail
$mail->send($transporte);
?>

Envio de e-mail autenticado utilizando certificados TSL e SSL

O Zend_Mail permite ainda, a utilização dos certificados TSL e SSL para uma autenticação, um exemplo que exige a utilização destes certificados é o envio de e-mail através de uma conta do Gmail ou Google Apps para empresas. Para isso basta incluir mais dois parâmetros nas configurações definidas anteriormente.

Lembrando que para utilizar esta criptografia deverá habilitar em seu php.ini a extensão openssl.

extension=php_openssl.dll

Exemplo de envio de e-mail de uma conta do Gmail:

<?php
// Configurações para envio de e-mail
$configuracao = array(
    'auth' => 'login',
    'username' => 'meu_usuario@gmail.com',
    'password' => 'minha_senha',
    'ssl' => 'ssl',
    'port' => 465
);

// Instancia da classe para autenticar
$transporte = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $configuracao);

// Instancia classe Zend_Mail
$mail = new Zend_Mail();
// Mensagem do e-mail
$mail->setBodyText("Este foi um envio de e-mail autenticado com certificado");
// Seta remetente
$mail->setFrom('meu_usuario@meu_dominio.com.br', 'Nome do remetente');
// Define destinatário
$mail->addTo('usuario@gmail.com');
// Assunto do e-mail
$mail->setSubject('E-mail autenticado com certificado');
// Envia o e-mail
$mail->send($transporte);
?>

Envio de e-mail e seus formatos

Dependendo da necessidade, um e-mail contendo apenas texto pode resolver o problema, mas na grande maioria das vezes, nossos clientes solicitam e-mails formatados, contendo uma aparência mais agradável. Neste caso o Zend_Mail atende muito bem, tendo a possibilidade de envio de e-mail contendo apenas texto ou em formatado com HTML.

Para enviar um e-mail formatado utilize o método ao setBodyHtml invés do setBodyText, segue um exemplo:

<?php
// Instancia classe Zend_Mail
$mail = new Zend_Mail();
// Mensagem do e-mail
$mail->setBodyHtml("Este foi um envio de e-mail em formato: <b>HTML</b>");
// Seta remetente
$mail->setFrom('meu_usuario@meu_dominio.com.br', 'Nome do remetente');
// Define destinatário
$mail->addTo('usuario@gmail.com');
// Assunto do e-mail
$mail->setSubject('E-mail em formato HTML');
// Envia o e-mail
$mail->send($transporte);
// lembrando que a variável $transporte é da autenticação ver exemplos anteriores
?>

Envio de e-mail e seus destinatários

Como todo gerenciador de e-mail o Zend_Mail também segue o padrão, com ele é possível adicionar vários destinatários seja no para, copia ou copia oculta, para isso utilize os seguintes métodos:

addTo(): Adiciona um destinatário no “Para”.
addCc(): Adiciona um destinatário no “Cc” para receber uma cópia do e-mail.
addBcc(): Adiciona um destinatário no “Cco” para receber o e-mail de forma oculta.

Um detalhe importante a ser observado, é que os métodos addTo e addCc aceitam de forma opcional um segundo parâmetro contendo o nome do destinatário, o addBcc aceita apena um parâmetro, o e-mail.

Veja o exemplo com a utilização destes três casos:

<?php
// Instancia classe Zend_Mail
$mail = new Zend_Mail();
// Mensagem do e-mail
$mail->setBodyText("Este foi um envio de e-mail com vários destinatario");
// Seta remetente
$mail->setFrom('meu_usuario@meu_dominio.com.br', 'Nome do remetente');
// Define destinatário
$mail->addTo('usuario_para@gmail.com', 'Usuário Para');
// Define destinatário de cópia
$mail->addCc('usuario_copia@gmail.com', 'Usuario Cópia');
// Define destinatário de cópia oculta
$mail->addBcc('usuario_copia_oculta@gmail.com');
// Assunto do e-mail
$mail->setSubject('E-mail com vários destinatários');
// Envia o e-mail
$mail->send($transporte);
// lembrando que a variável $transporte é da autenticação ver exemplos anteriores
?>

Problemas com caracteres incorretos

Ao enviar e-mails utilizando o Zend_Mail podem ocorrer algumas problemas na questão de caracteres errados, mas como já se pode esperar existe uma maneira de tratar este problema, por padrão o Zend_Mail utiliza o conjunto de caracteres iso-8859-1.

Para utilizar outro conjunto de caracteres como, por exemplo, UTF-8 faça conforme exemplo a seguir:

<?php
// Instancia classe Zend_Mail
$mail = new Zend_Mail("UTF-8");
?>

Bom, vou ficando por aqui no assunto Zend_Mail, não vou me estender mais neste post, pois se não vai ficar grande demais em consequência exaustivo, pretendo dar continuidade na parte em anexar arquivos ao e-mail, acredito que este assunto renda tranquilamente assunto para um novo post.

Não deixe de comentar, até breve.
Forte Abraço.

2 Responses to “Enviando e-mail com Zend_Mail”

  1. Eduardo says:

    Muito bom, belo post.

    Zend Framework facilita e muito

Leave a Reply

*

Current month ye@r day *