Back-End

2 jan, 2008

Zend Framework – Aprendendo a utilizar o Zend_Mail()

Publicidade

Olá pessoal, como vão? Essa semana mostarei um exemplo de envio de e-mail utilizando o componente Zend_Mail() do Zend Framework. No artigo anterior, vimos uma visão geral do Zend Framework e sua instalação/configuração.

Recebi muitos e-mails nos últimos dias dizendo: “Poxa Júlio, era preciso escrever todas aquelas linhas para escrever um simples Hello, World?”. À primeira vista parece complicado, mas “felizmente tudo aquilo” se faz necessário. Lembre-se que estamos trabalhando seguindo o padrão MVC (Modelo, Visão e Controlador) e precisamos fazer a divisão da programação do designer.

Ambiente utilizado:

  • Windows XP
  • PHP 5.2.3
  • Apache 2.0.61
  • Zend Framework 1.0.3

Nesse artigo aprenderemos:

  1. Enviar um email simples;
  2. Enviar um email HTML;
  3. Enviar um email com anexo.

Todos os exemplos acima, utilizando o SMTP do GMAIL para envio.

ATENÇÃO:

Para se conectar ao SMTP do GMAIL é necessário habilitar no PHP o suporte a SSL.

Windows: No php.ini descomente a linha:

extension=php_openssl.dll

No include_path do php.ini adicionei o caminho do Zend Framework.

Exemplo: include_path = “.;G:\pagina\zend\1.0.3\library”

Enviando um email simples (email_simples.php)

Como estaremos utilizando uma conta do GMAIL, teremos que se autenticar para utilizar o SMTP.


<?php
echo "<h1>Artigo iMasters - Zend_Mail()</h1>";
echo "<h4>Script desenvolvido por: Júlio César Martini</h4>"; 
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

/**
CONFIGURAÇÃO PARA ENVIO DO EMAIL
*/

$smtp = "smtp.gmail.com";
$conta = "Aqui vc coloca o seu email do GMAIL.";
$senha = "Aqui vc coloca a sua senha do GMAIL.";
$de = "Aqui vc coloca o email de quem está enviando o email.";
$para = "Aqui vc coloca para quem vai o email. ";
$assunto = "Teste de envio de email - Artigo iMasters.";
$mensagem = "Isso é apenas um teste de envio utilizando o Zend_Mail().";

try {
$config = array (
'auth' => 'login',
'username' => conta,
'password' => senha,
'ssl' => 'ssl',
'port' => '465'
);

$mailTransport = new Zend_Mail_Transport_Smtp($smtp, $config);

$mail = new Zend_Mail();
$mail->setFrom($de);
$mail->addTo($para);
$mail->setBodyText($mensagem);
$mail->setSubject($assunto);
$mail->send($mailTransport);

echo "Email enviado com SUCESSSO!";
} catch (Exception $e){
echo ($e->getMessage());
}
?>

Resultado:

Se o email for enviado com SUCESSO, a seguinte tela será visualizada:

A tela abaixo, é uma possível mensagem de erro. “Usuário/Senha para conexão ao Gmail inválidas!“. Para tratar as mensagens de erro, estou trabalhando com as excessões do PHP5 utilizando Try/Catch.

Enviando um email em HTML (email_html.php)

Para enviar um email HTML mudaremos apenas uma linha.

Utilizaremos mail->setBodyHtml em vez de mail->setBodyText.


<?
echo "<h1>Artigo iMasters - Zend_Mail()</h1>";
echo "<h4>Script desenvolvido por: Júlio César Martini</h4>";
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

/**
CONFIGURAÇÃO PARA ENVIO DO EMAIL
*/
$smtp = "smtp.gmail.com";
$conta = "Aqui vc coloca a sua conta do GMAIL.";
$senha = "Aqui vc coloca o seu email do GMAIL.";
$de = "Aqui vc coloca o email de quem está enviando o email.";
$para = "Aqui vc coloca para quem vai o email. ";
$assunto = "Teste de envio de email em HTML - Artigo iMasters.";
$mensagem = "Isso é apenas um teste de envio utilizando o <b>Zend_Mail()</b>.<br><br>Até mais, <br>Júlio César Martini<br><i>Colunista PHP - iMasters</i>";

