|
|
|
|
|
| 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) |
|
|
|
|
|
|
 |