• 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

    • Enviando emails em PHP
    • GNUTeca no Rio
    • phpNow! em Petrópolis-RJ
    • Software Freedom Day
    • Piratas do Vale do Silício
    • Cafeomancia
    • Experiências de um desenvolvedor de software livre
    • Luau do Sesi e Show do Cidadao Quem em Teutônia
    • Escritório de nerd imitando de executivo
    • Palestra PHP: da web ao desktop no Uniinfo2008
    • Reportagem sobre o livro de PHP-GTK no Jornal o Estado de São Paulo
    • eeePC 1000HD é muito bom
    • Calcular o caminho euleriano em PHP
    • Descobrindo o Browser com PHP
    • Nova versão do Agata Report
    • Brasília por fotos
    • Roteador ZinWell G220 como repetidor
    • Experiências de um desenvolvedor de software livre
    • SITEC
    • Convertendo DBF para SQL (DBF2SQL)
 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

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