try {
$config = array (
'auth' => 'login',
'username' => conta,
'password' => senha,
'ssl' => 'ssl',
'port' => '465'
);

$mailTransport = new Zend_Mail_Transport_Smtp($smtp, $config);

$mail = new Zend_Mail();
$mail->setFrom($de);
$mail->addTo($para);
$mail->setBodyHtml($mensagem);
$mail->setSubject($assunto);
$mail->send($mailTransport);

echo "Email enviado com SUCESSSO!";
} catch (Exception $e){
echo ($e->getMessage());
}
?>

Resultado:

Compo pode-se observar na figura abaixo, o email enviado contêm texto negrito e itálico. Fácil, né?

Enviando um email com anexo (email_anexo.php)

No script abaixo, o usuário informará o email de destino e selecionará o arquivo a ser anexado ao email.


<?php
echo "<h1>Artigo iMasters - Zend_Mail()</h1>";
echo "<h4>Script desenvolvido por: Júlio César Martini</h4>";

/**
* Checa se o form foi enviado
*/
if($_POST) {

/**
* Inclue arquivos do Zend_Mail()
*/
require_once 'Zend/Mail.php';
require_once 'Zend/Mail/Transport/Smtp.php';

/**
* Recebe os campos do formulário
*/
$arqTmp = $_FILES["file"]["tmp_name"];
$arqName =$ _FILES["file"]["name"];
$arqType = $_FILES["file"]["type"];
$para = $_POST["para"];

/**
* Configuração do envio do email
*/
$smtp = "smtp.gmail.com";
$conta = "Aqui vc coloca a sua conta do GMAIL.";
$senha = "Aqui vc coloca a sua senha do GMAIL.";
$de = "Aqui vc coloca o email de quem está enviando o email.";
$assunto = "Teste de envio de email com Anexo - Artigo iMasters.";
$mensagem = "Isso é apenas um teste de envio utilizando o <b>Zend_Mail()</b>.<br><br>Até mais, <br>Júlio César Martini<br><i>Colunista PHP - iMasters</i>";

try {
$config = array (
'auth' => 'login',
'username' => conta,
'password' => senha,
'ssl' => 'ssl',
'port' => '465'
);

$mailTransport = new Zend_Mail_Transport_Smtp($smtp, $config);

$mail = new Zend_Mail();
$mail->setFrom($de);
$mail->addTo($para);
$mail->setBodyHtml($mensagem);
$mail->setSubject($assunto);
$mail->createAttachment(file_get_contents($arqTmp), $arqType, Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, $arqName);
$mail->send($mailTransport);

echo "Email enviado com SUCESSSO!";
} catch (Exception $e){
echo ($e->getMessage());
} 
} else { ?>
<form method="post" enctype="multipart/form-data" name="form">
Arquivo: <input type="file" name="file" size="30" /> <br />
Enviar para: <input type="text" name="para" size="40" value="testeteste.com.br" /> <br />
<input name="Enviar" type="submit" id="Enviar" value="Enviar" />
</form>
<?php 
}
?>

Depurando:

Linha 20 a 23: Recebemos os campos do formulário.

Linha 28 a 33: Configuração da conta do GMAIL para o envio do email.

Linha 36: Monta um array com a configuração fornecida.

Linha 44: Tenta criar um “ponteiro” para envio de email via SMTP.

Linha 46: Instancia Zend_Mail();

Linha 47: Seta o email de quem está enviando.

Linha 48: Seta o email do usuário que estará recebendo.

Linha 49: Seta a mensagem em HTML a ser enviada.

Linha 50: Seta o assunto do email.

Linha 51: Atacha o arquivo enviado pelo usuário, veja que usamos a função file_get_contents() para ler o conteúdo enviado.

Linha 52: Finalmente o email é enviado.

Resultado:

Para maiores informações sobre o Zend_Mail() acesse:

http://framework.zend.com/manual/en/zend.mail.html

Confira abaixo, os artigos da série Zend Framework:

Zend Framework – Uma visão Geral

Para baixar os scripts desse artigo, clique AQUI.

Semana que vem tem mais. Espero que vocês tenham gostado!

Não deixe de nos enviar críticas ou sugestões para o próximo assunto, afinal a coluna é de vocês.

Boa semana a todos! Até mais!