LOGIN:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Zend Framework

Feed da seção Zend Framework

Newsletter de Zend Framework


Quarta-feira, 02/01/2008 - 20:00 - Por Júlio César Martini
Seções relacionadas:

Zend Framework - Aprendendo a utilizar o Zend_Mail()

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!

Todos os artigos de Júlio César Martini

10 comentários publicados

  • 1. Muito bom

    Quinta-feira, 03/01/2008, por Bruno Rodrigues

    Gostei da matéria é uma ótima dica, e o melhor de tudo está muito bem explicado

    Responder comentário
  • 2. Respondendo

    Sexta-feira, 04/01/2008, por Júlio César Martini

    Bruno, que bom que vc gostou do artigo. Sempre procuro escrever os artigos de maneira clara e objetiva. Não deixe de enviar as suas sugestões para o próximo artigo. Abraços!

    Responder comentário
  • 3. Você usa o framework para tudo?

    Sexta-feira, 04/01/2008, por Carlos Gustavo

    Acha que ele aumenta a produtividade melhor que CodeIgniter, CakePHP ou Simphony?

    Responder comentário
  • 4. Isso é pra fórum

    Segunda-feira, 07/01/2008, por Carlos Gustavo

    Pelamordedeus, Wanderlei, isso aí é dúvida pra fórum.

    Responder comentário
  • 5. Zend E-mail sem SSL

    Quinta-feira, 08/05/2008, por Williams Gomes Lucena

    Olha muito legal esse tutorial, agora preciso saber como mandar os e-mails sem SSL.

    Desde ja agradeço.

    Responder comentário
  • 6. Legal

    Domingo, 18/05/2008, por Alaerte Gabriel

    Ótimia matéria, deste modo os e-mails chegam autenticados, evitando ir para caixa de spam, além do mais o Zend é sem comentários, muito bom.
    Matéria vem explicada, ta muito bom.

    Responder comentário
  • 7. Problema

    Terça-feira, 03/06/2008, por Rogério Knop

    Boa tarde Júlio.

    Ocorreu o seguinte erro quando fui rodar o script:
    Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to tcp://smtp.gmail.com:Array (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. ) in D:\Apache2\zend\library\Zend\Mail\Transport\Smtp.php on line 97

    Fatal error: Maximum execution time of 30 seconds exceeded in D:\Apache2\zend\library\Zend\Mail\Transport\Smtp.php on line 97

    O que pode estar acontecendo?

    Responder comentário
  • 8. Local...

    Sexta-feira, 06/06/2008, por Alaerte Gabriel

    Você ta tentando executar em sua máquina local, se o SMTP não estiver configurado, você não vai conseguir, o ideal é você colocar em um servidor e executar.

    Responder comentário
  • 9. Autenticação - Zend

    Segunda-feira, 04/08/2008, por Paolo Melo

    Muito bom seu Artigo Júlio.
    Meu parebéns mesmo.
    Gostaria de saber se você pode me dar uma ajuda.
    Na empresa onde eu trabalho, quando os usários logan pela primeira vez no sistema, ele cria uma conta de e-mail no G-Mail (pela nossa interface mesmo). Eu gostaria de saber se tem como assim que ele logar em nosso sistema, aquele usuário e senha já serem autenticados no GMail também, assim, ele só precisaria logar na nossa ferramenta para já estar logado no GMail.
    Desde já agradeço.

    Responder comentário
  • 10. Envio de email

    Quinta-feira, 20/11/2008, por Alex Barbosa Ferreira

    Júlio,
    antes de mais nada quero parabenizá-lo pelo trabalho.
    Após estudar e adaptar seu código ao site que estou produzindo, percebi que após a mensagem de e-mail enviado com sucesso, não recebo nenhum e-mail em nenhuma caixa entrada referente aos e-mails cadastrados. Não tem aparecido nenhum log de erro aparente. O que pode estar acontecendo? Estou rodando em um máquina local com xampp e zend framework 1.7.0.

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Júlio César Martini atualmente presta serviços de WebMaster/Programador para o UOL (http://www.uol.com.br), Graduado em Tecnólogo em Informática pela UNIFIAN - Faculdades Anhanguera e Pós-Graduado em Desenvolvimento de Software para Web pela UFSCAR. Foi o primeiro profissional a chegar à marca de 100 artigos publicados no iMasters e trabalha com PHP desde 2000. Site: http://www.juliocesarmartini.com


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.