• Home
  • Projetos
  • Palestras
  • Artigos
  • Livros

Enviando emails em PHP

20/07/2006  Ler e Comentar

Uma das coisas mais chatas em PHP é enviar email. Mas isto não é por causa do PHP, é por que cada software cliente de email trata os headers de uma maneira diferente. Passei uma madrugada dessas quebrando a cabeça, por que os emails funcionavam no evolution, mas não no gmail. Depois funcionavam no gmail, mas não no evolution. Quando consegui fazer funcionar nos dois, empacotei tudo numa classe. E aí está, para ajudar outros a não quebrarem a cabeça :-)



<?php
/*
 * Classe Mail
 * para envio de emails
 */
class Mail
{
    private 
$parts;
    
    
/*
     * Método construtor
     */
    
function __construct()
    {
        
$this->parts = array();
        
$this->boundary = md5(time());
    }
    
    
/*
     * Adiciona HTML
     */
    
function addHtml($body)
    {
        
$body = stripslashes($body);
        
$msg  = "--{$this->mime_boundary}\n";
        
$msg .= "Content-Type: text/html; charset=ISO-8859-1\n\n";
        
$msg .= $body;
        
        
$this->parts[] = $msg;
    }
    
    
/*
     * Adiciona Texto
     */
    
function addText($body)
    {
        
$body = stripslashes($body);
        
$msg  = "--{$this->mime_boundary}\n";
        
$msg .= "Content-Type: text/plain; charset=ISO-8859-1\n\n";
        
$msg .= $body;
        
        
$this->parts[] = $msg;
    }
    
    
/*
     * Adiciona Imagem
     */
    
function addPng($filename, $download)
    {
        
$fd=fopen($filename, 'rb');
        
$contents=fread($fd, filesize($filename));
        
$contents=chunk_split(base64_encode($contents),68,"\n");
        
fclose($fd);
        
        
$msg  = "--{$this->mime_boundary}\n";
        
$msg .= "Content-Type: image/png; name={$download}\n";
        
$msg .= "Content-Transfer-Encoding: base64\n";
        
$msg .= "Content-Disposition: attachment; filename={$download}\n\n";
        
$msg .= "{$contents}";
        
        
$this->parts[] = $msg;
    }
    
    
/*
     * Envia Email
     */
    
function send($from, $to, $subject)
    {
        
$headers  = "From: {$from}\n";
        
$headers .= 'Content-Type: multipart/mixed; boundary="'.$this->mime_boundary."\"\n";
        
$headers .= 'X-Mailer: PHP-' . phpversion() . "\n";
        
$headers .= "Mime-Version: 1.0\n\n";
        
        
$msg = implode("\n", $this->parts);
        
        
mail($to, $subject, $msg, $headers);
    }
}
?>




Comentários

  Usando a classe Mail do seu artigo 

OLá Pablo.Adiquiri recentemente seu livro 'PHP programando com orientação á Objetos',e tenho que te parabenizar pois aprendi muito com a leitura e a prática dos exercícios.Antes eu só programava de forma estrutural.Estou recentemente trabalhando em uma aplicação toda orientada a objetos onde criei um formulário(utilizando as classes da pasta app.widgets) de contato como este do seu blog.Faltava a classe para a função de envio dos emails.Agora não falta mais.Graças a este seu artigo.Gostaria que você postasse um outro artigo demonstrando a utilização desta classe.Um abraço e parabéns pelo seu trabalho!

  Enviado por Clayton Rodrigues em 2010-01-05  



 Adicionar Comentário
 Nome
 Email
 Título
 Comentário

Livros


  • Outros

    • Galeria de Fotos
    • Posts no Codare

    Arquivo

    • 2009
    • 2008
    • 2007
    • 2006
    • 2005
    • 2004
  • Google

    Blogroll

    • Adler Medrado
    • Aurélio Jargas
    • Andrei Zmievski
    • Eduardo Maçan
    • Efetividade
    • Er Galvão
    • Joel on Software
    • Marcelio Leal
    • Martin Fowler
    • Miguel de Icasa
    • Newton Wagner
    • Rafael Dohms
    • Rasmus Lerdorf
    • Sérgio Crespo
    • Timoty Ney

    Posts Aleatórios

    • Cafeomancia
    • Canon SX100 - Sem comparação
    • Sintaxe do Vim no Ubuntu
    • Rodando o Windows XP no Ubuntu 7.10
    • Onde está o Pablo ?
    • PHP Programando com Orientação a Objetos :: Segunda Edição
    • Gerando Thumbs em PHP
    • SITEC
    • Itararé :: Fafit/Facit
    • 5o. Fórum Internacional de Software Livre
    • Nova versão do Agata Report
    • III Seminário de Desenvolvimento de Software Livre
    • Curso de Marc21
    • Semana de Capacitação em Software Livre
    • Lanternas de LED
    • Lançamento do meu livro de PHP-GTK
    • Fórum Internacional de Software Livre
    • 1o GoPHPConf
    • Palestra PHP: da web ao desktop no Uniinfo2008
    • Passeio nas Missões
 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

© 2006 Wordpress Themes | Theme (Not so) Fresh
XHTML CSS