Palavras-chave: PHP, enviar, e-mail, email, gmail, evolution
Uma das coisas mais chatas em PHP é enviar email. Não por causa do PHP, mas porque cada software cliente de email trata os headers de uma maneira diferente.
Passei uma madrugada dessas quebrando a cabeça, porque 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);
}
}
?>





Perfeita essa classe. Já a adicionei em meu framework. Parabéns.
Ou você pode evitar reinventar a roda e usar o Mail_Mime do PEAR, que é mais robusto.
http://pear.php.net/manual/en/package.mail.mail-mime.example.php
Parabéns pela classe. Vai ajudar bastante…
Não funciona pro Outlook…
Isso dá pra adicionar attachments? Ou só imagens dentro do mail a enviar?
rsrsrsrs
funciona pra Globo.com?
Porque eu utilizei a função normal mail() do php sem tantas especificações no headers, e o único que não recebeu foi o e-mail da Globo.
Aguardo notícias,
Grato.
Parabéns pela classe. Vai ajudar bastante…