Terça-Feira, 07 de Setembro de 2010

  Procurar por: Em:  

Confira nossas seções disponíveis!

 

 
 
 
 
 
 
 
 
 
 


Enviando anexos com a função mail()

Enviado por Clenisson Calaça,
em 08/09/05 às 12:19
Neste artigo estarei demonstrando como fazer para enviar anexos por email, utilizando para tal a função mail(). Depois de algum tempo analisando os emails que recebia, cheguei a um formato que funciona em 99% dos programas de email. Espero que ajude! :)

5297 cliques.


Autor: Vinicius Mommensohn

Bom, como todo mundo gosta, vamos direto ao assunto! Como fazer para enviar anexos com o email pelo PHP???

Para utilizar desse script é necessário que a função mail() de seu PHP esteja funcionando! Lembrando que, para ela funcionar, você deve ter instalado algum server de email (qmail, sendmail) anteriormente já que o php, na hora de compilar, procura pelo link simbolico do sendmail no sistema.

Na hora de desenvolver o script, tomei como referencia os emails anexados pelo Outlook Express 6 (que é um dos mais utilizados atualmente :/ ).

Vamos dizer que você queira anexar o arquivo imagem.gif em seu e-mail. Vou colocar o código primeiro e depois a explicação.


<?php
$boundary = strtotime('NOW');

$headers = "From: Eu <meu@email.com.br>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\n";

$msg = "--" . $boundary . "\n";
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$msg .= "Content-Transfer-Encoding: quoted-printable\n\n";

$msg .= "Aqui eu escrevo o texto do email\n";

$msg .= "--" . $boundary . "\n";
$msg .= "Content-Transfer-Encoding: base64\n";
$msg .= "Content-Disposition: attachment; filename=\"imagem.gif\"\n\n";

ob_start();
readfile("imagem.gif");
$enc = ob_get_contents();
ob_end_clean();

$msg_temp = base64_encode($enc). "\n";
$tmp[1] = strlen($msg_temp);
$tmp[2] = ceil($tmp[1]/76);

for ($b = 0; $b <= $tmp[2]; $b++) {
$tmp[3] = $b * 76;
$msg .= substr($msg_temp, $tmp[3], 76) . "\n";
}

unset($msg_temp, $tmp, $enc);

mail("para@email.com.br", "Assunto", $msg, $headers);

?>




Bom, agora vamos as explicações!

---------
$boundary = strtotime('NOW');

$headers = "From: Eu \n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\n";
---------

Boundary é a marcação que o programa de email vai levar em conta na hora da separação das partes do email. No corpo do email ele é identificado como '--' mais o boundary!

Em baixo defini alguns cabeçalhos do email. Isso fica a gosto de cada um.

---------
$msg = "--" . $boundary . "\n";
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$msg .= "Content-Transfer-Encoding: quoted-printable\n\n";

$msg .= "Aqui eu escrevo o texto do email\n";
---------

Essa parte é a parte do email que fica o texto! Neste caso ele está em texto puro (text/plain). Mas dá para ser em html (text/html) e dae só precisa colocar as tags do html!

---------
$msg .= "--" . $boundary . "\n";
$msg .= "Content-Transfer-Encoding: base64\n";
$msg .= "Content-Disposition: attachment; filename=\"imagem.gif\"\n\n";

ob_start();
readfile("imagem.gif");
$enc = ob_get_contents();
ob_end_clean();

$msg_temp = base64_encode($enc). "\n";
$tmp[1] = strlen($msg_temp);
$tmp[2] = ceil($tmp[1]/76);

for ($b = 0; $b <= $tmp[2]; $b++) {
$tmp[3] = $b * 76;
$msg .= substr($msg_temp, $tmp[3], 76) . "\n";
}

unset($msg_temp, $tmp, $enc);
---------

Esta parte define a imagem em si! Primeiramente eu envio os identificadores de anexo, com o nome do anexo. Mais embaixo, eu pego o conteúdo do arquivo ( readfile("imagem.gif"); ) e o encripto com o base64 (formato padrão dos anexos no email!).

É nessa parte que tem que se tomar cuidado, pois pelo RFC as linhas do email não podem ser muito grandes. Por isso o FOR "quebra" o conteudo do arquivo em pedaços de 76 caracteres!

Lembrando que, para mandar mais de um arquivo, é colocar um for para pegar os arquivos que você quer... o for fica por conta de voces!!

Libero da memória as variáveis que não me interessam e finalmente...

---------
mail("para@email.com.br", "Assunto", $msg, $headers);
---------

Envia-se o email!!!

E é isso!!!! Com esse código e sua imaginação você consegue fazer muitas coisas com o email!!! :) Lembrando que isso é só o conceito básico, a partir desse código você pode desenvolver sua imaginação (criar funçoes, classes, etc)...



Vinicius Mommensohn

Comentar - Ver comentários (0)

Usuário:  
Senha:  

Esqueci a senha.
Quero me cadastrar.

Melhor visualizado no Internet Explorer.
© 2005-2008 Ponto PHP - Programado e Mantido por Clenisson Calaça.
Design by
Agência Blá. Hospedado por MR Media.
Sugestões, reclamações, erros ou dúvidas sobre o site: contato@pontophp.com.