O Zend_Mail prove uma série de classes que facilitam o envio de E-mail. Prove envio simples utilizando a função mail() do PHP, até envio mais complexo usando autenticão ou mesmo com acesso via SSL.

Os métodos do Zend_Mail também prove suporte interface fluent que facilita a programação. Veja abaixo um exemplo simples de envio de E-mail:

10012\index.php
<?php
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setFrom('fulano@dominio.com.br', 'Fulano')   // Quem esta enviando
     ->addTo('beltrano@gmail.com', 'Beltrano Souza')// para quem esta enviando
     ->setBodyText("Teste de mensagem")             // mensagem sem formata?
     ->setSubject("Teste de assunto")               // Assunto
     ->send();                                      // Enviar

Neste exemplo acima o E-mail é enviado com a função mail() do PHP.

/* Os métodos addCc, addTo e setFrom aceitam como parâmetro apenas o $email, ou pode ser informado o $email e $nome. */.

Enviando E-mail com autenticação no servidor de E-mail

o Zend_Mail pode ser auxiliado pela classe  Zend_Mail_Transport_Smtp no envio de e-mail autenticado. Esta classe prové uma série de recursos para se conectar via SMTP em servidores de e-mail.

/* aqui no meu laboratório a unica coisa que não tenho é servidor de envio de E-mail. então sempre faço os envios de e-mail para testar através de autenticação.  Também em muitos sistemas o envio autenticado ainda passa para o servidor de produção, para que e-mail enviado pelo PHP seja considerado Spam */

Abaixo exemplo de envio de E-mail autenticado.

Config.php
<?php

class Config {
    
    public static function getMailInstance() {
        require_once 'Zend/Mail/Transport/Smtp.php';
        
        $config ['auth'] = 'login'; // Email servidor autenticados
        $config ['username'] = 'email@servidor.com.br'; // informa o login do E-mail
        $config ['password'] = '123456789'; // senha
        
        return new Zend_Mail_Transport_Smtp ( "smtp.servidor.com.br", $config );
    }
}
10012\index2.php
<?php
require_once 'Config.php';
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setFrom('fulano@dominio.com.br', 'Fulano')
     ->addTo('beltrano@gmail.com', 'Beltrano Souza')
     ->setBodyText("Teste de mensagem")
     ->setSubject("Teste de assunto")
     ->send(Config::getMailInstance());

Valide as configurações e teste este exemplo.

Enviar Com Cópia (CC) ou Com Cópia Oculta (CCO)

A classe Zend_Mail dá suporte a envio de cópias simples ou ocultas aos e-mail. Para isso temos os métodos addCc() e addBcc(). O método addBcc somente aceita o E-mail.

10012\index3.php
<?php
require_once 'Config.php';
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setFrom('fulano@dominio.com.br', 'Fulano')
     ->addTo('beltrano@gmail.com', 'Beltrano Souza')
     ->addBcc('seila@servidor.com')
     ->addBcc('esteVaicomCC@servidor.com')
     ->setBodyText("Teste de mensagem")
     ->setSubject("Teste de assunto")
     ->send(Config::getMailInstance());

/* Se for enviar várias pessoas com cópia oculta, direcione uma cópia direta ao seu e-mail, para diminuir a possibilidade de ser considerado Spam */

Enviar e-mail formatado

Muitas vezes queremos enviar e-mail com alguma formatação e até usar um editor como o caso do FCKEditor para este fim.

Então neste caso a definição do corpo do E-mail não é mais pelo setBodyText, mais agora pelo setBodyHtml.

10012\index4.php
<?php
require_once 'Config.php';
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setFrom('fulano@dominio.com.br', 'Fulano')
     ->addTo('beltrano@gmail.com', 'Beltrano Souza')
     ->setBodyHtml('<p>Esta mensagem chegar?ormatada no <b>email</b> do cliente<p>')
     ->setSubject("Teste de assunto")
     ->send(Config::getMailInstance());

Enviando E-mail MultiParts

E-mail MultiParts são e-mail ao qual enviamos a mensagem formatada em HTML e outra sem formatação. Os leitores de E-mail selecionarão a que melhor se adapta e o exibirá.

Para isso definimos uma mensagem não formatada no setBodyText, e uma mensagem formatada no setBodyHtml.

10012\index5.php
<?php
require_once 'Config.php';
require_once 'Zend/Mail.php';

$mail = new Zend_Mail();
$mail->setFrom('fulano@dominio.com.br', 'Fulano')
     ->addTo('beltrano@gmail.com', 'Beltrano Souza')
     ->setBodyHtml('<p>Esta mensagem chegará formatada no <b>email</b> do cliente<p>')
     ->setBodyText('O Cliente se acessar de dispositivos móveis irá ler esta mensagem')
     ->setSubject("Teste de assunto")
     ->send(Config::getMailInstance());

Em cliente de E-mail de celulares, a maioria irá exibir o formato texto.

Baixe aqui todos os exemplos deste site.

Gostou? Não esqueça de curtir!

9 comentários

Deixe uma resposta

  1. Cara, eu sou iniciante no php, e estou tentando enviar um anexo por e-mai, ótima explicação, porém não entendi uma coisa: require_once 'Config.php'; que arquivo é esse Config.php? ele está junto com o Zend?

     
  2. O config.php esta no ZIP que esta disponível para download.

    Em http://php.eduardokraus.com/enviando-e-mail-atraves-do-zend-mail você pode ver o arquivo Config.php.

     
  3. Um Otimo Profissional e amigo

     
  4. depender de resposta é dificil, como gerar logs nossos para saber por que nao foi pra determinado dominio do google aps ?

     
  5. usando o modo simples:

    $to      = $_POST['email'];
    $subject = "teste";
    $message = 'Bababababab';
    $headers = "From: vivi <xxxx@gmail.com>\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    mail($to, $subject, $message, $headers);
    por que testando para gmail e dominios que usam googleaps por que alguns nao chegam? e nem cai no spam?
    tem algo para melhorar?

     
  6. Dois motivos.

    1º deles é a segurança SPF que o google pode aplicar. Muitos servidores conferem os SPF antes que as mensagens sejam enviadas ao destino. Só trocando para um servidor que não confere isso para funcionar.
    2º Pode ser que seu servidor não tenha suporte a envio de E-mail. Só trocando para um que tenha suporte a envio de E-mail.

     
  7. mas como o mesmo servidor consegue mandar para gmail e contas googleaps e um ou outro nao consegue? tem algum serviço de email que é mais garantido o envio?

     
  8. Se for hospedagem tens que entrar em contato com a empresa que presta esta hospedagem para você. Se for dedicado você tem que analizar os LOG's do seu servidor.