• 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



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

Livros


  • Outros

    • Galeria de Fotos
    • Posts no Codare

    Arquivo

    • 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

    • Onde está o Pablo ?
    • Roteador ZinWell G220 como repetidor
    • eeePC 1000HD é muito bom
    • Piratas do Vale do Silício
    • O Caminho do Software Livre em Criciúma
    • Palestra PHP: da web ao desktop no Uniinfo2008
    • Itararé :: Fafit/Facit
    • Palestra em Belém
    • Canon SX100 - Sem comparação
    • Calcular o caminho euleriano em PHP
    • Experiências de um desenvolvedor de software livre
    • Cafeomancia
    • Relato da PHP Conference
    • Dobrando a camisa para a viagem
    • Nova versão do Agata Report
    • Sabado Academico na FTEC em Caxias do Sul
    • Lançamento do meu livro de PHP-GTK
    • Usando o SQLite
    • Software Freedom Day
    • Como não recondicionar um cooler
 
Designed by Wolfgang Bartelme Designed by Wolfgang Bartelme

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